Dapr を使用して MQTT ブローカーと通信する分散型アプリケーションのワークロードを開発する
重要
Azure Arc によって有効にされる Azure IoT Operations Preview は、現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
一般提供リリースが利用できるようになった時点で、新しい Azure IoT Operations のインストールをデプロイする必要があります。 プレビューのインストールをアップグレードすることはできません。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
プラグイン可能な MQTT ブローカー Dapr コンポーネントを使用するには、Dapr アプリケーションと共に、パブリッシュ/サブスクライブ コンポーネントと状態ストア コンポーネントの両方をアプリケーション デプロイにデプロイします。 このガイドでは、Dapr SDK と MQTT ブローカーのプラグ可能コンポーネントを使用してアプリケーションをデプロイする方法について説明します。
前提条件
- Azure IoT Operations のデプロイ - クイック スタート: K3s を使用して GitHub Codespaces で Azure IoT Operations プレビューを実行する
- デプロイされた MQTT ブローカー Dapr コンポーネント - MQTT ブローカー Dapr コンポーネントのデプロイ
Dapr アプリケーションの作成
アプリケーションのビルド
最初の手順では、Dapr SDK を使用してパブリッシュ/サブスクライブまたは状態管理を実行するアプリケーションを記述します。
- Dapr のパブリッシュとサブスクライブのクイックスタート
- Dapr の状態管理のクイックスタート
アプリケーションをパッケージ化する
Dapr アプリケーションの記述が完了したら、コンテナーをビルドします。
アプリケーションをコンテナーにパッケージ化するには、次のコマンドを実行します。
docker build . -t my-dapr-app
次のように、選択したコンテナー レジストリにそれをプッシュします。
Dapr アプリケーションをデプロイする
次のデプロイの定義には、SAT 認証と TLS 証明書チェーンのボリュームが含まれ、Dapr サイドカー インジェクションを使用して、プラグ可能なコンポーネントをポッドに自動的に追加します。
次の定義コンポーネントでは、特定のアプリケーションのカスタマイズが必要になる場合があります。
コンポーネント 説明 template:metadata:annotations:dapr.io/inject-pluggable-components
IoT Operations のプラグ可能なコンポーネントをポッドに自動的にインジェクトできるようにします。 template:metadata:annotations:dapr.io/app-port
Dapr にアプリケーションがリッスンしているポートを伝えます。 アプリケーションでこの機能 (pubsub サブスクリプションなど) を使用していない場合は、この行を削除します volumes:mqtt-client-token
MQTT ブローカーによる Dapr プラグイン可能なコンポーネントの認証に使用されるシステム認証トークン volumes:aio-ca-trust-bundle
MQTT ブローカー TLS 証明書を検証するための信頼チェーン。これは Azure IoT Operations でデプロイされるテスト証明書に既定で設定されます。 containers:name
アプリケーション コンテナーに与えられた名前 containers:image
デプロイしたいアプリケーション コンテナー
注意事項
Dapr アプリケーションが Dapr サイドカーからのトラフィックをリッスンしていない場合は、dapr.io/app-port
と dapr.io/app-protocol
の注釈を削除します。そうしないと、Dapr サイドカーは初期化に失敗します。
dapr-app.yaml
という名前のファイルに次の yaml を保存します。apiVersion: v1 kind: ServiceAccount metadata: name: dapr-client namespace: azure-iot-operations annotations: aio-broker-auth/group: dapr-workload --- apiVersion: apps/v1 kind: Deployment metadata: name: my-dapr-app namespace: azure-iot-operations spec: selector: matchLabels: app: my-dapr-app template: metadata: labels: app: my-dapr-app annotations: dapr.io/enabled: "true" dapr.io/inject-pluggable-components: "true" dapr.io/app-id: "my-dapr-app" dapr.io/app-port: "6001" dapr.io/app-protocol: "grpc" spec: serviceAccountName: dapr-client volumes: # SAT used to authenticate between Dapr and the MQTT broker - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 # Certificate chain for Dapr to validate the MQTT broker - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle containers: # Container for the Dapr application - name: mq-dapr-app image: <YOUR_DAPR_APPLICATION>
次のコマンドを実行して、コンポーネントをデプロイします。
kubectl apply -f dapr-app.yaml kubectl get pods -w
ポッドは、次の出力例に示すように、少し間を置いて、3 つの実行中のコンテナーを報告します。
NAME READY STATUS RESTARTS AGE ... my-dapr-app 3/3 Running 0 30s
トラブルシューティング
アプリケーションが起動しない場合や、コンテナーが CrashLoopBackoff
状態にある場合は、多くの場合、daprd
コンテナーのログに役立つ情報が含まれます。
次のコマンドを実行して、daprd コンポーネントのログを表示します。
kubectl logs -l app=my-dapr-app -c daprd
次のステップ
Dapr アプリケーションの開発方法がこれでわかったので、チュートリアルを終わりまで実行し、Dapr でイベント駆動型のアプリを構築できます。