Exportation de flux de données versAWS Cloud(console) - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exportation de flux de données versAWS Cloud(console)

Ce didacticiel vous montre comment utiliserAWS IoTconsole pour configurer et déployer uneAWS IoT Greengrassgroupe avec le gestionnaire de flux activé. Le groupe contient une fonction Lambda définie par l'utilisateur qui écrit dans un flux du gestionnaire de flux, ce flux étant ensuite exporté automatiquement vers leAWS Cloud.

Le gestionnaire de flux rend l'ingestion, le traitement et l'exportation de flux de données volumineux plus efficaces et plus fiables. Dans ce didacticiel, vous créez uneTransferStreamFonction Lambda qui consomme des données IoT. La fonction Lambda utilise la fonctionAWS IoT GreengrassKit SDK principal pour créer un flux dans le gestionnaire de flux, puis lire et écrire dans ce flux. Le gestionnaire de flux exporte ensuite le flux vers Kinesis Data Streams. Le schéma suivant illustre ce flux de travail.

Diagramme du flux de travail de gestion des flux.

L'objectif de ce didacticiel est de montrer comment les fonctions Lambda définies par l'utilisateur utilisent leStreamManagerClientl'objet dans l'AWS IoT GreengrassKit SDK principal pour interagir avec le gestionnaire de flux. Par souci de simplicité, la fonction Lambda Python que vous créez pour ce didacticiel génère des données d'appareil simulées.

Prérequis

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :

  • Un groupe Greengrass et un service principal Greengrass (version 1.10 ou ultérieure). Pour plus d'informations sur la création d'un groupe et d'un service principal Greengrass, consultezCommencer avec AWS IoT Greengrass. Le didacticiel Mise en route comprend également les étapes d'installation du logiciel AWS IoT Greengrass Core.

    Note

    Gestionnaire de flux n'est pas pris en charge sur OpenWrt Distributions.

  • L'environnement d'exécution Java 8 (JDK 8) installé sur l'appareil principal (noyau).

    • Pour les distributions basées sur Debian (y compris Raspbian) ou Ubuntu, exécutez la commande suivante :

      sudo apt install openjdk-8-jdk
    • Pour les distributions basées sur Red Hat (y compris Amazon Linux), exécutez la commande suivante :

      sudo yum install java-1.8.0-openjdk

      Pour de plus amples informations, veuillez consulter How to download and install prebuilt OpenJDK packages sur le site web OpenJDK.

  • AWS IoT GreengrassKit SDK principal pour Python v1.5.0 ou version ultérieure. Pour utiliserStreamManagerClientdans leAWS IoT GreengrassSDK principal pour Python, vous devez :

    • Installer Python 3.7 ou version ultérieure sur l'appareil principal (noyau).

    • Incluez le SDK et ses dépendances dans votre package de déploiement de fonctions Lambda. Des instructions sont fournies dans ce didacticiel.

    Astuce

    Vous pouvez utiliser StreamManagerClient avec Java ou NodeJS. Pour obtenir un exemple de code, veuillez consulterAWS IoT GreengrassKit SDK de développement logiciel pour JavaetAWS IoT GreengrassKit SDK de développement logiciel pour Node.jssur GitHub.

  • Un flux de destination nomméMyKinesisStreamcréé dans Amazon Kinesis Data Streams dansRégion AWScomme votre groupe Greengrass. Pour de plus amples informations, veuillez consulterCréer un fluxdans leGuide du développeur Amazon Kinesis.

    Note

    Dans ce didacticiel, le gestionnaire de flux exporte les données vers Kinesis Data Streams, ce qui entraîne des frais sur votreCompte AWS. Pour de plus amples informations sur la tarification, consultezTarification de Kinesis Data Streams.

    Pour éviter des frais, vous pouvez exécuter ce didacticiel sans créer de flux de données Kinesis. Dans ce cas, vous consultez les journaux pour voir si le gestionnaire de flux a tenté d'exporter le flux vers Kinesis Data Streams.

  • Une stratégie IAM ajoutée àRôle de groupe Greengrassqui permet aukinesis:PutRecordsaction sur le flux de données cible, comme illustré dans l'exemple suivant :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:region:account-id:stream/MyKinesisStream" ] } ] }

Le didacticiel contient les étapes détaillées suivantes :

Le didacticiel devrait prendre environ 20 minutes.

Étape 1 : Créer un package de déploiement de fonction Lambda

Au cours de cette étape, vous créez un package de déploiement de fonction Lambda qui contient le code de fonction Python et ses dépendances. Vous téléchargez ce package ultérieurement lorsque vous créez leFonction Lambda dansAWS Lambda. La fonction Lambda utilise la fonctionAWS IoT GreengrassKit SDK principal pour créer des flux locaux et interagir avec ces derniers.

Note

Vos fonctions Lambda définies par l'utilisateur doivent utiliser leAWS IoT GreengrassKit SDK Corepour interagir avec le gestionnaire de flux. Pour de plus amples informations sur les conditions requises pour le gestionnaire de flux Greengrass, veuillez consulter les conditions requises pour le gestionnaire de flux Greengrass.

  1. Télécharger leAWS IoT GreengrassKit SDK de développement logiciel pour Pythonv1.5.0 ou version ultérieure.

  2. Décompressez le package téléchargé pour obtenir le kit SDK. Le kit SDK est représenté par le dossier greengrasssdk.

  3. Installez les dépendances de package à inclure avec le kit SDK dans votre package de déploiement de fonction Lambda.

    1. Accédez au répertoire SDK qui contient le fichier requirements.txt. Ce fichier répertorie les dépendances.

    2. Installez les dépendances du kit SDK. Par exemple, exécutez la commande pip suivante pour les installer dans le répertoire en cours :

      pip install --target . -r requirements.txt
  4. Enregistrez la fonction de code Python suivante dans un fichier local nommé transfer_stream.py.

    Astuce

    Pour obtenir un exemple de code qui utilise Java et NodeJS, veuillez consulterAWS IoT GreengrassKit SDK de développement logiciel pour JavaetAWS IoT GreengrassKit SDK de développement logiciel pour Node.jssur GitHub.

    import asyncio import logging import random import time from greengrasssdk.stream_manager import ( ExportDefinition, KinesisConfig, MessageStreamDefinition, ReadMessagesOptions, ResourceNotFoundException, StrategyOnFull, StreamManagerClient, ) # This example creates a local stream named "SomeStream". # It starts writing data into that stream and then stream manager automatically exports # the data to a customer-created Kinesis data stream named "MyKinesisStream". # This example runs forever until the program is stopped. # The size of the local stream on disk will not exceed the default (which is 256 MB). # Any data appended after the stream reaches the size limit continues to be appended, and # stream manager deletes the oldest data until the total stream size is back under 256 MB. # The Kinesis data stream in the cloud has no such bound, so all the data from this script is # uploaded to Kinesis and you will be charged for that usage. def main(logger): try: stream_name = "SomeStream" kinesis_stream_name = "MyKinesisStream" # Create a client for the StreamManager client = StreamManagerClient() # Try deleting the stream (if it exists) so that we have a fresh start try: client.delete_message_stream(stream_name=stream_name) except ResourceNotFoundException: pass exports = ExportDefinition( kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)] ) client.create_message_stream( MessageStreamDefinition( name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports ) ) # Append two messages and print their sequence numbers logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")), ) logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")), ) # Try reading the two messages we just appended and print them out logger.info( "Successfully read 2 messages: %s", client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)), ) logger.info("Now going to start writing random integers between 0 and 1000 to the stream") # Now start putting in random data between 0 and 1000 to emulate device sensor input while True: logger.debug("Appending new random integer to stream") client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big")) time.sleep(1) except asyncio.TimeoutError: logger.exception("Timed out while executing") except Exception: logger.exception("Exception while running") def function_handler(event, context): return logging.basicConfig(level=logging.INFO) # Start up this sample code main(logger=logging.getLogger())
  5. Compressez les éléments suivants dans un fichier nommé transfer_stream_python.zip. Il s'agit du package de déploiement de votre fonction Lambda.

    • transfer_stream.py. Logique d'application.

    • greengrasssdk. Bibliothèque requise pour toutes les fonctions Lambda Python Greengrass qui publient des messages MQTT.

      Opérations du gestionnaire de fluxsont disponibles dans la version 1.5.0 ou ultérieure duAWS IoT GreengrassKit SDK de développement logiciel pour Python.

    • Les dépendances que vous avez installées pourAWS IoT GreengrassKit SDK principal pour Python (par exemple,cbor2annuaires).

    Lorsque vous créez le fichier zip, incluez uniquement ces éléments, et non le dossier conteneur.

Étape 2 : Création d'une fonction Lambda

Au cours de cette étape, vous utilisez leAWS Lambdapour créer une fonction Lambda et pour la configurer afin qu'elle utilise votre package de déploiement. Vous publiez ensuite une version de fonction et créez un alias.

  1. Créez d'abord la fonction Lambda.

    1. Dans AWS Management Console, choisissez Services et ouvrez la console AWS Lambda.

    2. ChoisissezCréation de fonctionpuisCréer à partir de zéro.

    3. Dans la section Informations de base, spécifiez les valeurs suivantes :

      • Sous Nom de la fonction, saisissez TransferStream.

      • Pour Runtime, sélectionnez Python 3.7.

      • PourAutorisations, conservez le paramètre par défaut. Cela crée un rôle d'exécution qui accorde des autorisations Lambda de base. Ce rôle n'est pas utilisé parAWS IoT Greengrass.

    4. Dans le bas de la page, choisissez Create function.

  2. Enregistrez ensuite le gestionnaire et téléchargez le package de déploiement de votre fonction Lambda.

    1. Dans la pageCodeonglet, sousCode source, choisissezChargement à partir de. Dans le menu déroulant, choisissezfichier .zip.

      Le menu déroulant Charger depuis avec le fichier .zip en surbrillance.
    2. ChoisissezCharger, puis choisissez votretransfer_stream_python.zippackage de déploiement. Ensuite, choisissez Enregistrer.

    3. Dans la pageCodepour la fonction, sousParamètres Runtime, choisissezModifier, puis entrez les valeurs suivantes.

      • Pour Runtime, sélectionnez Python 3.7.

      • Pour Handler (Gestionnaire), entrez transfer_stream.function_handler.

    4. Choisissez Save (Enregistrer).

      Note

      LeTestsur leAWS Lambdane fonctionne pas avec cette fonction. LeAWS IoT GreengrassLe SDK principal ne contient pas de modules nécessaires pour exécuter vos fonctions Greengrass Lambda indépendamment dans leAWS Lambdaconsole Ces modules (par exemple,greengrass_common) sont fournis aux fonctions après leur déploiement dans votre cœur Greengrass.

  3. Publiez maintenant la première version de votre fonction Lambda et créez unealias pour la version.

    Note

    Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour de code, car vous n'avez pas besoin de changer votre table d'abonnement ou votre définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de fonction.

    1. Dans le menu Actions, sélectionnez Publier une nouvelle version.

    2. Dans Description de la version, saisissez First version, puis choisissez Publish.

    3. Dans la pageTransferStream : 1page de configuration, depuis la pageActions, choisissezCréer un alias.

    4. Sur la page Create a new alias, utilisez les valeurs suivantes :

      • Pour Name (Nom), saisissez GG_TransferStream.

      • Pour Version, choisissez 1.

      Note

      AWS IoT Greengrassne prend pas en charge les alias Lambda pour$LATESTversions.

    5. Sélectionnez Create (Créer).

Vous pouvez désormais ajouter la fonction Lambda à votre groupe Greengrass.

Étape 3 : Ajouter une fonction Lambda au groupe Greengrass

Au cours de cette étape, vous ajoutez la fonction Lambda au groupe, puis configurez son cycle de vie et ses variables d'environnement. Pour plus d'informations, consultez Contrôle de l'exécution des fonctions Greengrass Lambda à l'aide d'une configuration spécifique au groupe.

  1. DansAWS IoTVolet de navigation de la console sousGérer, développezAppareils Greengrass, puisGroupes (V1).

  2. Choisissez le groupe cible.

  3. Sur la page de configuration de groupe, choisissezFonctions LambdaOnglet.

  4. UNDERFonctions My Lambda, choisissezAddition.

  5. Dans la pageAjouter une fonction Lambda, choisissez l'Fonction Lambdapour votre fonction Lambda.

  6. PourVersion Lambda, choisissezAlias : GG_TransferStream.

    Maintenant, configurez les propriétés qui déterminent le comportement de la fonction Lambda dans le groupe Greengrass.

  7. DansConfiguration de fonction Lambda, effectuez les modifications suivantes :

    • Définissez Limite de mémoire sur 32 Mo.

    • PourPinned, choisissezVrai.

    Note

    UNlongue durée(ouépinglé) La fonction Lambda démarre automatiquement aprèsAWS IoT Greengrassdémarre et continue à fonctionner dans son propre conteneur. Cela contraste avec unA laFonction Lambda, qui démarre quand elle est appelée et qui s'arrête lorsqu'il n'y a plus de tâches à exécuter. Pour plus d'informations, consultez Configuration du cycle de vie pour les fonctions Greengrass Lambda.

  8. ChoisissezAjouter une fonction Lambda.

Étape 4 : Activer le gestionnaire de flux

Dans cette étape, vous vous assurez que le gestionnaire de flux est activé.

  1. Sur la page de configuration de groupe, choisissezFonctions LambdaOnglet.

  2. UNDERFonctions Lambda système, sélectionnezGestionnaire de flux, puis l'état. Si l'état est désactivé, choisissez Modifier. Ensuite, choisissez Activer et Enregistrer. Vous pouvez utiliser les paramètres par défaut pour ce didacticiel. Pour plus d'informations, consultez Configuration du gestionnaire de flux AWS IoT Greengrass.

Note

Lorsque vous utilisez la console pour activer le gestionnaire de flux et déployer le groupe, la taille de la mémoire du gestionnaire de flux est définie par défaut sur 4 194 304 Ko (4 Go). Nous vous recommandons de définir la taille de la mémoire sur au moins 128 000 Ko.

Étape 5 : Configurer la journalisation locale

Au cours de cette étape, vous configurezAWS IoT Greengrasscomposants système, fonctions Lambda définies par l'utilisateur et connecteurs du groupe pour qu'ils écrivent des journaux dans le système de fichiers de l'appareil principal (noyau). Vous pouvez utiliser les journaux pour résoudre les problèmes que vous rencontrez. Pour plus d'informations, consultez Surveillance avec les journaux AWS IoT Greengrass.

  1. Sous Configuration des journaux locaux, vérifiez si la journalisation locale est configurée.

  2. Si les journaux ne sont pas configurés pour les composants système Greengrass ou les fonctions Lambda définies par l'utilisateur, choisissezModifier.

  3. ChoisissezNiveau de journalisation des fonctions Lambda utilisateuretNiveau de journalisation du système Greengrass.

  4. Conservez les valeurs par défaut de niveau de journalisation et de limite d'espace disque, puis choisissez Enregistrer.

Étape 6 : Déploiement du groupe Greengrass

Déployer le groupe sur l'appareil principal (noyau)

  1. Vérifiez que lesAWS IoT Greengrasscore est en cours d'exécution. Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes, si nécessaire.

    1. Pour vérifier si le démon est en cours d'exécution :

      ps aux | grep -E 'greengrass.*daemon'

      Si la sortie contient une entrée root pour /greengrass/ggc/packages/ggc-version/bin/daemon, le démon est en cours d'exécution.

      Note

      La version du chemin d'accès dépend de la version du logiciel AWS IoT Greengrass Core installée sur votre appareil principal.

    2. Pour démarrer le démon :

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Sur la page de configuration de groupe, choisissezDéploiement.

    1. DansFonctions Lambda, sous l'ongletFonctions Lambda systèmesection, sélectionnezDétecteur IPet choisissezModifier.

    2. DansModifier les paramètres du détecteur IPboîte de dialogue, sélectionnezDétecter et remplacer automatiquement les points de terminaison des courtiers MQTT.

    3. Choisissez Save (Enregistrer).

      Les appareils peuvent ainsi acquérir automatiquement des informations de connectivité pour le noyau, telles que l'adresse IP, le DNS et le numéro de port. La détection automatique est recommandée, mais AWS IoT Greengrass prend également en charge les points de terminaison spécifiés manuellement. Vous êtes uniquement invité à indiquer la méthode de découverte lors du déploiement initial du groupe.

      Note

      Si vous y êtes invité, autorisez la création deRôle de service Greengrasset associez-le à votreCompte AWSdans l'actuelRégion AWS. Ce rôle permetAWS IoT Greengrasspour accéder à vos ressources dansAWSServices .

      La page Déploiements indique l'horodatage, l'ID de version et l'état du déploiement. Une fois terminé, le statut affiché pour le déploiement doit afficher l'étatTerminé.

      Pour bénéficier d'une aide à la résolution des problèmes, consultez Résolution des problèmes de AWS IoT Greengrass.

Étape 7 : Tester l'application

LeTransferStreamLa fonction Lambda génère des données d'appareil simulées. Elle écrit des données dans un flux que le gestionnaire de flux exporte vers le flux de données Kinesis cible.

  1. Dans la console Amazon Kinesis, sousKinesis, choisissezMyKinesisStream.

    Note

    Si vous avez exécuté le didacticiel sans flux de données Kinesis cible, recherchez dans le fichier journal le gestionnaire de flux (GGStreamManager). S'il contient export stream MyKinesisStream doesn't exist dans un message d'erreur, le test est réussi. Cette erreur signifie que le service a essayé d'effectuer une exportation vers le flux mais que le flux n'existe pas.

  2. Dans la pageMyKinesisStreampage, choisissezSurveillance. Si le test réussit, vous devriez voir des données dans les graphiques PutRecords . Selon votre connexion, l'affichage des données peut prendre une minute.

    Important

    Lorsque vous avez terminé le test, supprimez le flux de données Kinesis pour éviter d'entraîner des frais supplémentaires.

    Vous pouvez aussi exécuter la commande suivante pour arrêter le démon Greengrass. Cela empêche le noyau d'envoyer des messages jusqu'à ce que vous soyez prêt à continuer le test.

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Supprimez lesTransferStreamFonction Lambda depuis le noyau.

    1. DansAWS IoTVolet de navigation de la console sousGérer, développezAppareils Greengrass, puisGroupes (V1).

    2. UNDERGroupes Greengrass, choisissez votre groupe.

    3. Dans la pageLambda, choisissez les points de suspension (...) pour leTransferStreamfonction, puis choisissezFonction Supprimer.

    4. Sous Actions, choisissez Deploy (Déployer).

Pour afficher les informations de journalisation ou résoudre les problèmes liés aux flux, recherchez les fonctions GGStreamManager et TransferStream dans les journaux. Vous devez disposer d'autorisations root pour pouvoir lire les journaux AWS IoT Greengrass sur le système de fichiers.

  • TransferStream écrit les entrées de journal dans greengrass-root/ggc/var/log/user/region/account-id/TransferStream.log.

  • GGStreamManager écrit les entrées de journal dans greengrass-root/ggc/var/log/system/GGStreamManager.log.

Si vous avez besoin de plus d'informations de dépannage, vous pouvezdéfinir le niveau de journalisationpourJournaux Lambda utilisateurpourJournaux de débogagepuis déployez à nouveau le groupe.

Consulter aussi