はじめに
こんにちは、ACS事業部の吉川です。
本記事はQiitaのAzure Advent Calendar 2022の9日目の記事です。(既に10日になっているって?なんのことやら…)
タイトルにあるように、Azure Container Appsにアプリを爆速でデプロイする 手法をご紹介します。
実践
サンプルアプリとして以下の2ファイルを準備しました。
app.js
const express = require('express') const app = express() const port = process.env.PORT || 3000 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening at ${port}`) })
package.json
{ "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.18.2" } }
ルートパスにアクセスすると Hello World!
とレスポンスを返すだけの単純なNode.jsアプリです。
これを以下のように1つのディレクトリに配置します。
. ├── app.js └── package.json
ではAzure Container Appsにデプロイしましょう。
以下のコマンドを実行します。
az containerapp up -n testapp \ --source . \ --ingress external --target-port 3000
以上で完了です。 あとはコマンドが終了するまで待ちましょう。
完了時に表示されるメッセージの中に、
Browse to your container app at: http://testapp.nicecoast-hogefuga.canadacentral.azurecontainerapps.io
といった形でURLが表示されます。ここにブラウザでアクセスしてみると…
アプリが動いてますね!
コマンドの動き
az containerapp up
を実行すると、内部的には以下のような処理が動きます。
- リソースグループを作成する
- Container Apps環境とLog Analyticsワークスペースを作成する
- Azure Container Registry(ACR)を作成する
- コンテナイメージのビルドタスクをACR内に作成する
- ビルドタスクでコンテナイメージを作成し、ACRにPushする
- ACRにPushされたイメージを基にContainer Appsを作成する
事前にAzure上のリソースを作ることなく、コマンドひとつで全て作成してくれます。
Dockerfileレス
前項で用意したアプリケーションファイルに Dockerfileが含まれていない ことにお気づきでしょうか。
Dockerfileなしでどうやってコンテナイメージを作っているのか、ACRのビルドタスクを見てみましょう。
steps: - cmd: mcr.microsoft.com/oryx/cli:20220811.1 oryx dockerfile --bind-port 3000 --output ./Dockerfile . timeout: 28800 - build: -t $Registry/testapp:20221210043425270338 -f Dockerfile . timeout: 28800 - push: ["$Registry/testapp:20221210043425270338"] timeout: 1800
ステップの1つ目で実行しているコマンドでDockerfileを生成しています。
ここに Oryx というビルドツールを利用しています。App Serviceの中でも利用されているツールです。
はじめてコンテナアプリを作成する場合、「Dockerfileよくわかんない」という方もいらっしゃるかと思います。
その作成の手間を省くことができるというのは便利なポイントかと思います。
なお、az containerapp up
コマンドが対応している言語は以下のとおりです。
- .NET
- Node.js
- PHP
- Python
- Ruby
- Go
おわりに
開発したアプリを即座にAzure上にデプロイできるコマンドの紹介でした。
本番を見据えた環境にはちょっと使いづらいですが、デモ的にさっと動かす程度であれば便利に使えると思います。
Dockerfile書かなくてもいい、という点で入門にもおススメです。
私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。
また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。