Azure Container Apps で Init Containers を試す
少し前に Azure Container Apps (ACA) での Init Containers の利用が GA されていました。
情報自体は知っていつつも実際に触ったことが無かったので、試してみました!
環境
- Windows 10
- WSL2 (Ubuntu 20.04)
- Azure CLI (2.53.0)
構築してみる
公式ドキュメントや Azure Portal 画面なども確認しましたが、GUI (Azure Portal) でポチポチして設定することはできないようです。
Microsoft のブログでも紹介されているのですが、肝心の ACA 上での設定は見当たらず。
ARM Template で適用していくしかないようで、以前公開した記事をベースにしていきます。
コンテナーアプリ環境の作成
下記の手順に沿って、コンテナーアプリ環境を作成しておきます。
ARM Template の作成
以前公開した記事をベースに、公式ドキュメントを参考にして Init Containers の設定を含んだ ARM Template ファイルを作成します。
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionId": {
"type": "string"
},
"name": {
"type": "string"
},
"location": {
"type": "string"
},
"environmentId": {
"type": "string"
},
"containers": {
"type": "array"
},
"secrets": {
"type": "array"
},
"registries": {
"type": "array"
},
"ingress": {
"type": "object"
}
},
"resources": [
{
"name": "[parameters('name')]",
"kind": "containerapps",
"location": "[parameters('location')]",
"dependsOn": [],
"properties": {
"configuration": {
"secrets": "[parameters('secrets')]",
"registries": "[parameters('registries')]",
"ingress": "[parameters('ingress')]"
},
"template": {
"containers": "[parameters('containers')]",
"initContainers": [
{
"name": "init-container",
"image": "mcr.microsoft.com/k8se/quickstart:latest",
"command": [
"/bin/sh"
],
"args": [
"-c",
"while true; do echo hello; sleep 10; done"
],
"resources": {
"cpu": 0.25,
"memory": "0.5Gi"
}
}
]
},
"managedEnvironmentId": "[parameters('environmentId')]"
},
"apiVersion": "2023-05-01",
"type": "Microsoft.App/containerApps"
}
]
}
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionId": {
"value": "..." // Subscription ID
},
"name": {
"value": "test-app"
},
"location": {
"value": "japaneast"
},
"environmentId": {
"value": "..." // Container Apps Environment ID
},
"containers": {
"value": [
{
"name": "ndsou-simple-hello-world-container",
"image": "mcr.microsoft.com/k8se/quickstart:latest",
"command": [],
"resources": {
"cpu": ".25",
"memory": ".5Gi"
},
"env": [
{
"name": "ALLOW_EMPTY_PASSWORD",
"value": "yes"
}
]
}
]
},
"registries": {
"value": []
},
"secrets": {
"value": []
},
"ingress": {
"value": {
"external": true,
"targetPort": "80",
"transport": "auto",
"allowInsecure": true
}
}
}
}
デプロイ
Container Apps 環境が作成されていれば、あとは ARM Template をデプロイすれば OK です。
az deployment group create --resource-group <リソースグループ名> --template-file template.json --parameters '@parameters.json'
確認
デプロイが無事完了したら、ログを確認してみます。
Log Analytics の "ContainerAppConsoleLogs_CL" テーブルにコンソールログが保管されているので、取得してみましょう。
上記のように、Init Container で出力したコンソールログが確認できました!
気付いたポイント
Azure Portal 上のコンテナーアプリの「概要」にある「JSON ビュー」をクリックすると、設定を確認することができます。
このとき、古い API バージョンのビューを見ていると、設定できているにもかかわらず initContainers
の欄が「null」になってしまい、正常に確認することができません。
必ず、利用した API バージョンのビューを確認するようにしましょう…
まとめ
ということで、Azure Container Apps での Init Container の利用確認ができました。
下記の Microsoft ブログ記事にあるように色々と用途が考えられますので、是非活用していきたいですね!
Discussion