🕌

Azure Container Apps でDapr を使ってみる

2023/06/02に公開

はじめに

  • 今年のMS BuildでもMark RussinovichがTシャツでアピールしていた、Daprを使ってみたいと思います。

https://youtu.be/iihJYAMIRP4

  • 各技術の説明にはChatGPTを利用しています。

Daprとは

  • Daprとは、分散アプリケーションランタイムで、マイクロサービスの開発を簡単にするためのAPIやCLIを提供しています。Daprは、任意の言語、フレームワーク、場所で利用できるように設計されており、多様性を持った開発が可能です。

  • Daprは、マイクロサービスに必要な機能をビルディングブロックとして提供しています。ビルディングブロックには、サービス間の呼び出し、状態管理、パブリッシュ・サブスクライブ、リソースバインディング、アクターなどがあります。ビルディングブロックは、HTTPやgRPCで接続可能なAPIとして利用できます。

  • Daprは、Azure上でも利用できます。Azureでは、DaprをKubernetesクラスターにインストールすることで、マイクロサービスのデプロイや管理が容易になります。また、Azureのサービスとも連携できるようになります。

ハンズオン

  • 以下の公式ドキュメントに沿ってDaprを立ち上げてみます。

https://learn.microsoft.com/en-us/azure/container-apps/microservices-dapr?tabs=bash%2Cazure-cli

  • 完成予想構成図

  • メッセージを生成するクライアント (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との連携を試してみたいです。

参考

https://youtu.be/nK8Ss2UMAxc

https://docs.dapr.io/

GitHubで編集を提案
Microsoft (有志)

Discussion