🎼

Azure Container Apps で Init Containers を試す

2023/10/07に公開

少し前に 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 ファイルを作成します。

template.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')]",
          "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"
    }
  ]
}
parameters.json
{
  "$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