次の方法で共有


クイックスタート: Azure Resource Manager または Bicep テンプレートを使用して Dapr アプリケーションを Azure Container Apps にデプロイする

Dapr (分散型アプリケーション ランタイム) は、開発者が回復性がある信頼性の高いマイクロサービスを構築するのに役立ちます。 このクイック スタートでは、Azure Blob Storage 状態ストアに格納されたメッセージを生成して使用する 2 つのコンテナー アプリと共に Dapr サイドカーを実行できるようにします。 Azure Resource Manager または Bicep テンプレートのいずれかを使用して、次の作業を実施します。

  • Azure CLI コマンドを実行して、マイクロサービスの実行に必要なものをすべて起動するテンプレートをデプロイします
  • Azure portal で 2 つのマイクロサービス間の相互作用を確認します。

Azure Container Apps での Dapr Hello World マイクロサービスのアーキテクチャ図

このクイックスタートでは、オープンソースの Dapr Hello World クイックスタートでデプロイするアプリケーションを再現しています。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウントが必要です。 まだアカウントがない場合は、無料でアカウントを作成することができます。
  • GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。

セットアップ

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"

GitHub リポジトリを準備する

ソリューションのデプロイに使う ARM と Bicep のテンプレートを保持しているリポジトリに移動します。

リポジトリの上部にある [フォーク] ボタンを選んで、リポジトリをアカウントにフォークします。

これで、フォークを複製してローカルで作業できるようになりました。

次の git コマンドを使って、フォークしたリポジトリを acadapr-templates ディレクトリにクローンします。

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

デプロイ

acadapr-templates ディレクトリに移動して、次のコマンドを実行します。

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

警告 (BCP081) が表示される場合があります。 この警告は、アプリケーションの正常なデプロイには影響しません。

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

このコマンドは、以下をデプロイします:

  • Hello World Dapr ソリューションをホストするための Container Apps 環境と関連付けられた Log Analytics ワークスペース。
  • Dapr 分散トレース用の Application Insights インスタンス。
  • Dapr が有効にされ、次のものを使用して構成された、targetPort: 3000 で実行される nodeapp アプリ サーバー。
    • "appId": "nodeapp"
    • "appPort": 3000
    • ストレージ データ投稿者ロールの割り当てを介して Azure Blob Storage にアクセスできるユーザー割り当て ID
  • nodeapp によって状態の格納に使用するようにスコープが設定された "type": "state.azure.blobstorage" の Dapr コンポーネント。
  • Dapr サービスの呼び出しを使用して nodeapp サービスを呼び出す Dapr 対応ヘッドレス pythonapp
  • Blob storage への接続を確立するために Dapr コンポーネントが使用する Node.js アプリに対する Microsoft Entra ID ロールの割り当て。

結果を確認する

状態が正常に永続化されたことを確認する

Azure Storage アカウントのデータを表示すると、サービスが正常に動作していることを確認できます。

  1. ブラウザーで Azure portal を開きます。

  2. リソース グループ内で新しく作成したストレージ アカウントに移動します。

  3. 左側のメニューから [データ ストレージ]>[コンテナー] を選択します。

  4. 作成したコンテナーを選びます。

  5. コンテナーに order という名前のファイルが表示されていることを確認します。

  6. ファイルを選択します。

  7. [編集] タブを選択します。

  8. [更新] ボタンを選択して、更新を確認します。

ログの表示

コンテナー アプリからのログは、Log Analytics ワークスペースの ContainerAppConsoleLogs_CL カスタム テーブルに格納されます。 Azure portal または CLI を使用してログを表示できます。 テーブルがワークスペースに表示されるまでに、最初は少し遅延が発生することがあります。

Bash または PowerShell でログを表示するには、次のコマンドを使用します。

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 | take 5" \
  --out table

次の出力は、コマンドから返される応答の種類を示しています。

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 リポジトリでイシューを開いて、お知らせください。

次のステップ