次の方法で共有


Dapr を使用して MQTT ブローカーと通信する分散型アプリケーションのワークロードを開発する

プラグイン可能な MQTT ブローカー Dapr コンポーネントを使用するには、Dapr アプリケーションと共に、パブリッシュ/サブスクライブ コンポーネントと状態ストア コンポーネントの両方をアプリケーション デプロイにデプロイします。 このガイドでは、Dapr SDK と MQTT ブローカーのプラグ可能コンポーネントを使用してアプリケーションをデプロイする方法について説明します。

前提条件

Dapr アプリケーションの作成

アプリケーションのビルド

最初の手順では、Dapr SDK を使用してパブリッシュ/サブスクライブまたは状態管理を実行するアプリケーションを記述します。

アプリケーションをパッケージ化する

Dapr アプリケーションの記述が完了したら、コンテナーをビルドします。

  1. アプリケーションをコンテナーにパッケージ化するには、次のコマンドを実行します。

    docker build . -t my-dapr-app
    
  2. 次のように、選択したコンテナー レジストリにそれをプッシュします。

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-portdapr.io/app-protocol注釈を削除します。そうしないと、Dapr サイドカーは初期化に失敗します。

  1. 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>
    
  2. 次のコマンドを実行して、コンポーネントをデプロイします。

    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 でイベント駆動型のアプリを構築できます。