Share via


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

Dapr (Distributed Apps Runtime) は、回復性がある、ステートレス、ステートフルのマイクロサービスを構築するのに役立つランタイムです。 このチュートリアルでは、サンプルの Dapr ソリューションを Azure Resource Manager (ARM) または Bicep テンプレートを使用して Azure Container Apps にデプロイします。

以下の方法について説明します。

  • Dapr 状態ストアとして使用する Azure Blob Storage を作成する
  • コンテナー アプリをホストするためのコンテナー アプリ環境をデプロイする
  • 2 つの Dapr 対応コンテナー アプリをデプロイする: 1 つは注文を生成し、もう 1 つは注文を消費して格納する
  • コンテナー アプリにユーザー割り当て ID を割り当て、適切なロールの割り当てを指定して、Dapr 状態ストアの認証を受けます
  • 2 つのマイクロサービス間の相互作用を確認する。

Azure Container Apps では、マイクロサービスを構築するときに、Dapr API のフル マネージド バージョンが提供されます。 Azure Container Apps で Dapr を使用する場合は、マイクロサービスの横で豊富な機能を提供する、サイドカーを有効にすることができます。

このチュートリアルでは、Dapr Hello World クイックスタートのソリューションをデプロイします。

アプリケーションは以下で構成されます:

  • メッセージを生成するクライアント (Python) コンテナー アプリ。
  • これらのメッセージを状態ストアで使用し保持するサービス (ノード) コンテナー アプリ

次のアーキテクチャ図は、このチュートリアルを構成するコンポーネントを示しています。

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

前提条件

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

セットアップ

CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。

az login

最新バージョンの CLI を実行していることを確認するには、upgrade コマンドを実行します。

az upgrade

次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。

az extension add --name containerapp --upgrade

最新の拡張機能またはモジュールがインストールされたので、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"

GitHub リポジトリを準備する

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

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

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

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

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

配置

このテンプレートで以下がデプロイされます。

  • Container Apps 環境
  • Container Apps 環境に関連付けられている Log Analytics ワークスペース
  • 分散トレース用の Application Insights リソース
  • BLOB ストレージ アカウントと既定のストレージ コンテナー
  • BLOB ストレージ アカウントの Dapr コンポーネント
  • ノード、ユーザー割り当てマネージド マネージド ID を使用する Dapr が有効なコンテナー アプリ: hello-k8s-node
  • python、Dapr が有効なコンテナー アプリ: hello-k8s-python
  • BLOB ストレージへの接続を確立するために Dapr コンポーネントが使うノード アプリの Active Directory ロールの割り当て

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 が有効で、"appId": "nodeapp""appPort": 3000 を使って構成されている targetPort: 3000 上で動作している nodeapp アプリ サーバーと、ストレージ データ共同作成者ロールの割り当てを介して Azure Blob ストレージにアクセスできるユーザー ID
  • nodeapp によって状態の格納に使用するようにスコープが設定された "type": "state.azure.blobstorage" の Dapr コンポーネント
  • Dapr サービスの呼び出しを使って nodeapp サービスを呼び出す Dapr 対応ヘッドレス pythonapp

結果を確認する

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

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

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

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

  3. 左側のメニューから [ コンテナー ] を選択します。

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

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

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

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

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

ログの表示

コンテナー アプリを使用してログされたデータは、Log Analytics ワークスペースの ContainerAppConsoleLogs_CL カスタム テーブルに格納されます。 ログを表示するには、Azure portal またはコマンド ラインを使用します。 ログに記録されたデータに対してクエリを実行する前に、初めて分析が到着するまでに数分かかることがあります。

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

リソースをクリーンアップする

完了したら、次のコマンドを実行して、このチュートリアルで作成したすべてのリソースと共にリソース グループを削除します。

az group delete \
  --resource-group $RESOURCE_GROUP

Note

pythonapp は、構成された状態ストアに永続化されるメッセージを使用して nodeapp を継続的に呼び出します。そのため、継続的な課金対象の操作を回避するために、これらのクリーンアップ手順を完了することが重要です。


ヒント

問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。

次のステップ