Dapr を使用して MQTT ブローカーと通信する分散型アプリケーションのワークロードを開発する
プラグイン可能な 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 でイベント駆動型のアプリを構築できます。