Condividi tramite


Individuare le origini dati OPC UA usando l'anteprima di Azure IoT Akri

Importante

Anteprima delle operazioni di Azure IoT: abilitata da Azure Arc è attualmente disponibile in ANTEPRIMA. Non è consigliabile usare questo software di anteprima negli ambienti di produzione.

Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

Questo articolo illustra come individuare automaticamente le origini dati OPC UA. Dopo aver distribuito Azure IoT Operations Preview, configurare Azure IoT Akri Preview per individuare le origini dati OPC UA nella rete perimetrale. Azure IoT Akri crea risorse personalizzate nel cluster Kubernetes che rappresentano le origini dati individuate. La possibilità di individuare le origini dati OPC UA rimuove la necessità di configurarle manualmente usando il portale di Azure IoT Operations (anteprima).

Importante

Attualmente, non è possibile usare Registro dispositivi di Azure per gestire gli asset individuati e creati da Azure IoT Akri.

Azure IoT Akri consente di rilevare e creare asset nello spazio indirizzi di un server OPC UA. Il rilevamento degli asset OPC UA genera AssetType e Asset risorse personalizzate per gli asset conformi alle specifiche OPC UA Device Integration (DI).

Prerequisiti

  • Installare Azure IoT Operations Preview. Per installare le operazioni di Azure IoT a scopo dimostrativo ed esplorazione, vedere Avvio rapido: Distribuire l'anteprima delle operazioni di Azure IoT in un cluster Kubernetes abilitato per Arc.

  • Verificare che i pod di Azure IoT Akri siano configurati correttamente eseguendo il comando seguente:

    kubectl get pods -n azure-iot-operations
    

    L'output include righe che mostrano i pod dell'agente Akri e del gestore di individuazione sono in esecuzione:

    NAME                                             READY   STATUS    RESTARTS   AGE
    aio-akri-agent-daemonset-hwpc7                   1/1     Running   0          17m
    akri-opcua-asset-discovery-daemonset-dwn2q       1/1     Running   0          8m28s
    

Configurare il gestore di individuazione OPC UA

Per configurare il gestore di individuazione OPC UA per il rilevamento degli asset, creare un file di configurazione YAML contenente i valori descritti in questa sezione:

Nome Obbligatorio Datatype Default Commento
EndpointUrl true String Null URL dell'endpoint OPC UA da usare per l'individuazione degli asset
AutoAcceptUntrustedCertificates true ¹ Boolean false Il client deve accettare automaticamente i certificati non attendibili? Un certificato può essere considerato attendibile solo se non si sono verificati errori nonpressi durante la convalida della catena. Ad esempio, un certificato con catena incompleta non viene accettato.
UseSecurity true ¹ Booleano true Il client deve usare una connessione sicura?
UserName false String Null Nome utente per l'autenticazione utente. ²
Password false String Null Password per l'autenticazione utente. ²

¹ La versione corrente del gestore di individuazione supporta UseSecurity=false solo e richiede autoAcceptUntrustedCertificates=true.
² Implementazione temporanea fino a quando Azure IoT Akri non può passare segreti Kubernetes.

Nell'esempio seguente viene illustrata l'individuazione di un server OPC PLC. È possibile aggiungere i parametri di asset per più server OPC PLC.

  1. Per creare il file di configurazione YAML, copiare e incollare il contenuto seguente in un nuovo file e salvarlo come opcua-configuration.yaml:

    Se si usa il server PLC simulato distribuito con la guida introduttiva alle operazioni IoT di Azure, non è necessario modificare .endpointUrl Se si dispone di server OPC UA che eseguono o si usano i server PLC simulati distribuiti in Azure, aggiungere di conseguenza l'URL dell'endpoint. Gli URL degli endpoint di individuazione sono simili a opc.tcp://<FQDN>:50000/. Per trovare gli FQDN dei server OPC PLC, passare alla distribuzione nel portale di Azure. Per ogni server copiare e incollare il valore FQDN negli URL dell'endpoint.

    apiVersion: akri.sh/v0
    kind: Configuration
    metadata:
      name: aio-akri-opcua-asset
    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
    
  2. Per applicare la configurazione, eseguire il comando seguente:

    kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
    

Verificare la configurazione

Per verificare che il contenitore di individuazione degli asset sia configurato ed eseguito:

  1. Usare il comando seguente per controllare i log dei pod:

    kubectl logs <insert aio-akri-opcua-asset-discovery pod name> -n azure-iot-operations
    

    Un log dal aio-akri-opcua-asset-discovery pod indica dopo alcuni secondi che il gestore di individuazione ha registrato se stesso con Azure IoT Akri:

    2023-06-07 10:45:27.395 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Akri OPC UA Asset Detection (0.2.0-alpha.203+Branch.main.Sha.cd4045345ad0d148cca4098b68fc7da5b307ce13) is starting with the process id: 1
    2023-06-07 10:45:27.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Got IP address of the pod from POD_IP environment variable.
    2023-06-07 10:45:28.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Registered with Akri system with Name opcua-asset for http://10.1.0.92:80 with type: Network as shared: True
    2023-06-07 10:45:28.696 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Press CTRL+C to exit
    

    Dopo circa un minuto, Azure IoT Akri invia la prima richiesta di individuazione in base alla configurazione:

    2023-06-07 12:49:17.344 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[10]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Reading message.
    2023-06-07 12:49:18.046 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Got discover request opcuaDiscoveryMethod:
            - asset:
                endpointUrl: "opc.tcp://opcplc-000000:50000"
                useSecurity: false
                autoAcceptUntrustedCertificates: true
           from ipv6:[::ffff:10.1.7.47]:39708
    2023-06-07 12:49:20.238 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Start asset discovery
    2023-06-07 12:49:20.242 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Discovering OPC UA endpoint opc.tcp://opcplc-000000:50000 using Asset Discovery
    ...
    2023-06-07 14:20:03.905 +00:00 info: OpcUa.Common.Dtdl.DtdlGenerator[6901]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Created DTDL_2 model for boiler_1 with 35 telemetries in 0 ms
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.AssetDiscovery.Akri.CustomResources.CustomResourcesManager[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Generated 1 asset CRs from discoveryUrl opc.tcp://opcplc-000000:50000
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.Common.Client.OpcUaClient[1005]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Session ns=8;i=1828048901 is closing
    ...
    2023-06-07 14:20:05.002 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending response to caller ...
    2023-06-07 14:20:05.003 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[15]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending message.
    2023-06-07 14:20:05.004 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sent successfully
    

    Al termine dell'individuazione, il gestore di individuazione invia il risultato ad Azure IoT Akri per creare una risorsa personalizzata dell'istanza di Akri con informazioni sugli asset e variabili osservabili. Il gestore di individuazione ripete l'individuazione ogni 10 minuti per rilevare eventuali modifiche nel server.

  2. Per visualizzare le istanze di Azure IoT Akri individuate, eseguire il comando seguente:

    kubectl get akrii -n azure-iot-operations
    

    L'output del comando precedente è simile all'esempio seguente. Potrebbe essere necessario attendere alcuni secondi per la creazione dell'istanza di Akri:

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

    Il supervisore OPC UA Connessione or controlla le nuove risorse personalizzate dell'istanza di Azure IoT Akri di tipo opc-ua-assete genera i tipi di asset iniziali e le risorse personalizzate degli asset. È possibile modificare le risorse personalizzate degli asset aggiungendo impostazioni come la pubblicazione estesa per più punti dati o le impostazioni di osservabilità di OPC UA Broker.

  3. Per verificare che l'istanza di Akri sia connessa correttamente a OPC UA Broker, eseguire il comando seguente. Sostituire il segnaposto con il nome dell'istanza di Akri inclusa nell'output del comando precedente:

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

    L'output del comando include una sezione simile all'esempio seguente. Il frammento mostra i valori dell'istanza brokerProperties di Akri e conferma che OPC UA Broker è connesso.

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