触ってみたという記事がいくつか出ていて、自分も気になったので触ってみました。
さくらのクラウド AppRun β版 とは
関連記事
- さくらのクラウド - AppRunで画像変換サービスを作ってみた! - hekiblo
- さくらのクラウド AppRun β を触ってみた - 日々常々
- さくらのクラウドAppRun β版を試してみた | 稲葉サーバーデザイン
- さくらのクラウドのAppRunβ版を触ってみました
作ったもの
Rust + Axum で最小構成なHello, world!するだけのものです。後述の通りバージョン情報を取るエンドポイントだけ追加しています
アプリケーション作成
マニュアルにある通り、AppRunアプリケーションの作成には最低限以下の作業が必要です。(さくらのクラウドのアカウント作成、電話番号認証などは済んでいる前提)
- (事前準備) Webアプリケーションを作成して、コンテナイメージをビルド
- さくらのクラウドにコンテナレジストリを作成
- 作成したレジストリにコンテナイメージをプッシュ
- AppRunアプリケーションを作成
Terraformで作成
普通にWeb UIをポチポチして作業しても出来るけど、Terraformで作成する方法もあるそうなので、極力コントロールパネルを開きたくない人向けに一応書いてみました。
https://github.com/sugyan/apprun-example/tree/main/tf
適当に コンテナレジストリの名前、ユーザのパスワードだけ .tfvars
に書いて実行すれば とりあえず構成だけは作れるはずです。
ただこれは単に「コンテナレジストリを作ってそれをAppRunで参照する構成を作る」というだけなので、実際にイメージをビルドしてプッシュする部分は別途必要になります。上記のものでアプリケーションは作成されるけど、実際にはレジストリに何もイメージがないので最初のデプロイは当然失敗します。
apprun-cli
でデプロイ
ともあれ構成さえ作ることができれば、あとはCLIで諸々の操作ができるはず。 id:sfujiwara さんの便利CLIを使わせていただきます。
Jsonnetで現在の設定を引いてきて、それを適宜編集して deploy
コマンドに渡すことで新しい設定を反映させることができるようです。
apprun-cli init --name my_web_app --jsonnet > myapp.jsonnet # edit myapp.jsonnet apprun-cli deploy --app myapp.jsonnet
Actionsで自動デプロイ
ここまでできるのであれば、あとはもう 「イメージのビルド→プッシュ→デプロイ」を自動化できるはず。
ということでGitHub Actionsでやってみました。
https://github.com/sugyan/apprun-example/blob/main/.github/workflows/deploy.yml
Jsonnetで環境変数から CONTAINER_REGISTRY_IMAGE
を使うよう設定しておき、
main
branchにpushされたら、
- Repository を checkout
Dockerfile
から image を build&push- push された image の digest を
CONTAINER_REGISTRY_IMAGE
にセット apprun-cli
でデプロイ
という流れで、自動で最新のコードがAppRunに反映されるようになりました。
バージョン情報を含める一工夫
実際に動いているWebAppが本当に最新のものか分からなくなりがちなので、metadata-action を使って最新の commit の hash や date を取得し、
labels
や build-args
でイメージや環境変数に埋め込むようにしています。
これによってランタイム上で GET /version
すると、build した時の commit hashや日付が返ってくるようになりました。
まとめ
とりあえず 2025年2月現在の AppRun β版 での簡単なデプロイ自動化の例を書いてみました。他にも便利な方法をご存知の方がいれば教えてください。 もっと便利にやっていけるよう貢献できるところがあればやっていきたいと思います。