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.
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 aopc.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
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:
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.
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-asset
e 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.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\"……