既知の問題: Azure IoT Operations プレビュー

重要

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

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

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

この記事では、Azure IoT Operations プレビューに関する既知の問題を一覧で示します。

デプロイとアンインストールの問題

  • Azure IoT Operations をデプロイする場合は、Azure CLI 対話型ログイン az login を使用する必要があります。 そうしないと、"ERROR: AADSTS530003: このリソースにアクセスするには、デバイスがマネージドである必要があります" などのエラーが表示される場合があります。

  • az iot ops delete コマンドを使用して Azure IoT Operations をアンインストールすると、一部のカスタム Akri リソースがクラスターから削除されない場合があります。 Azure IoT Operations を同じクラスターに再デプロイすると、これらの Akri インスタンスが原因で問題が発生する可能性があります。 Azure IoT Operations を再デプロイする前に、Akri インスタンスのカスタム リソースをクラスターから手動で削除する必要があります。

  • デプロイが "code":"LinkedAuthorizationFailed" エラーで失敗した場合は、クラスターを含むリソース グループに対する Microsoft.Authorization/roleAssignments/write アクセス許可がないことを意味します。

    この問題を解決するには、必要なアクセス許可を要求するか、デプロイ手順に対して次の調整を行います:

    • Azure Resource Manager テンプレートでデプロイする場合、deployResourceSyncRules パラメーターを false に設定します。
    • Azure CLI を使用してデプロイする場合は、az iot ops init コマンドで --disable-rsync-rules フラグを含めます。
  • K3s のアンインストール: /usr/local/bin/k3s-uninstall.sh スクリプトを使用して Ubuntu で k3s をアンインストールすると、NFS ポッドのマウント解除時にスクリプトがスタックする問題が発生する可能性があります。 この問題の回避策は、アンインストール スクリプトを実行する前に sudo systemctl stop k3s コマンドを実行することです。

MQTT ブローカー

  • 既定のデプロイには、クラスター IP、TLS、およびサービス アカウント トークンを使用してのみアクセスできます。 クラスター外のクライアントは、接続する前に追加の構成が必要です。

  • 初期デプロイ後に Broker カスタム リソースを更新することはできません。 カーディナリティ、メモリ プロファイル、ディスク バッファーに構成の変更を加えることはできません。

    回避策として、az iot ops init コマンドを使用して Azure IoT Operations をデプロイするときに、MQTT ブローカーの JSON 構成ファイルに --broker-config-file パラメーターを含めることができます。 詳細については、「高度な MQTT ブローカー構成」と「MQTT ブローカーのコア設定を構成する」を参照してください。

  • 選択したストレージ クラスでサポートされていない限り、ディスクでサポートされるバッファーのサイズを構成することはできません。

  • MQTT ブローカーの診断では独自のトピックでテレメトリが生成されますが、# トピックをサブスクライブするときに自己テストから引き続きメッセージを受け取ることがあります。

  • Kubernetes API 呼び出しが遅いクラスターによっては、az iot ops check コマンドを実行すると、自己テストの ping エラー Status {Failed}. Probe failed: Ping: 1/2 が発生する可能性があります。

  • KafkaConnector StatefulSet イベント ログに Invalid value: "mq-to-eventhub-connector-<token>--connectionstring": must be no more than 63 characters などのエラーが見つかる場合があります。 KafkaConnector の名前が最大 5 文字であることを確認します。

  • Kafka コネクタと Event Grid コネクタのログでタイムアウト エラーが見つかる場合があります。 それでもコネクタは引き続き機能し、メッセージが転送されます。

  • カーディナリティメモリ プロファイルがそのクラスターには大きすぎる値に設定されている場合、デプロイが失敗する可能性があります。 この問題を解決するには、レプリカ数を 1 に設定し、low などのより小さいメモリ プロファイルを使用します。

Azure IoT Layered Network Management プレビュー

  • Ubuntu ホストで K3S を実行しているときに Layered Network Management サービスで IP アドレスを取得しない場合は、--disable=traefik オプションを使用して trafeik イングレス コントローラーなしで K3S を再インストールします。

    curl -sfL https://get.k3s.io | sh -s - --disable=traefik --write-kubeconfig-mode 644
    

    詳細については、ネットワーク | K3s に関するページを参照してください。

  • 子ネットワーク レベルで実行されている CoreDNS サービスを使用し、DNS クエリが予想される IP アドレスに解決されない場合は、Ubuntu 22.04 にアップグレードし、K3S を再インストールします。

OPC UA 用コネクタ

  • クラスター内のすべての AssetEndpointProfiles は、同じトランスポート認証証明書で構成する必要があります。そうしない場合、OPC UA 用コネクタでランダムな動作が生じる可能性があります。 トランスポート認証を使用するときにこの問題を回避するには、Azure IoT Operations (プレビュー) ポータルでトランスポート認証証明書に同じ拇印を使用して、すべての資産エンドポイントを構成します。

  • AssetEndpointProfile をクラスターにデプロイし、OPC UA 用コネクタが最初の試行で構成済みエンドポイントに接続できない場合、OPC UA 用コネクタは接続を再試行しません。

    これを回避するには、最初に接続の問題を解決します。 その後、クラスター内の名前が "aio-opc-opc.tcp" で始まるすべてのポッドを再起動するか、AssetEndpointProfile を削除してもう一度デプロイします。

  • Operations Experience Web UI を使用して資産を作成する場合、資産から送信されるメッセージの subject プロパティは externalAssetId 値に設定されます。 この場合、subject は資産のフレンドリ名ではなく GUID です。

  • 信頼されていないサーバーにブローカーが接続しようとすると、rejected to write to PKI エラーがスローされます。 このエラーは、資産と資産エンドポイント プロファイルでも発生する可能性があります。

    回避策として、「信頼できる証明書の一覧を構成する」の説明に従って、サーバーの証明書を信頼できる証明書ストアに追加します。

    または、必要に応じて相互信頼を確立せずに AssetEndpointProfile を構成することもできます。 この回避策は、運用環境では使用しないでください。

OPC PLC シミュレーター

OPC PLC シミュレーターの資産エンドポイントを作成しても、OPC PLC シミュレーターから MQTT ブローカーにデータが送信されていない場合は、次のコマンドを実行して資産エンドポイントの autoAcceptUntrustedServerCertificates=true を設定してください。

ENDPOINT_NAME=<name-of-you-endpoint-here>
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
-n azure-iot-operations \
--type=merge \
-p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'

注意事項

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

次のコマンドを使用して、すべての資産エンドポイントにパッチを適用することができます。

ENDPOINTS=$(kubectl get AssetEndpointProfile -n azure-iot-operations --no-headers -o custom-columns=":metadata.name")
for ENDPOINT_NAME in `echo "$ENDPOINTS"`; do \
kubectl patch AssetEndpointProfile $ENDPOINT_NAME \
   -n azure-iot-operations \
   --type=merge \
   -p '{"spec":{"additionalConfiguration":"{\"applicationName\":\"'"$ENDPOINT_NAME"'\",\"security\":{\"autoAcceptUntrustedServerCertificates\":true}}"}}'; \
done

新しい資産を作成した後で OPC PLC シミュレーターが MQTT ブローカーにデータを送信しない場合は、OPC PLC シミュレーター ポッドを再起動します。 ポッド名は、aio-opc-opc.tcp-1-f95d76c54-w9v9c のようになります。 ポッドを再起動するには、k9s ツールを使用してポッドを強制終了するか、次のコマンドを実行します。

kubectl delete pod aio-opc-opc.tcp-1-f95d76c54-w9v9c -n azure-iot-operations

データフロー

  • ADX、ADLSv2、Fabric OneLake へのデータの送信は、Azure IoT Operations バージョン 0.6.x では使用できません。 これらのエンドポイントのサポートは、今後のプレビュー リリースで再び追加される予定です。

  • 既定では、データフローから Kafka の宛先に対して MQTT メッセージのユーザー プロパティは送信されません。 これらのユーザー プロパティには、メッセージを送信する資産の名前を格納する subject などの値が含まれます。 Kafka メッセージにユーザー プロパティを含めるには、DataflowEndpoint 構成を更新して次を含めます: copyMqttProperties: enabled。 次に例を示します。

    apiVersion: connectivity.iotoperations.azure.com/v1beta1
    kind: DataflowEndpoint
    metadata:
      name: kafka-target
      namespace: azure-iot-operations
    spec:
      endpointType: kafkaSettings
      kafkaSettings:
        host: "<NAMESPACE>.servicebus.windows.net:9093"
        batching:
          latencyMs: 0
          maxMessages: 100
        tls:
          mode: Enabled
        copyMqttProperties: enabled
      authentication:
        method: SystemAssignedManagedIdentity
        systemAssignedManagedIdentitySettings:
          audience: https://<NAMESPACE>.servicebus.windows.net
    
  • 現在、データフロー構成で最後の既知の値フラグ ?$last を使用して値を追跡することはできません。 バグが修正されるまでの回避策は、Azure IoT Operations バージョン 0.5.1 をデプロイし、データ プロセッサを使用することです。

  • Azure IoT Operations バージョン 0.6.x では、instanceCount のデータフロー プロファイルのスケーリングは 1 に制限されています。

  • Azure Resource Manager を使用した構成はサポートされていません。 代わりに、ドキュメントに記載されているように、kubectl と YAML ファイルを使用してデータフローを構成します。

Akri サービス

検出された資産の資産エンドポイントが Akri サービスによって生成されると、資産が MQTT ブローカーに接続できなくなるような無効な設定が構成に含まれている可能性があります。 この問題を解決するには、AssetEndpointProfile 構成を編集し、additionalConfiguration プロパティから "securityMode":"none" 設定を削除します。 たとえば、クイックスタートで生成された opc-ua-broker-opcplc-000000-50000 資産エンドポイントの構成は次の例のようになります。

apiVersion: deviceregistry.microsoft.com/v1beta1
kind: AssetEndpointProfile
metadata:
  creationTimestamp: "2024-08-05T11:41:21Z"
  generation: 2
  name: opc-ua-broker-opcplc-000000-50000
  namespace: azure-iot-operations
  resourceVersion: "233018"
  uid: f9cf479f-7a77-49b5-af88-18d509e9cdb0
spec:
  additionalConfiguration: '{"applicationName":"opc-ua-broker-opcplc-000000-50000","keepAliveMilliseconds":10000,"defaults":{"publishingIntervalMilliseconds":1000,"queueSize":1,"samplingIntervalMilliseconds":1000},"subscription":{"maxItems":1000,"lifetimeMilliseconds":360000},"security":{"autoAcceptUntrustedServerCertificates":true,"securityPolicy":"http://opcfoundation.org/UA/SecurityPolicy#None"},"session":{"timeoutMilliseconds":60000,"keepAliveIntervalMilliseconds":5000,"reconnectPeriodMilliseconds":500,"reconnectExponentialBackOffMilliseconds":10000}}'
  targetAddress: "\topc.tcp://opcplc-000000:50000"
  transportAuthentication:
    ownCertificates: []
  userAuthentication:
    mode: Anonymous
  uuid: opc-ua-broker-opcplc-000000-50000

散発的な問題により、ログに次のエラーが表示され、aio-opc-asset-discovery ポッドが再起動する可能性があります: opcua@311 exception="System.IO.IOException: Failed to bind to address http://unix:/var/lib/akri/opcua-asset.sock: address already in use.

この問題を回避するには、次の手順に従って、DaemonSet 仕様を更新します:

  1. orchestration.iotoperations.azure.com によって提供され -ops-init-target で終わる名前のターゲット カスタム リソースを見つけます。

    kubectl get targets -n azure-iot-operations
    
  2. ターゲット構成を編集し、spec.components.aio-opc-asset-discovery.properties.resource.spec.template.spec.containers.env パラメーターを見つけます。 次に例を示します。

    kubectl edit target solid-zebra-97r6jr7rw43vqv-ops-init-target -n azure-iot-operations
    
  3. spec.components.aio-opc-asset-discovery.properties.resource.spec.template.spec.containers.env 構成セクションに以下の環境変数を追加します。

    - name: ASPNETCORE_URLS 
      value: http://+8443 
    - name: POD_IP 
      valueFrom: 
        fieldRef: 
          fieldPath: "status.podIP" 
    
  4. 変更を保存。 最終的な仕様は、次の例のようになります。

    apiVersion: orchestrator.iotoperations.azure.com/v1 
    kind: Target 
    metadata: 
      name: <cluster-name>-target 
      namespace: azure-iot-operations 
    spec: 
      displayName: <cluster-name>-target 
      scope: azure-iot-operations 
      topologies: 
      ...
      version: 1.0.0.0 
      components: 
        ... 
        - name: aio-opc-asset-discovery 
          type: yaml.k8s 
          properties: 
            resource: 
              apiVersion: apps/v1 
              kind: DaemonSet 
              metadata: 
                labels: 
                  app.kubernetes.io/part-of: aio 
                name: aio-opc-asset-discovery 
              spec: 
                selector: 
                  matchLabels: 
                    name: aio-opc-asset-discovery 
                template: 
                  metadata: 
                    labels: 
                      app.kubernetes.io/part-of: aio 
                      name: aio-opc-asset-discovery 
                  spec: 
                    containers: 
                      - env: 
                          - name: ASPNETCORE_URLS 
                            value: http://+8443 
                          - name: POD_IP 
                            valueFrom: 
                              fieldRef: 
                                fieldPath: status.podIP 
                          - name: DISCOVERY_HANDLERS_DIRECTORY 
                            value: /var/lib/akri 
                          - name: AKRI_AGENT_REGISTRATION 
                            value: 'true' 
                        image: >- 
                          edgeappmodel.azurecr.io/opcuabroker/discovery-handler:0.4.0-preview.3 
                        imagePullPolicy: Always 
                        name: aio-opc-asset-discovery 
                        ports: ... 
                        resources: ...
                        volumeMounts: ...
                    volumes: ...
    

Operations Experience Web UI

Operations Experience にサインインするには、Kubernetes - Azure Arc インスタンスを含むリソース グループに対して共同作成者以上のアクセス許可を持つ Microsoft Entra ID アカウントが必要です。 Microsoft アカウント (MSA) ではサインインできません。 Azure テナントでアカウントを作成するには:

  1. Azure IoT Operations のデプロイに使用したのと同じテナントとユーザー名を使用して、Azure portal にサインインします。
  2. Azure portal で、[Microsoft Entra ID] セクションに移動し、[ユーザー] > [+新しいユーザー] > [新しいユーザーの作成] を選択します。 新しいユーザーを作成し、パスワードを書き留めておきます。後でサインインするために必要です。
  3. Azure portal で、Kubernetes - Azure Arc インスタンスが含まれているリソース グループに移動します。 [アクセス制御 (IAM)] ページで、[+追加] > [ロールの割り当てを追加] を選択します。
  4. [ロールの割り当てを追加] ページで、[特権管理者ロール] を選択します。 次に、[共同作成者] を選択してから、[次へ] を選択します。
  5. [メンバー] ページで、新しいユーザーをロールに追加します。
  6. [確認と割り当て] を選択し、新しいユーザーの設定を完了します。

新しいユーザー アカウントを使用して Azure IoT Operations ポータルにサインインできるようになりました。