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

重要

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

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

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

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

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

このクイックスタートでは、Azure IoT Operations (プレビュー) ポータルを使って資産を作成します。 Azure CLI を使って、これらのタスクの一部を完了することもできます。

前提条件

このクイック スタートを開始する前に、「クイック スタート: Azure IoT Operations (プレビュー) を Arc 対応 Kubernetes クラスターにデプロイする」を完了してください。

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

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

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

Azure IoT Operations (プレビュー) ポータルにサインインする

資産エンドポイント、資産を作成し、OPC UA のタグとイベントにサブスクライブするには、Azure IoT Operations (プレビュー) ポータルを使用します。 ブラウザーで Azure IoT Operations (プレビュー) ポータルに移動し、Microsoft Entra ID の資格情報でサインインします。

重要

Azure IoT Operations (プレビュー) ポータルにサインインするには、職場または学校アカウントを使用する必要があります。 詳細については、既知の問題の > Entra アカウントの作成を参照してください。

サイトを選択する

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

Azure IoT Operations (プレビュー) ポータルの未割り当てインスタンス ノードを示すスクリーンショット。

インスタンスを選択する

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

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

ヒント

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

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

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

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

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

    Azure IoT Operations (プレビュー) ポータルの [Asset endpoints] (資産エンドポイント) ページを示すスクリーンショット。

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

    フィールド
    名前 opc-ua-connector-0
    OPC UA Broker の URL opc.tcp://opcplc-000000:50000
    ユーザー認証 Anonymous
    トランスポート認証 Do not use transport authentication certificate
  3. 定義を保存するには、[作成] を選択します。

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

    kubectl get assetendpointprofile -n azure-iot-operations
    

これらのクイックスタートでは、OPC PLC シミュレーターを使用してサンプル データを生成します。 クイックスタート シナリオを有効にするには、信頼されていないサーバー証明書を受け入れるように OPC UA ブローカーを構成し、相互信頼が確立されていない状態で接続するように資産エンドポイントを構成する必要があります。 この構成は、運用環境または運用前環境では推奨されません。 詳細については、「OPC PLC シミュレーターをデプロイする」を参照してください。

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

    az k8s-extension update --version 0.3.0-preview --name opc-ua-broker --release-train preview --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --cluster-type connectedClusters --auto-upgrade-minor-version false --config opcPlcSimulation.deploy=true --config opcPlcSimulation.autoAcceptUntrustedCertificates=true
    

    注意事項

    運用環境または運用前環境では、この構成を使わないでください。 この構成では、OPC PLC のセキュリティ レベルを下げて、明示的なピア証明書の信頼操作を行わずにクライアントからの接続を受け入れるようにします。

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

    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 シミュレーターをデプロイする」を参照してください。

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

    kubectl get pods -n azure-iot-operations
    

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

  4. 次の例のようなコマンドを実行して、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 ブローカー、最後に MQ ブローカーに流れます。

資産を管理する

Azure IoT Operations (プレビュー) ポータルでインスタンスを選択すると、[資産] ページに使用可能な資産の一覧が表示されます。 資産がまだない場合、この一覧は空です。

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

資産の作成

資産を作成するには、[資産の作成] を選択します。

次の資産情報を入力します。

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

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

[資産の詳細] ページを下にスクロールし、次のような資産のその他のプロパティを構成します。

  • メーカー
  • 製造元 URI
  • モデル
  • 製品コード
  • ハードウェアのバージョン
  • ソフトウェア バージョン
  • シリアル番号
  • ドキュメント URI

既に定義されているサンプル プロパティを削除し、独自のカスタム プロパティを追加できます。

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

OPC UA タグを作成する

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

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

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

各タグの既定のサンプリング間隔とキュー サイズはオーバーライドできます。

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

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

確認

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

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

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

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

  1. 次のコマンドを実行して、クラスター内の MQ ブローカーとの対話に役立つ mqttuimosquitto ツールを含むポッドをデプロイします。

    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"]
        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 ポッドのシェルで次のコマンドを実行し、mqttui ツールを使って MQ ブローカーに接続します。

    mqttui -b mqtts://aio-mq-dmqtt-frontend:8883 -u '$sat' --password $(cat /var/run/secrets/tokens/mq-sat) --insecure
    

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

温度テレメトリを示す mqttui トピックの表示のスクリーンショット。

データが流れていない場合は、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
    

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

{
    "Timestamp": "2024-03-08T00:54:58.6572007Z",
    "MessageType": "ua-deltaframe",
    "payload": {
      "temperature": {
        "SourceTimestamp": "2023-08-10T00:54:58.2543129Z",
        "Value": 7109
      },
      "Tag 10": {
        "SourceTimestamp": "2023-08-10T00:54:58.2543482Z",
        "Value": 7109
      }
    },
    "DataSetWriterName": "thermostat",
    "SequenceNumber": 4660
}

Azure IoT Akri プレビューを使用して OPC UA データ ソースを検出する

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

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

kubectl get pods -n azure-iot-operations | grep akri
kubectl get pods -n azure-iot-operations |  Select-String -Pattern "akri"

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

akri-opcua-asset-discovery-daemonset-h47zk     1/1     Running   3 (4h15m ago)    2d23h
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

Kubernetes クラスターが実行されているマシン上で次のコマンドを実行し、検出ハンドラーの新しい構成を適用します。

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

構成を確認するには、次のコマンドを実行し、Akri によって検出された OPC UA データ ソースを表す Akri インスタンスを表示します。

kubectl get akrii -n azure-iot-operations

インスタンスが表示されるまでに数分かかる場合があります。

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

NAMESPACE              NAME                      CONFIG             SHARED   NODES            AGE
azure-iot-operations   akri-opcua-asset-dbdef0   akri-opcua-asset   true     ["dom-aio-vm"]   35m

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

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 リソース グループを削除します。

次のステップ

クイックスタート: Azure IoT Data Processor プレビュー パイプラインを使って OPC UA 資産からのデータを処理する