🎼

ARM Template 読み解き - Azure Container Apps での KEDA スケーリング設定

2023/04/07に公開

久しぶりに ARM Template 読み解きをしてみたいと思います。

題材は、Azure Container Apps における KEDA スケーリングです。

テンプレートの概要

上記のテンプレートでは Azure Container Apps (ACA) および KEDA によるスケーリング設定がデプロイできます。

なお、前述のドキュメント等を確認いただければと思いますが、ACA 環境および Azure Queue Storage の事前作成等が必要です。

読み解く

パラメータ指定 (parameters)

前半の "parameters": から始まる部分は、テンプレート内で使われるパラメータ (変数) の設定です。テンプレートのデプロイ時に選択肢として表示させたりすることができます。

queue.json
"parameters": {
    "location": {
        "defaultValue": "canadacentral",
        "type": "String"
    },
    "environment_name": {
        "defaultValue": "",
        "type": "String"
    },
    "queueconnection": {
        "defaultValue": "",
        "type": "String"
    }
},
...

ここではデプロイ先リージョンや ACA 環境名などに利用します。

変数の設定 (variables)

"variables": セクションでは、この yaml ファイル中で利用する変数名を設定できます。

が、ここでは空ですね。

queue.json
"variables": {},

デプロイするリソースの記述 (resources)

"resources": セクションで、デプロイするリソースを記述しています。

queue.json
"resources": [
{
    "name": "queuereader",
    "type": "Microsoft.App/containerApps",
    "apiVersion": "2022-03-01",
    "kind": "containerapp",
    "location": "[parameters('location')]",
    "properties": {
        "managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
        "configuration": {
            "activeRevisionsMode": "single",
            "secrets": [
            {
                "name": "queueconnection",
                "value": "[parameters('queueconnection')]"
            }]
        },
        "template": {
            "containers": [
                {
                    "image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
                    "name": "queuereader",
                    "env": [
                        {
                            "name": "QueueName",
                            "value": "myqueue"
                        },
                        {
                            "name": "QueueConnectionString",
                            "secretRef": "queueconnection"
                        }
                    ]
                }
            ],
            "scale": {
                "minReplicas": 1,
                "maxReplicas": 10,
                "rules": [
                    {
                        "name": "myqueuerule",
                        "azureQueue": {
                            "queueName": "myqueue",
                            "queueLength": 100,
                            "auth": [
                                {
                                    "secretRef": "queueconnection",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }
}]
  • "name": リソースの名称を指定します。
  • "type": リソースタイプを指定します。ここでは ACA を示す「Microsoft.App/containerApps」を指定します。
  • "apiVersion": 利用する API バージョンを指定します。ドキュメントを参照しましょう。
  • "kind": リソースタイプを指定しています。無くても大丈夫です。
  • "location": デプロイ先のリージョンを指定します。parameters() テンプレート関数を使用して、パラメータの値から取得してきています。

"properties": 配下で、ACA の詳細が定義されています。

  • "managedEnvironmentId": パラメータで渡した ACA 環境名から resourceId() テンプレート関数でリソース ID を取得し、セットしています。
  • "configuration": いくつか ACA 環境の設定を行っています。"secrets": にて、ACA でのシークレットを定義していることに注目です。
  • "template":
    • "containers": 起動するコンテナの設定です。重要なのは env.secretRef で、ここで指定した値が先ほどの configuration.secrets とリンクされます。
    • "scale": いよいよここで KEDA スケーリングの設定です。Azure Queue Storage およびキュー名を指定し、接続文字列 (シークレット) を与えることで連携ができます。ここでは接続が 100 を超えるごとにスケールされ、最大 10 レプリカまでスケールする設定となっています。

最後の "containers":"scale": の箇所は、ぜひ公式のドキュメントも参照してみてください。

最後に

ということで、ACA の KEDA スケーリングの ARM Template 読み解きでした。

ACA は Terraform 対応も活発で、引き続き両面から追っていきたいですね!

Discussion