クイックスタート: Azure CLI を使用して Dapr アプリケーションを Azure Container Apps にデプロイする
Dapr (分散型アプリケーション ランタイム) は、開発者が回復性がある信頼性の高いマイクロサービスを構築するのに役立ちます。 このクイックスタートでは、Dapr サイドカーをマイクロサービス コンテナー アプリと並行して実行できるようにする方法について説明します。 次のことを行います。
- 自分のコンテナー アプリ用の Container Apps 環境と Azure Blog Storage 状態ストアを作成します。
- メッセージを発行する Python コンテナー アプリをデプロイします。
- メッセージをサブスクライブし、それらを状態ストアに保持する Node.js コンテナー アプリをデプロイします。
- Azure portal を使用して、2 つのマイクロサービス間の相互作用を確認します。
このクイックスタートでは、オープンソースの Dapr Hello World クイックスタートでデプロイするアプリケーションを模倣しています。
セットアップ
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
名前空間を登録します。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
環境変数を設定する
以下の環境変数を設定します。 <PLACEHOLDERS>
は、実際の値に置き換えます:
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 Blob Storage アカウントを作成する
環境がデプロイされたら、Node.js コンテナー アプリがデータを格納するために使用する Azure Blob Storage アカウントをデプロイします。 サービスをデプロイする前に、Storage アカウントの名前を選択します。 ストレージ アカウント名は、"Azure 内で一意" であり、長さは 3 ~ 24 文字で、数字と小文字のみを含める必要があります。
STORAGE_ACCOUNT_NAME="<storage account name>"
次のコマンドを使用して、Azure Storage アカウントを作成します。
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
ノード アプリのユーザー割り当て ID を構成する
Container Apps ではユーザー割り当てマネージド ID とシステム割り当てマネージド ID の両方がサポートされていますが、ユーザー割り当て ID を使うと、Dapr 対応の Node.js アプリに Blob Storage アカウントにアクセスするためのアクセス許可が提供されます。
ユーザー割り当て ID を作成します。
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
principalId
プロパティとid
プロパティを取得し、変数に格納します。PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query principalId | tr -d \") IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query id | tr -d \") CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query clientId | tr -d \")
現在のサブスクリプションのサブスクリプション ID を取得します。
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ユーザー割り当て ID に、
Storage Blob Data Contributor
ロールを割り当てます。az role assignment create --assignee $PRINCIPAL_ID \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/ Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
状態ストア コンポーネントを構成する
Dapr を介して外部リソースに対して認証するためには、複数のオプションがあります。 この例では、Azure ベースの状態ストアを使用するため、マネージド ID を使用して、Node.js アプリから Blob ストアに直接アクセスできます。
テキスト エディターで、前の手順でソースとして指定したプロパティを使用して、statestore.yaml という名前のファイルを作成します。
# statestore.yaml for Azure Blob storage component componentType: state.azure.blobstorage version: v1 metadata: - name: accountName value: "<STORAGE_ACCOUNT_NAME>" - name: containerName value: mycontainer - name: azureClientId value: "<MANAGED_IDENTITY_CLIENT_ID>" scopes: - nodeapp
このファイルにより、Dapr アプリが状態ストアにアクセスできるようになります。
yaml ファイルを保存したディレクトリに移動し、次のコマンドを実行して、Container Apps 環境で Dapr コンポーネントを構成します。
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
Node.js アプリケーションをデプロイする
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--user-assigned $IDENTITY_ID \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id nodeapp \
--dapr-app-port 3000 \
--env-vars 'APP_PORT=3000'
Azure Container Registry を使用している場合は、コマンドに --registry-server <REGISTRY_NAME>.azurecr.io
フラグを含めます。
既定では、イメージは Docker Hub からプルされます。
Python アプリケーションをデプロイする
az containerapp create \
--name pythonapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-python:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id pythonapp
Azure Container Registry を使用している場合は、コマンドに --registry-server <REGISTRY_NAME>.azurecr.io
フラグを含めます。
結果を確認する
状態が正常に永続化されたことを確認する
Azure Storage アカウントのデータを表示すると、サービスが正常に動作していることを確認できます。
ブラウザーで Azure portal を開き、ご自分のストレージ アカウントに移動します。
左側のメニューで [データ ストレージ]>[コンテナー] を選択します。
コンテナー アプリを選択します。
コンテナーに
order
という名前のファイルが表示されていることを確認します。ファイルを選択します。
[編集] タブを選択します。
[更新] ボタンを選択して、データがどのように自動的に更新されるかを確認します。
ログの表示
コンテナー アプリからのログは、Log Analytics ワークスペースの ContainerAppConsoleLogs_CL
カスタム テーブルに格納されます。 Azure portal または CLI を使用してログを表示できます。 テーブルがワークスペースに表示されるまでに、最初は少し遅延が発生することがあります。
次の CLI コマンドを使用して、コマンド ラインを使ってログを表示します。
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 == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
--out table
次の出力は、CLI コマンドから返される応答の種類を示しています。
ContainerAppName_s Log_s TableName TimeGenerated
-------------------- ------------------------------- ------------- ------------------------
nodeapp Got a new order! Order ID: 61 PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Got a new order! Order ID: 62 PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Got a new order! Order ID: 63 PrimaryResult 2021-10-22T22:45:44.618Z
リソースをクリーンアップする
pythonapp
は、構成された状態ストアに永続化されるメッセージを使用して nodeapp
を継続的に呼び出します。そのため、継続的な課金対象の操作を回避するために、これらのクリーンアップ手順を完了することが重要です。
このチュートリアルの一環として作成したリソースを削除したい場合は、次のコマンドを実行します。
注意事項
次のコマンドを実行すると、指定したリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのチュートリアルの範囲外のリソースが含まれている場合、それらも削除されます。
az group delete --resource-group $RESOURCE_GROUP
ヒント
問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。