チュートリアル: Azure Container Apps を使用してバックグラウンド処理アプリケーションをデプロイする
Azure Container Apps を使用すると、パブリック エンドポイントを公開しなくてもアプリケーションをデプロイできます。 コンテナー アプリのスケーリング ルールを使用すると、Azure Storage キューの長さに基づいてアプリケーションをスケールアウトおよびスケールインできます。 キューにメッセージがない場合、コンテナー アプリは 0 にスケールインされます。
以下の方法について説明します。
- コンテナー アプリをデプロイするための Container Apps 環境を作成する
- コンテナー アプリにメッセージを送信するための Azure ストレージ キューを作成する
- バックグラウンド処理アプリケーションをコンテナー アプリとしてデプロイする
- キューのメッセージがコンテナー アプリによって処理されることを確認する
セットアップ
CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。
az login
最新バージョンの CLI を実行していることを確認するには、upgrade コマンドを実行します。
az upgrade
次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。
Azure CLI で az containerapp
コマンドを実行したとき、または Azure PowerShell で Az.App
モジュールからコマンドレットを実行したときに、パラメーターの不足に関するエラーが表示される場合は、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。
az extension add --name containerapp --upgrade
Note
2024 年 5 月以降、Azure CLI 拡張機能では既定ではプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true
を使用して Container Apps 拡張機能をインストールします。
az extension add --name containerapp --upgrade --allow-preview true
最新の拡張機能またはモジュールがインストールされたので、Microsoft.App
および Microsoft.OperationalInsights
名前空間を登録します。
Note
Azure Container Apps リソースは、Microsoft.Web
名前空間から Microsoft.App
名前空間に移行されました。 詳細については、「2022 年 3 月に Microsoft.Web から Microsoft.App に名前空間を移行する」を参照してください。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
環境変数を設定する
以下の環境変数を設定します。 ''<プレースホルダー>'' は実際の値に置き換えてください。
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Azure リソース グループの作成
コンテナー アプリのデプロイに関連するサービスを整理するためのリソース グループを作成します。
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
環境の作成
Azure Container Apps 環境では、コンテナー アプリのグループを囲むセキュリティ保護された境界が作成されます。 同じ環境にデプロイされた Container Apps は、同じ仮想ネットワークにデプロイされ、同じ Log Analytics ワークスペースにログを書き込みます。
環境を作成するために、次のコマンドを実行します。
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
ストレージ キューを設定する
まず、ストレージ アカウントの名前を定義します。 ストレージ アカウント名は、Azure 内で一意であり、数字と小文字のみを含めた長さを 3 ~ 24 文字にする必要があります。
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
Azure ストレージ アカウントを作成します。
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
次に、キューの接続文字列を取得します。
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`
これで、メッセージ キューを作成できます。
az storage queue create \
--name "myqueue" \
--account-name $STORAGE_ACCOUNT_NAME \
--connection-string $QUEUE_CONNECTION_STRING
最後に、キューにメッセージを送信できます。
az storage message put \
--content "Hello Queue Reader App" \
--queue-name "myqueue" \
--connection-string $QUEUE_CONNECTION_STRING
バックグラウンド アプリケーションをデプロイする
queue.json というファイルを作成し、次の構成コードをファイルに貼り付けます。
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"defaultValue": "canadacentral",
"type": "String"
},
"environment_name": {
"type": "String"
},
"queueconnection": {
"type": "secureString"
}
},
"variables": {},
"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"
}
]
}
}
]
}
}
}
}]
}
これで、コンテナー アプリを作成してデプロイできます。
az deployment group create --resource-group "$RESOURCE_GROUP" \
--template-file ./queue.json \
--parameters \
environment_name="$CONTAINERAPPS_ENVIRONMENT" \
queueconnection="$QUEUE_CONNECTION_STRING" \
location="$LOCATION"
このコマンドを実行すると、mcr.microsoft.com/azuredocs/containerapps-queuereader
というパブリック コンテナー イメージからデモ アプリケーションがデプロイされ、アプリケーションで使われるシークレットと環境変数が設定されます。
アプリケーションは、ARM テンプレートの scale
セクションで定義されているように、キューの長さに基づいて最大 10 レプリカまでスケールアウトされます。
結果を確認する
コンテナー アプリはバックグラウンド プロセスとして実行されます。 Azure Storage キューからメッセージが到着すると、アプリケーションは Log Analytics にログ エントリを作成します。 ログされたデータに対してクエリを実行する前に、初回の分析が到着するまで数分待機する必要があります。
ログに記録されたメッセージを表示するには、次のコマンドを実行します。 このコマンドには Log Analytics 拡張機能が必要なので、要求されたらプロンプトを受け入れて拡張機能をインストールします。
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
--out table
ヒント
問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。
リソースをクリーンアップする
完了したら、次のコマンドを実行して、Container Apps のリソースを含むリソース グループを削除します。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのチュートリアルの範囲外のリソースが含まれている場合、それらも削除されます。
az group delete \
--resource-group $RESOURCE_GROUP