次の方法で共有


Dapr プラグ可能なコンポーネントをデプロイする

Distributed Application Runtime (Dapr) は、分散型アプリケーションの構築プロセスを簡略化する、移植可能なサーバーレスのイベント ドリブン ランタイムです。 Dapr を使用すると、構成要素がどのように機能するかを気にせずにステートフルまたはステートレスのアプリを構築できます。 Dapr には、いくつかの構成要素が用意されています: pub/sub、状態管理、サービス呼び出し、アクター、など。

Azure IoT Operations では、MQTT ブローカーを利用した、次の 2 つの構成要素がサポートされています。

  • パブリッシュ-サブスクライブ
  • 状態管理

Dapr プラグ可能コンポーネントを使用するには、各 API のコンポーネント仕様を定義した後、クラスターに登録します。 Dapr コンポーネントは、共有ボリュームに配置された Unix ドメイン ソケットをリッスンします。 Dapr ランタイムは各ソケットに接続して、コンポーネントが実装する特定の構成要素 API からのすべてのサービスを検出します。

Dapr ランタイムのインストール

Dapr ランタイムをインストールするには、次の Helm コマンドを使用します:

Note

提供されている Azure IoT Operations クイックスタートを完了している場合は、Dapr ランタイムが既にインストールされているため、以下の手順は必要ありません。

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
helm upgrade --install dapr dapr/dapr --version=1.14 --namespace dapr-system --create-namespace --wait

MQTT ブローカーのプラグ可能なコンポーネントを登録する

pub/sub コンポーネントと状態管理のプラグ可能なコンポーネントを登録するには、コンポーネント マニフェスト yaml を作成し、クラスターに適用します。

yaml ファイルを作成するには、次のコンポーネント定義を使用します。

コンポーネント 説明
metadata:name コンポーネント名は重要であり、Dapr アプリケーションがコンポーネントを参照する方法です。
metadata:annotations:dapr.io/component-container Dapr サイドカー インジェクタによって使用されるコンポーネント注釈。イメージの場所、ボリューム マウント、およびログ構成を定義します
spec:type コンポーネントの種類。これは、示されているとおりに宣言する必要があります
spec:metadata:keyPrefix statestore バックエンドと通信する際に使用されるキー プレフィックスを定義します。 詳細については、Dapr のドキュメントを参照してください
spec:metadata:hostname MQTT ブローカーのホスト名。 既定値は aio-broker です
spec:metadata:tcpPort MQTT ブローカーのポート番号。 既定値は 18883 です
spec:metadata:useTls MQTT ブローカーで TLS を使用するかどうかを定義します。 既定値は true です
spec:metadata:caFile MQTT ブローカーを検証するための証明書チェーン パス。 useTlstrue の場合は必須です。 このファイルは、指定されたボリューム名でポッドにマウントする必要があります
spec:metadata:satAuthFile サービス アカウント トークン (SAT) は、MQTT ブローカーで Dapr コンポーネントを認証するために使用されます。 このファイルは、指定されたボリューム名でポッドにマウントする必要があります
  1. Azure IoT Operations コンポーネント定義を含む次の yaml を、components.yaml という名前のファイルに保存します。

    apiVersion: dapr.io/v1alpha1
    kind: Component
    metadata:
      name: iotoperations-pubsub
      namespace: azure-iot-operations
      annotations:
        dapr.io/component-container: >
          {
            "name": "iot-operations-dapr-components",
            "image": "ghcr.io/azure/iot-operations-dapr-components:latest",
            "volumeMounts": [
              { "name": "mqtt-client-token", "mountPath": "/var/run/secrets/tokens" },
              { "name": "aio-ca-trust-bundle", "mountPath": "/var/run/certs/aio-internal-ca-cert" }
            ],
            "env": [
                { "name": "pubSubLogLevel", "value": "Information" },
                { "name": "stateStoreLogLevel", "value": "Information" },
                { "name": "defaultLogLevel", "value": "Warning" }
            ]
          }
    spec:
      type: pubsub.azure.iotoperations
      version: v1
      metadata:
      - name: hostname
        value: aio-broker
      - name: tcpPort
        value: 18883
      - name: useTls
        value: true
      - name: caFile
        value: /var/run/certs/aio-internal-ca-cert/ca.crt
      - name: satAuthFile
        value: /var/run/secrets/tokens/mqtt-client-token
    ---
    apiVersion: dapr.io/v1alpha1
    kind: Component
    metadata:
      name: iotoperations-statestore
      namespace: azure-iot-operations
    spec:
      type: state.azure.iotoperations
      version: v1
      metadata:
      - name: hostname
        value: aio-broker
      - name: tcpPort
        value: 18883
      - name: useTls
        value: true
      - name: caFile
        value: /var/run/certs/aio-internal-ca-cert/ca.crt
      - name: satAuthFile
        value: /var/run/secrets/tokens/mqtt-client-token    
    
  2. 次のコマンドを実行して、コンポーネントをクラスターに適用します。

    kubectl apply -f components.yaml
    

    次の出力を確認します。

    component.dapr.io/iotoperations-pubsub created
    component.dapr.io/iotoperations-statestore created
    

MQTT ブローカーの認可ポリシーを作成する

MQTT ブローカーに対する認可ポリシーを構成するには、まず、BrokerAuthorization リソースを作成します。

Note

このクラスターでブローカー承認が有効になっていない場合は、アプリケーションが MQTT ブローカー State Store へのアクセスに必要なトピックを含むすべての MQTT トピックにアクセスできるため、このセクションをスキップできます。

  1. BrokerAuthorization 定義を含む次の yaml を、aio-dapr-authz.yaml という名前のファイルに保存します:

    apiVersion: mqttbroker.iotoperations.azure.com/v1
    kind: BrokerAuthorization
    metadata:
      name: my-dapr-authz-policies
      namespace: azure-iot-operations
    spec:
      listenerRef:
        - my-listener # change to match your listener name as needed
      authorizationPolicies:
        enableCache: false
        rules:
          - principals:
              attributes:
                - group: dapr-workload # match to the attribute annotated to the service account
            brokerResources:
              - method: Connect
              - method: Publish
                topics:
                  - "$services/statestore/#"
              - method: Subscribe
                topics:
                  - "clients/{principal.clientId}/services/statestore/#"
    
  2. BrokerAuthorization 定義をクラスターに適用します。

    kubectl apply -f aio-dapr-authz.yaml
    

次のステップ

Dapr コンポーネントがクラスターにデプロイされたので、Dapr を使用して分散アプリケーションを開発できます。