共用方式為


部署 Dapr 插入式元件

分散式應用程式執行階段 (Dapr) 是可攜式、無伺服器的事件驅動執行階段,可簡化建置分散式應用程式的過程。 Dapr 可讓您建置具狀態或無狀態應用程式,而不必擔心建置組塊的運作方式。 Dapr 提供數個建置組塊:pub/sub、狀態管理、服務調用、動作項目等等。

Azure IoT 操作支援這兩個由 MQTT 代理程式提供的建置組塊:

  • 發佈與訂閱
  • 狀態管理

若要使用 Dapr 插入式元件,請定義每個 API 的元件規格,然後 向叢集註冊。 Dapr 元件會接聽放在共用磁碟區上的 Unix 網域通訊端。 Dapr 執行階段會與每個通訊端連線,並從元件實作的指定建置組塊 API 探索所有服務。

安裝 Dapr 執行階段

若要安裝 Dapr 執行階段,請使用下列 Helm 命令:

注意

如果您已完成提供的 Azure IoT 作業 快速入門,表示您已安裝 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 sidecar 插入器所使用的元件批注,定義映射位置、磁碟區掛接和記錄設定
spec:type 元件的類型,必須完全如所示宣告
spec:metadata:keyPrefix 定義與狀態存放區後端通訊時所使用的機碼前置詞。 如需詳細資訊,請參閱 Dapr 檔 以取得詳細資訊
spec:metadata:hostname MQTT 代理程式主機名稱。 預設為 aio-broker
spec:metadata:tcpPort MQTT 代理程式連接埠號碼。 預設為 18883
spec:metadata:useTls 定義 MQTT 代理是否使用 TLS。 預設為 true
spec:metadata:caFile 用來驗證 MQTT 代理程式之憑證鏈結路徑。 如果 useTlstrue,則為必要項。 此檔案必須裝載在具有指定磁碟區名稱的 Pod
spec:metadata:satAuthFile 服務帳戶權杖 (SAT) 檔案會用來向 MQTT 代理程式驗證 Dapr 元件。 此檔案必須裝載在具有指定磁碟區名稱的 Pod
  1. 將包含 Azure IoT 操作元件定義的下列 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 資源。

注意

如果此叢集上未啟用 BrokerAuthorization,您可以略過本節,因為此應用程式可以存取所有 MQTT 主題,包括存取 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 來開發分散式應用程式