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

重要

Azure Arc によって有効にされる Azure IoT Operations Preview は、 現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。

一般公開リリースが使用可能になったら、新しい Azure IoT Operations インストールをデプロイする必要があります。プレビュー インストールをアップグレードすることはできません。

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

プラグイン可能な 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-mq-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-mq
                    expirationSeconds: 86400
    
          # Certificate chain for Dapr to validate the MQTT broker
          - name: aio-ca-trust-bundle
            configMap:
              name: aio-ca-trust-bundle-test-only
    
          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 でイベント駆動型のアプリを構築できます。