Open3

さくらのAppRunを試す

fujiwarafujiwara

https://hekki.hateblo.jp/entry/2024/12/17/000000
これを見ながら

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,
    ]
  }
}
fujiwarafujiwara

コンテナレジストリを用意する。Lab product だからか terraform ではサポートされてなさそうなので手動で
https://manual.sakura.ad.jp/cloud/appliance/container-registry/index.html

  • 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 作成が必要かもしれない。一度作ってしまったのでない場合の挙動が再現できず)

fujiwarafujiwara

デプロイツールを書いた
https://github.com/fujiwara/apprun-cli

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