Azure Container Apps で、ひとつの Container App に複数のコンテナイメージを構成する
Azure Container Apps 興味深いですね!
ドキュメントを調べていて、ひとつの Pod (Container App) に複数のコンテナイメージを利用できるという記載を見つけました。
1 つのコンテナー アプリで複数のコンテナーを定義できます。
...
構成のcontainers
配列に複数のコンテナーを定義して、複数のコンテナーを同時に実行します。
GUI (Azure portal) では、コンテナイメージをひとつしか指定できないため、この操作はできない模様です。
ARM Template からデプロイする必要がありそうということで、実際にやってみました。
環境・準備
- Azure Container Apps
- Windows 10
- Windows PowerShell
- Azure CLI (v2.30.0)
使ったサンプル
なんとなく、いつもの azure-voting-app-redis を使ってみました。
Kubernetes 用の yaml は、下記のチュートリアルが参考になります。
やってみた
ARM Template の作成
冒頭の通り、ARM Template の containers
にて、複数のコンテナイメージ構成を配列で指定することになります。
原型は単一コンテナイメージの Container App で生成される ARM Template を参考に、前述の Kubernetes 用チュートリアルの yaml ファイルも参考にし、下記のように template.json
および parameters.json
を作成しました。
{
"$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')]"
},
"managedEnvironmentId": "[parameters('environmentId')]"
},
"apiVersion": "2022-01-01-preview",
"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": "vote-pod"
},
"location": {
"value": "northeurope"
},
"environmentId": {
"value": "..." // Container Apps Environment ID
},
"containers": {
"value": [
{
"name": "azure-vote-back",
"image": "mcr.microsoft.com/oss/bitnami/redis:6.0.8",
"command": [],
"resources": {
"cpu": ".25",
"memory": ".5Gi"
},
"env": [
{
"name": "ALLOW_EMPTY_PASSWORD",
"value": "yes"
}
]
},
{
"name": "azure-vote-front",
"image": "mcr.microsoft.com/azuredocs/azure-vote-front:v1",
"command": [],
"resources": {
"cpu": ".25",
"memory": ".5Gi"
},
"env": [
{
"name": "REDIS",
"value": "azure-vote-back"
}
]
}
]
},
"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'
動作確認
ARM Template を作成していて少し怪しいなと思っていたのですが、現状では「どのコンテナイメージの (どの) ポートにアクセス可能にする」という設定ができない状況であるようで、アプリ自体の動作確認はできませんでした。Log Analytics からログを確認すると、azure-vote-front
から Redis (azure-vote-back
) へのアクセスができていないようです。
とはいうものの、ちゃんとひとつの Container App において、複数のコンテナが起動していることは確認できました。
同一の ContainerAppName_s
にて、複数の ContainerName_s
が動作していることがわかります。
まとめ
まずは動作確認できたので満足です🤗
が、相互通信周りは更に勉強していく必要を感じたので、今後も少し試していこうと思います!
Author And Source
この問題について(Azure Container Apps で、ひとつの Container App に複数のコンテナイメージを構成する), 我々は、より多くの情報をここで見つけました https://zenn.dev/08thse/articles/67-aca-multiple-containers著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol