クイックスタート: OPC UA 資産を Azure IoT Operations プレビュー クラスターに追加する

重要

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

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

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

このクイック スタートでは、OPC UA 資産を Azure IoT Operations Preview クラスターに手動で追加します。 これらの資産は、Azure IoT Operations クラスターの MQTT ブローカーにメッセージを発行します。 通常、OT ユーザーは次の手順を実行します。

資産とは、物理デバイス、または、デバイス、マシン、システム、またはプロセスを表す論理エンティティです。 たとえば、物理資産には、ポンプ、モーター、タンク、生産ラインなどがあります。 定義する論理資産には、プロパティがあったり、テレメトリをストリーミングしたり、イベントを生成したりする可能性があります。

OPC UA サーバーは、資産と通信するソフトウェア アプリケーションです。 OPC UA タグは、OPC UA サーバーが公開するデータ ポイントです。 OPC UA タグは、資産のステータス、パフォーマンス、品質、状態に関する、リアルタイムまたは履歴データを提供できます。

このクイックスタートでは、Operations Experience Web UI を使用して資産を作成します。 Azure CLI を使って、これらのタスクの一部を完了することもできます。

前提条件

このクイックスタートを開始する前に、「クイックスタート: K3s を使用して GitHub Codespaces で Azure IoT Operations プレビューを実行する」を完了してください。

Operations Experience にサインインするには、Azure IoT Operations をデプロイしたテナントに職場または学校アカウントが必要です。 現在 Microsoft アカウント (MSA) を使用している場合は、Kubernetes - Azure Arc インスタンスを含むリソース グループに対して共同作成者以上のアクセス許可を持つ Microsoft Entra ID を作成する必要があります。 詳細については、既知の問題の > Entra アカウントの作成を参照してください。

どのような問題が解決されますか?

OPC UA サーバーが公開するデータは複雑な構造になっている可能性があり、理解が困難な場合があります。 Azure IoT Operations では、OPC UA 資産をタグ、イベント、プロパティとしてモデル化する方法が提供されます。 このモデル化により、データを理解しやすくなり、MQTT ブローカーやデータ プロセッサ パイプラインなどのダウンストリーム プロセスでの使用が容易になります。

Operations Experience にサインインする

資産エンドポイント、資産を作成し、OPC UA タグとイベントをサブスクライブするには、Operations Experience を使用します。

ブラウザーで Operations Experience を参照し、Microsoft Entra ID 資格情報を使用してサインインします。

Operations Experience で未割り当てのインスタンス ノードを示すスクリーンショット。

重要

Operations Experience にサインインするには、職場または学校アカウントを使用する必要があります。 詳細については、既知の問題の > Entra アカウントの作成を参照してください。

サイトを選択する

サインインすると、アクセス権を持つサイトの一覧がポータルに表示されます。 各サイトは、資産を構成できる Azure IoT Operations インスタンスのコレクションです。 IT 管理者は、サイトへのインスタンスの編成と組織内の OT ユーザーへのアクセス権の付与を担当します。 新しい展開を使用しているため、サイトはまだありません。 前のクイックスタートで作成したクラスターは、[未割り当てインスタンス] を選択することで確認できます。 ポータルでは、インスタンスは Azure IoT Operations をデプロイしたクラスターを表します。

インスタンスを選択する

前のクイックスタートで Azure IoT Operations をデプロイしたクラスターを選びます。

Azure IoT Operations インスタンスの一覧のスクリーンショット。

ヒント

インスタンスが表示されない場合は、適切な Microsoft Entra ID テナントにいない可能性があります。 ポータルの右上のメニューからテナントを変更できます。

資産エンドポイントを追加する

前の記事で Azure IoT Operations をデプロイしたときに、組み込みの OPC PLC シミュレーターを含めました。 この手順では、OPC PLC シミュレーターに接続できるようにする資産エンドポイントを追加します。

資産エンドポイントを追加するには、次のようにします。

  1. [資産エンドポイント] を選択し、続いて [資産エンドポイントの作成] を選択します。

    Operations Experience の [資産エンドポイント] ページを示すスクリーンショット。

  2. 次のエンドポイント情報を入力します。

    フィールド
    資産エンドポイント名 opc-ua-connector-0
    OPC UA サーバー URL opc.tcp://opcplc-000000:50000
    ユーザー認証モード Anonymous
  3. 定義を保存するには、[作成] を選択します。

    この構成では、opc-ua-connector-0 という新しい資産エンドポイントをクラスターにデプロイします。 kubectl を使って資産エンドポイントを表示できます。

    kubectl get assetendpointprofile -n azure-iot-operations
    

シミュレーターを構成する

これらのクイックスタートでは、OPC PLC シミュレーターを使用してサンプル データを生成します。 クイックスタートのシナリオを有効にするには、相互信頼を確立しないで接続するように資産エンドポイントを構成する必要があります。 この構成は、運用環境または運用前環境では推奨されません。

  1. クイックスタート シナリオ用に資産エンドポイントを構成するには、次のコマンドを実行します。

    kubectl patch AssetEndpointProfile opc-ua-connector-0 -n azure-iot-operations --type=merge -p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"opc-ua-connector-0\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'
    

    注意事項

    運用環境または運用前環境では、この構成を使わないでください。 適切な認証なしでクラスターをインターネットに公開すると、未承認アクセスや DDOS 攻撃につながる可能性があります。

    詳細については、「OPC PLC シミュレーターをデプロイする」を参照してください。

  2. 構成変更をすぐに有効にするには、最初に次のコマンドを使用して、aio-opc-supervisor ポッドの名前を見つけます。

    kubectl get pods -n azure-iot-operations
    

    ポッドの名前は aio-opc-supervisor-956fbb649-k9ppr のようになります。

  3. 次の例のようなコマンドを実行して、aio-opc-supervisor ポッドを再起動します。 前の手順の aio-opc-supervisor ポッド名を使います。

    kubectl delete pod aio-opc-supervisor-956fbb649-k9ppr -n azure-iot-operations
    

資産を定義すると、OPC UA 用コネクタのポッドがそれを検出します。 ポッドは、資産定義で指定する資産エンドポイントを使用して、OPC UA サーバーに接続します。 kubectl を使うと、資産エンドポイントを追加したときに作成された検出ポッドを表示できます。 ポッド名は aio-opc-opc.tcp-1-8f96f76-kvdbt のようになります。

kubectl get pods -n azure-iot-operations

OPC PLC シミュレーターが実行されている場合、データフローはシミュレーターから OPC UA 用コネクタへ、そして最終的に MQTT ブローカーに行われます。

資産を管理する

Operations Experience でインスタンスを選択すると、[資産] ページに使用可能な資産の一覧が表示されます。 資産がまだない場合、この一覧は空です。

Azure IoT Operations の空の資産リストのスクリーンショット。

資産の作成

資産を作成するには、[資産の作成] を選択します。 その後、次の資産情報を入力します。

フィールド
資産エンドポイント opc-ua-connector-0
資産名 thermostat
説明 A simulated thermostat asset

既存のカスタム プロパティを削除し、次のカスタム プロパティを追加します。 後のクイックスタートの Power BI テンプレートでそのクエリを実行するので、正確なプロパティ名を使うよう注意してください。

プロパティ名 プロパティの詳細
batch 102
顧客 コントソ
備品 Boiler
isSpare true
location シアトル

Azure IoT Operations の資産の詳細ページのスクリーンショット。

[次へ] を選択して、[タグの追加] ページに移動します。

OPC UA タグを作成する

[タグの追加] ページで 2 つの OPC UA タグを追加します。 それぞれのタグを追加するには、[タグまたは CSV の追加] を選択し、続いて [タグの追加] を選択します。 次の表に示すタグの詳細を入力します。

ノード ID タグ名 可観測性モード
ns=3;s=FastUInt10 温度 なし
ns=3;s=FastUInt100 タグ 10 なし

監視モードは値 nonegaugecounterhistogramlog のいずれかになります。

[既定の設定の管理] を選択して、各タグの既定のサンプリング間隔とキュー サイズを変更できます。

Azure IoT Operations の [タグの追加] ページのスクリーンショット。

[次へ] を選択して [イベントの追加] ページに移動し、[次へ] を選択して [確認] ページに移動します。

確認

資産とタグの詳細を確認し、必要な調整を行ったら、[作成] を選択します。

Azure IoT Operations の [資産の作成] レビュー ページのスクリーンショット。

データが流れていることを確認する

mosquitto_sub ツールを使用して、データが MQTT ブローカーに流れていることを確認します。 この例では、Kubernetes クラスターで mosquitto_sub ツールを実行します。

  1. 次のコマンドを実行して、クラスターの MQTT ブローカーを操作するのに役立つ mosquitto_pubmosquitto_sub ツールを含むポッドをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
    

    次に示すスニペットは、適用した YAML ファイルです。

    # Important: do not use in production environments
    # Creates a pod with mosquitto-clients and mqttui utilities in your cluster
    apiVersion: v1
    kind: Pod
    metadata:
      name: mqtt-client
      # The namespace must match the IoT MQ BrokerListener's namespace
      # Otherwise use the long hostname: aio-mq-dmqtt-frontend.azure-iot-operations.svc.cluster.local
      namespace: azure-iot-operations
    spec:
      # Use the "mqtt-client" service account which comes with default deployment
      # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations`
      serviceAccountName: mqtt-client
      containers:
        # Install mosquitto and mqttui utilities on Alpine linux
      - image: alpine
        name: mqtt-client
        command: ["sh", "-c"]
        args: ["apk add mosquitto-clients mqttui && sleep infinity"]
        resources:
          limits:
            cpu: 500m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: mq-sat
          mountPath: /var/run/secrets/tokens
        - name: trust-bundle
          mountPath: /var/run/certs
      volumes:
      - name: mq-sat
        projected:
          sources:
          - serviceAccountToken:
              path: mq-sat
              audience: aio-mq # Must match audience in BrokerAuthentication
              expirationSeconds: 86400
      - name: trust-bundle
        configMap:
          name: aio-ca-trust-bundle-test-only # Default root CA cert
    

    注意

    この構成はセキュリティで保護されていません。 運用環境では、この構成を使わないでください。

  2. mqtt-client ポッドが実行されているときに、次のコマンドを実行して、作成したポッド内にシェル環境を作成します。

    kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
    
  3. mqtt-client ポッドのシェルで次のコマンドを実行し、data/thermostat トピックにサブスクライブされた mosquitto_sub ツールを使用して MQTT ブローカーに接続します。

    mosquitto_sub --host aio-mq-dmqtt-frontend --port 8883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/mq-sat)
    

    このコマンドは、Ctrl+C キーを押して停止するまで実行を続け、data/thermostat トピックにメッセージが到着するとそれを表示します。

追加したサーモスタット資産がデータを発行していることを確認するには、azure-iot-operations/data トピックのテレメトリを表示します。

Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:17.1858435Z","Value":4558},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:17.1858869Z","Value":4558}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:18.1838125Z","Value":4559},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:18.1838523Z","Value":4559}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:19.1834363Z","Value":4560},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:19.1834879Z","Value":4560}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:20.1861251Z","Value":4561},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:20.1861709Z","Value":4561}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:21.1856798Z","Value":4562},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:21.1857211Z","Value":4562}}

ヒント

boiler- で始まる名前の付いた資産からのデータは、自動的に検出された資産からのものです。 これは、作成したサーモスタット資産と同じ資産ではありません。

データが流れていない場合は、aio-opc-opc.tcp-1 ポッドを再起動します。

  1. 次のコマンドを実行して、aio-opc-opc.tcp-1 ポッドの名前を確認します。

    kubectl get pods -n azure-iot-operations
    

    ポッドの名前は aio-opc-opc.tcp-1-849dd78866-vhmz6 のようになります。

  2. 次の例のようなコマンドを実行して、aio-opc-opc.tcp-1 ポッドを再起動します。 前の手順の aio-opc-opc.tcp-1 ポッド名を使います。

    kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
    

前のクイックスタートで追加したサンプル タグによって、次の例のようなメッセージが資産から生成されます。

{
    "temperature": {
        "SourceTimestamp": "2024-08-02T13:52:15.1969959Z",
        "Value": 2696
    },
    "Tag 10": {
        "SourceTimestamp": "2024-08-02T13:52:15.1970198Z",
        "Value": 2696
    }
}

Akri サービスを使用して OPC UA データ ソースを検出する

前のセクションでは、資産を手動で追加する方法について説明しました。 Akri サービスを使用して、OPC UA データ ソースを自動的に検出し、検出されたデバイスを表す Akri インスタンス カスタム リソースを作成することもできます。 現在、Akri サービスでは、Azure デバイス レジストリ プレビューに取り込むことができる資産を検出および作成することはできません。 そのため、現在、Akri によって検出された資産を Azure portal で管理することはできません。

Azure IoT Operations をデプロイすると、デプロイには Akri 検出ハンドラー ポッドが含まれます。 これらのポッドが実行されていることを確認するには、次のコマンドを実行します。

kubectl get pods -n azure-iot-operations | grep akri

上記のコマンドからの出力は、次の例のようになります。

aio-akri-otel-collector-5c775f745b-g97qv       1/1     Running   3 (4h15m ago)    2d23h
aio-akri-agent-daemonset-mp6v7                 1/1     Running   3 (4h15m ago)    2d23h

次のコマンドを使用して、探索ポッドが実行中であることを確認します。

kubectl get pods -n azure-iot-operations | grep discovery

上記のコマンドからの出力は、次の例のようになります。

aio-opc-asset-discovery-wzlnj                   1/1     Running     0              19m

OPC UA データ ソースを検出するように Akri サービスを構成するには、OPC UA ソースを参照する Akri 構成を作成します。 次のコマンドを実行して構成を作成します。

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/akri-opcua-asset.yaml

次に示すスニペットは、適用した YAML ファイルです。

apiVersion: akri.sh/v0
kind: Configuration
metadata:
  name: akri-opcua-asset
  namespace: azure-iot-operations
spec:
  discoveryHandler: 
    name: opcua-asset
    discoveryDetails: "opcuaDiscoveryMethod:\n  - asset:\n      endpointUrl: \"	opc.tcp://opcplc-000000:50000\"\n      useSecurity: false\n      autoAcceptUntrustedCertificates: true\n"
  brokerProperties: {}
  capacity: 1

重要

現在、資産エンドポイントの構成に無効な設定が含まれているという既知の問題があります。 この問題を回避するには、opc-ua-broker-opcplc-000000-50000 資産エンドポイントの構成から "securityMode":"none" 設定を削除する必要があります。 詳細については、OPC UA 用コネクタに関する記事を参照してください。

構成を確認するには、次のコマンドを実行し、Akri サービスによって検出された OPC UA データ ソースを表す Akri インスタンスを表示します。 構成が使用可能になるまで、数分待つ必要がある場合があります。

kubectl get akrii -n azure-iot-operations

上記のコマンドからの出力は、次の例のようになります。

NAME                      CONFIG             SHARED   NODES                          AGE
akri-opcua-asset-dbdef0   akri-opcua-asset   true     ["k3d-k3s-default-server-0"]   45s

これで、これらのリソースをローカル クラスター名前空間で使用できるようになりました。

Akri サービスが OPC UA 用コネクタに接続されていることを確認するには、前の手順で取得した Akri インスタンスの名前をコピーして、次のコマンドに貼り付けます。

kubectl get akrii <AKRI_INSTANCE_NAME> -n azure-iot-operations -o json

コマンド出力は次の例のようになります。 出力からの抜粋であるこの例では、Akri インスタンスの brokerProperties の値が示されており、OPC UA 用コネクタに接続されていることを確認できます。

"spec": {

        "brokerProperties": {
            "ApplicationUri": "Boiler #2",
            "AssetEndpointProfile": "{\"spec\":{\"uuid\":\"opc-ua-broker-opcplc-000000-azure-iot-operation\"……

問題をどのように解決したか。

このクイック スタートでは、資産エンドポイントを追加し、資産とタグを定義しました。 資産とタグは、OPC UA server からのデータをモデル化して、MQTT ブローカーやその他のダウンストリーム プロセスでデータを容易に使用できるようにします。 次のクイック スタートでは、定義したサーモスタット資産を使用します。

リソースをクリーンアップする

今後、このデプロイを使わない場合は、Azure IoT Operations をデプロイした Kubernetes クラスターを削除し、クラスターを含む Azure リソース グループを削除します。

次のステップ

クイックスタート: MQTT ブローカーのデータ レイク コネクタを使用して資産テレメトリをクラウドに送信する