前回、 ACR へコンテナイメージを push したので、 このコンテナイメージを Azure Web App Service に deploy します。
app service plan をつくったあとに web app をつくります。
紙面の都合で一つのシェルスクリプトで書いていますが、 plan が作成できなければ web app はつくれないので、別々に実行すべきです。
#!/bin/bash
RG=my-ktor-rg
PLAN_NAME=myktorplan
WEB_APP_NAME=myktorapp
SKU=B1
L=japaneast
IMAGE_NAME=myktor.azurecr.io/my-ktor:v1
az appservice plan create --resource-group ${RG} --name ${PLAN_NAME} \
--location ${L} --is-linux --sku ${SKU}
az webapp create --resource-group ${RG} --plan ${PLAN_NAME} --name ${WEB_APP_NAME} \
--deployment-container-image-name ${IMAGE_NAME}
例によって RG, PLAN_NAME, IMAGE_NAME などは仮の値です。 ここでは webapp 名を myktorapp にしていますが、こんな短い名前ではまず通らないでしょう。
また location とSKUの組み合わせ次第では、生成できないことがあります。 その場合は、別のロケーション(リージョン)にしろとか言われるので、指示に従いましょう。
コマンドが成功したら、hostNames が標準出力される:
"hostNames": [
"myktorapp.azurewebsites.net"
],
この ホスト名を使って deploy した webapp にアクセスします。
$ curl -X GET https://myktorapp.azurewebsites.net/1
{
"id": 1,
"name": "Pikachu"
}
なお、今題材として使っている my-ktor アプリは 8080 ポートで動くようにしているので、 追加の設定は不要ですが、それ以外のポートを使っている場合は、明示的に使うポートを指定する必要があるらしい。
これで Silicon Mac 上で Gradle でつくった Ktor アプリを コンテナイメージを経由して Azure の Web App Service で動かすことができた。
次は、以前に試した Azure Postgres Flexible Server に、この deploy した webapp からアクセスしてみたい。 もちろん、現在のアプリは データベース自体を使っていないので、 そこを直さなければならない。