Partager via


Détecter les sources de données OPC UA à l’aide d’Azure IoT Akri (préversion)

Important

Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Dans cet article, vous allez apprendre à découvrir automatiquement les sources de données OPC UA. Après avoir déployé Opérations Azure IoT (préversion), configurez Azure IoT Akri (préversion) pour découvrir les sources de données OPC UA en périphérie. Azure IoT Akri crée des ressources personnalisées dans votre cluster Kubernetes qui représentent les sources de données qu’il découvre. La possibilité de découvrir les sources de données OPC UA vous évite d’avoir à les configurer manuellement via le portail Opérations Azure IoT (préversion).

Important

Pour l’heure, vous ne pouvez pas utiliser Registre de Dispositifs Azure pour gérer les ressources découvertes et créées par Azure IoT Akri.

Azure IoT Akri vous permet de détecter et de créer des ressources dans l’espace d’adressage d’un serveur OPC UA. La détection de ressources OPC UA génère des ressources personnalisées AssetType et Asset pour les ressources conformes à la spécification OPC UA Device Integration (DI).

Prérequis

  • Installer Opérations Azure IoT (préversion). Pour installer Opérations Azure IoT à des fins de démonstration et d’exploration, consultez Démarrage rapide : Déployer Opérations Azure IoT – sur un cluster Kubernetes avec Arc.

  • Vérifier que les pods Azure IoT Akri sont correctement configurés en exécutant la commande suivante :

    kubectl get pods -n azure-iot-operations
    

    La sortie comporte des lignes qui indiquent que l’agent Akri et les pods du gestionnaire de découverte sont en cours d’exécution :

    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
    

Configurer le gestionnaire de détection OPC UA

Pour configurer le gestionnaire de découverte OPC UA en vue de la détection de ressources, créez un fichier de configuration YAML qui contient les valeurs décrites dans cette section :

Nom Obligatoire Datatype Par défaut Commentaire
EndpointUrl true Chaîne null URL du point de terminaison OPC UA à utiliser pour la découverte des ressources
AutoAcceptUntrustedCertificates true ¹ Booléen false Le client doit-il accepter automatiquement les certificats non approuvés ? Un certificat ne peut être accepté automatiquement comme étant approuvé que si aucune erreur irrémédiable ne s’est produite pendant la validation de la chaîne. Par exemple, un certificat avec une chaîne incomplète n’est pas accepté.
UseSecurity true ¹ Booléen true Le client doit-il utiliser une connexion sécurisée ?
UserName false Chaîne null Nom d’utilisateur pour l’authentification des utilisateurs. ²
Password false Chaîne null Mot de passe pour l’authentification utilisateur. ²

¹ La version actuelle du gestionnaire de découverte ne prend en charge que UseSecurity=false et nécessite autoAcceptUntrustedCertificates=true.
² Implémentation temporaire jusqu’à ce qu’Azure IoT Akri puisse passer des secrets Kubernetes.

L’exemple suivant illustre la découverte d’un serveur OPC PLC. Vous pouvez ajouter les paramètres de ressource pour plusieurs serveurs OPC PLC.

  1. Pour créer le fichier de configuration YAML, copiez et collez le contenu suivant dans un nouveau fichier, puis enregistrez-le sous opcua-configuration.yaml :

    Si vous utilisez le serveur PLC simulé qui a été déployé avec le démarrage rapide Opérations Azure IoT, vous n’avez pas besoin de modifier le fichier endpointUrl. Si vos propres serveurs OPC UA s’exécutent ou utilisent les serveurs PLC simulés déployés sur Azure, ajoutez votre URL de point de terminaison en conséquence. Les URL de point de terminaison de découverte se présentent comme ceci : opc.tcp://<FQDN>:50000/. Pour rechercher les noms de domaine complets (FQDN) de vos serveurs OPC PLC, accédez à votre déploiement sur le portail Azure. Pour chaque serveur, copiez et collez la valeur du nom de domaine complet dans vos URL de point de terminaison.

    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. Pour appliquer la configuration, exécutez la commande suivante :

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

Vérifier la configuration

Pour vérifier que le conteneur de découverte de ressources est configuré et en cours d’exécution :

  1. Utilisez la commande suivante pour vérifier les journaux des pods :

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

    Un journal du pod aio-akri-opcua-asset-discovery indique après quelques secondes que le gestionnaire de découverte s’est inscrit auprès d’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
    

    Après environ une minute, Azure IoT Akri émet la première demande de découverte en fonction de la configuration :

    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
    

    Une fois la découverte terminée, le gestionnaire de découverte renvoie le résultat à Azure IoT Akri pour créer une ressource personnalisée d’instance Akri avec des informations sur les ressources et des variables observables. Le gestionnaire de découverte répète la découverte toutes les 10 minutes pour détecter les modifications éventuelles sur le serveur.

  2. Pour afficher les instances Azure IoT Akri découvertes, exécutez la commande suivante :

    kubectl get akrii -n azure-iot-operations
    

    La sortie de la commande précédente ressemble à celle de l’exemple suivant. Vous devrez peut-être attendre quelques secondes avant que l’instance Akri ne soit créée :

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

    Le superviseur du connecteur OPC UA surveille les nouvelles ressources personnalisées d’instance Azure IoT Akri de type opc-ua-asset et génère les types de ressources et ressources personnalisées initiales pour eux. Vous pouvez modifier les ressources personnalisées en ajoutant des paramètres comme la publication étendue pour plus de points de données ou des paramètres d’observabilité OPC UA Broker.

  3. Pour vérifier que l’instance Akri s’est bien connectée à OPC UA Broker, exécutez la commande suivante. Remplacez l’espace réservé par le nom de l’instance Akri qui a été incluse dans la sortie de la commande précédente :

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

    La sortie de la commande comporte une section qui ressemble à l’exemple suivant. L’extrait de code montre les valeurs brokerProperties de l’instance Akri et confirme qu’OPC UA Broker est connecté.

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