チュートリアル: Dapr と MQTT ブローカーを使用してイベントドリブン アプリを構築する
重要
Azure Arc によって有効にされる Azure IoT Operations Preview は、現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
一般提供リリースが利用できるようになった時点で、新しい Azure IoT Operations のインストールをデプロイする必要があります。 プレビュー インストールをアップグレードすることはできません。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
このチュートリアルでは、Dapr アプリケーションをクラスターにデプロイします。 Dapr アプリケーションは、MQTT ブローカー に発行されたシミュレートされた MQTT データを使用し、ウィンドウ関数を適用して、結果を MQTT ブローカー に発行します。 公開された出力は、メッセージの頻度とサイズを減らすために、エッジで大量のデータを集計する方法を表します。 Dapr アプリケーションはステートレスであり、MQTT ブローカー 状態ストアを使用して、ウィンドウの計算に必要な過去の値をキャッシュします。
Dapr アプリケーションは、次の手順を実行します:
- センサー データの
sensor/data
トピックをサブスクライブします。 - このトピックのデータを受信すると、MQTT ブローカー 状態ストアに転送されます。
- 10 秒ごとに、状態ストアからデータをフェッチし、過去 30 秒にタイムスタンプが付いたセンサー データの 最小、最大、平均、中央値、および 75 パーセンタイルの値を計算します。
- 30 秒を超えるデータは状態ストアから有効期限が切れています。
- 結果は JSON 形式で
sensor/window_data
トピックに発行されます。
Note
このチュートリアルでは、生の MQTT を使用して公開やサブスクライブできるようにする Dapr CloudEvents を無効にします。
前提条件
- Azure IoT Operations プレビューのインストール - クイック スタート: K3s を使用して GitHub Codespaces で Azure IoT Operations プレビューを実行する
- MQTT ブローカー Dapr コンポーネントのインストール - MQTT ブローカー Dapr コンポーネントをインストールする
Dapr アプリケーションをデプロイする
この時点で、Dapr アプリケーションをデプロイできます。 コンポーネントを登録しても、パッケージ化された関連バイナリはコンテナーにデプロイされません。 アプリケーションとともにバイナリをデプロイするには、[デプロイ] を使用して、コンテナー化された Dapr アプリケーションと 2 つのコンポーネントを一緒にグループ化します。
まず、次の定義を使用する yaml ファイルを作成します。
コンポーネント | 説明 |
---|---|
volumes.mqtt-client-token |
MQTT ブローカーおよび状態ストアによる Dapr プラグイン可能なコンポーネントの認証に使用される SAT |
volumes.aio-internal-ca-cert-chain |
MQTT ブローカー TLS 証明書を検証するための信頼チェーン |
containers.mq-event-driven |
事前ビルド済みの 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: mq-event-driven-dapr namespace: azure-iot-operations spec: selector: matchLabels: app: mq-event-driven-dapr template: metadata: labels: app: mq-event-driven-dapr annotations: dapr.io/enabled: "true" dapr.io/inject-pluggable-components: "true" dapr.io/app-id: "mq-event-driven-dapr" dapr.io/app-port: "6001" dapr.io/app-protocol: "grpc" spec: serviceAccountName: dapr-client volumes: # SAT token 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: - name: mq-event-driven-dapr image: ghcr.io/azure-samples/explore-iot-operations/mq-event-driven-dapr:latest
次のコマンドを実行して、アプリケーションをデプロイします。
kubectl apply -f app.yaml
アプリケーションが正しくデプロイされたことを確認します。 ポッドは、次のコマンドで示すように、しばらくしてからすべてのコンテナーの準備ができたことを報告するはずです。
kubectl get pods -l app=mq-event-driven-dapr -n azure-iot-operations
次の出力を使用します。
NAME READY STATUS RESTARTS AGE mq-event-driven-dapr 3/3 Running 0 30s
シミュレーターをデプロイする
Kubernetes ワークロードをデプロイしてテスト データをシミュレートします。 sensor/data
トピックの MQTT クライアントを使用して、サンプル温度、振動、圧力の読み取り値を定期的に MQTT ブローカーに送信することで、センサーをシミュレートします。
Explore IoT Operations リポジトリからシミュレーターをデプロイします。
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/tutorials/mq-event-driven-dapr/simulate-data.yaml
シミュレーターが正常に実行中であることを確認します:
kubectl logs deployment/mqtt-publisher-deployment -n azure-iot-operations -f
次の出力を使用します。
Get:1 http://deb.debian.org/debian stable InRelease [151 kB] Get:2 http://deb.debian.org/debian stable-updates InRelease [52.1 kB] Get:3 http://deb.debian.org/debian-security stable-security InRelease [48.0 kB] Get:4 http://deb.debian.org/debian stable/main amd64 Packages [8780 kB] Get:5 http://deb.debian.org/debian stable-updates/main amd64 Packages [6668 B] Get:6 http://deb.debian.org/debian-security stable-security/main amd64 Packages [101 kB] Fetched 9139 kB in 3s (3570 kB/s) ... Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10
MQTT クライアントをデプロイする
MQTT ブリッジが動作していることを確認するには、クラスターに MQTT クライアントをデプロイします。
次の
client.yaml
という名前の新しいファイルで、クライアントのデプロイを指定します。apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- apiVersion: v1 kind: Pod metadata: name: mqtt-client namespace: azure-iot-operations spec: serviceAccountName: mqtt-client containers: - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] volumeMounts: - name: mqtt-client-token mountPath: /var/run/secrets/tokens - name: aio-ca-trust-bundle mountPath: /var/run/certs/aio-internal-ca-cert/ volumes: - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle
kubectl を使用してデプロイ ファイルを適用します。
kubectl apply -f client.yaml
次の出力を確認します。
pod/mqtt-client created
Dapr アプリケーション出力を確認する
Mosquitto クライアント ポッドに対してシェルを開きます。
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Dapr アプリケーションからの公開出力を確認するには、
sensor/window_data
トピックをサブスクリプションしてください。mosquitto_sub -L mqtt://aio-broker/sensor/window_data
アプリケーションが次のようなセンサーのスライディング ウィンドウの計算を出力していることを 10 秒ごとに確認します。
{ "timestamp": "2023-11-16T21:59:53.939690+00:00", "window_size": 30, "temperature": { "min": 553.024, "max": 598.907, "mean": 576.4647857142858, "median": 577.4905, "75_per": 585.96125, "count": 28 }, "pressure": { "min": 290.605, "max": 299.781, "mean": 295.521, "median": 295.648, "75_per": 297.64050000000003, "count": 28 }, "vibration": { "min": 0.00124192, "max": 0.00491257, "mean": 0.0031171810714285715, "median": 0.003199235, "75_per": 0.0038769150000000003, "count": 28 } }
オプション ‐ Dapr アプリケーションを作成する
このチュートリアルでは、Dapr アプリケーションの事前構築済みコンテナーを使用します。 コードを自分で変更してビルドする場合は、次の手順に従います:
前提条件
- Docker - アプリケーション コンテナーのビルド用
- コンテナー レジストリ - アプリケーション コンテナーのホスト用
アプリケーションのビルド
Explore IoT Operations リポジトリを複製します。
git clone https://github.com/Azure-Samples/explore-iot-operations
Dapr チュートリアル ディレクトリに移動します。
cd explore-iot-operations/tutorials/mq-event-driven-dapr/src
Docker イメージをビルドします:
docker build docker build . -t mq-event-driven-dapr
Kubernetes クラスターでアプリケーションを使用するには、Azure Container Registry などのコンテナー レジストリにイメージをプッシュする必要があります。 minikube や Docker などのローカル コンテナー レジストリにプッシュすることもできます。
docker tag mq-event-driven-dapr <container-alias> docker push <container-alias>
app.yaml
を更新して、新しく作成したイメージをプルします。
トラブルシューティング
アプリケーションが起動しない場合や、CrashLoopBackoff
にコンテナーがある場合は、多くの場合、daprd
コンテナー ログに役立つ情報が含まれます。
次のコマンドを実行して、daprd コンポーネントのログを表示します。
kubectl logs -l app=mq-event-driven-dapr -n azure-iot-operations -c daprd