Open3
さくらのAppRunを試す

これを見ながら
ghcr.io に置いている公開imageを使おうとしたところ
- container_registry.username を指定しないとエラー > Error: code: 824633797916, message: Validation Error, inner_error: {domain: global, reason: application invalid field, message: invalid Username, location_type: body, location: Username}, {domain: global, reason: application invalid field, message: invalid Password, location_type: body, location: Password}
- 適当なのを指定したところ、エラー message: invalid Container Registry. Must use sakuracr.jp
なので現状ではさくらのコンテナレジストリに置いたもの以外は使えなそう。
terraform {
required_providers {
sakuracloud = {
source = "sacloud/sakuracloud"
version = "~> 2"
}
}
}
provider "sakuracloud" {
}
resource "sakuracloud_apprun_application" "imagine" {
name = "imagine"
timeout_seconds = 60
port = 8080
min_scale = 0
max_scale = 1
components {
name = "imagine"
max_cpu = "1"
max_memory = "2Gi"
deploy_source {
container_registry {
image = "ghcr.io/fujiwara/printenv:v0.1.2"
server = "ghcr.io"
username = "foo"
password = "bar"
}
}
env {
key = "FOO"
value = "foo"
}
probe {
http_get {
path = "/"
port = 8080
}
}
}
lifecycle {
ignore_changes = [
components[0].deploy_source[0].container_registry[0].image,
]
}
}

コンテナレジストリを用意する。Lab product だからか terraform ではサポートされてなさそうなので手動で
- fujiwara.sakuracr.jp
- 管理ユーザー admin, AppRun用ユーザー apparun を作成してそれぞれパスワード設定
$ docker login fujiwara.sakuracr.jp
(adminでログイン)
$ docker tag ghcr.io/fujiwara/printenv:v0.1.2 fujiwara.sakuracr.jp/printenv:v0.1.2
$ docker push fujiwara.sakuracr.jp/printenv:v0.1.2
variable "SAKURACR_APPRUN_PASSWORD" {
type = string
}
resource "sakuracloud_apprun_application" "printenv" {
name = "printenv"
timeout_seconds = 60
port = 8080
min_scale = 0
max_scale = 1
components {
name = "printenv"
max_cpu = "1"
max_memory = "2Gi"
deploy_source {
container_registry {
image = "fujiwara.sakuracr.jp/printenv:v0.1.2"
server = "fujiwara.sakuracr.jp"
username = "apprun"
password = var.SAKURACR_APPRUN_PASSWORD
}
}
env {
key = "FOO"
value = "foo"
}
probe {
http_get {
path = "/"
port = 8080
}
}
}
lifecycle {
ignore_changes = [
components[0].deploy_source[0].container_registry[0].image,
]
}
}
data "sakuracloud_apprun_application" "printenv" {
name = "printenv"
}
output "printenv_url" {
value = data.sakuracloud_apprun_application.printenv.public_url
}
apply するとアプリケーションがデプロイされ、data source から公開用URLが取得できる。
printenv_url = "https://app-c2127ac0-271e-4898-9929-f2db8964ad99.ingress.apprun.sakura.ne.jp"
(先に AppRun 用 user 作成が必要かもしれない。一度作ってしまったのでない場合の挙動が再現できず)

デプロイツールを書いた
ecspresso/lambrollみたいな感じで使えるやつ。list, init, deploy, diff, render, delete あたりがなんとなく動く状態まで。versionとtrafficeまわりはまだない。