Azure Container Apps でDapr を使ってみる
はじめに
- 今年のMS BuildでもMark RussinovichがTシャツでアピールしていた、Daprを使ってみたいと思います。
- 各技術の説明にはChatGPTを利用しています。
Daprとは
-
Daprとは、分散アプリケーションランタイムで、マイクロサービスの開発を簡単にするためのAPIやCLIを提供しています。Daprは、任意の言語、フレームワーク、場所で利用できるように設計されており、多様性を持った開発が可能です。
-
Daprは、マイクロサービスに必要な機能をビルディングブロックとして提供しています。ビルディングブロックには、サービス間の呼び出し、状態管理、パブリッシュ・サブスクライブ、リソースバインディング、アクターなどがあります。ビルディングブロックは、HTTPやgRPCで接続可能なAPIとして利用できます。
-
Daprは、Azure上でも利用できます。Azureでは、DaprをKubernetesクラスターにインストールすることで、マイクロサービスのデプロイや管理が容易になります。また、Azureのサービスとも連携できるようになります。
ハンズオン
- 以下の公式ドキュメントに沿ってDaprを立ち上げてみます。
- 完成予想構成図
-
メッセージを生成するクライアント (Python) コンテナーアプリとメッセージを状態ストアで使用し保持するサービス (node) コンテナーアプリがサイドカーで動いているDaprを通して通信します。
-
メッセージを生成するクライアント (Python) コンテナー アプリは、Dapr のサービス間の呼び出し API を使って、メッセージを生成して使用し、状態ストアでそれらを永続化するサービス (ノード) コンテナー アプリに送信します。
サービス (ノード) コンテナー アプリは、Dapr の状態管理 API を使って、メッセージを Azure Blob Storage に保存します。
サービス (ノード) コンテナー アプリは、メッセージの数と内容を返します。 -
手順に沿って一通りデプロイした後に結果を確認してみます。
-
この例ではストレージアカウント内のmycontainerファイルを更新するたびにデータが自動的に更新されます。
-
コンテナー アプリからのログは、Log Analytics ワークスペースのContainerAppConsoleLogs_CL カスタム テーブルに格納されます。 Azure portal または 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
- このようにクライアントコンテナアプリでメッセージが生成され、各コンポーネントに同期されていることが分かりました。
まとめ
- Daprを利用することでマイクロサービスの開発を簡単にできることをハンズオンで体験しました。
- マイクロサービスが複雑になってくると依存関係が分かりずらくなるので、今後Azure Container Apps にもトポロジー表示機能が付くことを期待しています。
- Dapr は、コンテナー アプリにサイドカーとして組み込まれ、HTTP または gRPC を介してアプリケーションと通信するようです。
- 個人的にDapr の可観測性やセキュリティについても興味があるため、今後Application Insightsと組み合わせて見たり mTLSとの連携を試してみたいです。
参考
Discussion