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 uneTransferStream
Fonction 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.
L'objectif de ce didacticiel est de montrer comment les fonctions Lambda définies par l'utilisateur utilisent leStreamManagerClient
l'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 utiliser
StreamManagerClient
dans 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.js sur GitHub. -
-
Un flux de destination nommé
MyKinesisStream
créé 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 au
kinesis:PutRecords
action 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.
-
Télécharger leAWS IoT GreengrassKit SDK de développement logiciel pour Pythonv1.5.0 ou version ultérieure.
-
Décompressez le package téléchargé pour obtenir le kit SDK. Le kit SDK est représenté par le dossier
greengrasssdk
. -
Installez les dépendances de package à inclure avec le kit SDK dans votre package de déploiement de fonction Lambda.
-
Accédez au répertoire SDK qui contient le fichier
requirements.txt
. Ce fichier répertorie les dépendances. -
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
-
-
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 Java
etAWS IoT GreengrassKit SDK de développement logiciel pour Node.js sur 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())
-
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,
cbor2
annuaires).
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.
-
Créez d'abord la fonction Lambda.
-
Dans AWS Management Console, choisissez Services et ouvrez la console AWS Lambda.
-
ChoisissezCréation de fonctionpuisCréer à partir de zéro.
-
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.
-
-
Dans le bas de la page, choisissez Create function.
-
-
Enregistrez ensuite le gestionnaire et téléchargez le package de déploiement de votre fonction Lambda.
-
Dans la pageCodeonglet, sousCode source, choisissezChargement à partir de. Dans le menu déroulant, choisissezfichier .zip.
-
ChoisissezCharger, puis choisissez votre
transfer_stream_python.zip
package de déploiement. Ensuite, choisissez Enregistrer. -
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
.
-
-
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.
-
-
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.
-
Dans la pageTransferStream : 1page de configuration, depuis la pageActions, choisissezCréer un alias.
-
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.
-
-
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.
DansAWS IoTVolet de navigation de la console sousGérer, développezAppareils Greengrass, puisGroupes (V1).
Choisissez le groupe cible.
-
Sur la page de configuration de groupe, choisissezFonctions LambdaOnglet.
-
UNDERFonctions My Lambda, choisissezAddition.
-
Dans la pageAjouter une fonction Lambda, choisissez l'Fonction Lambdapour votre fonction Lambda.
-
PourVersion Lambda, choisissezAlias : GG_TransferStream.
Maintenant, configurez les propriétés qui déterminent le comportement de la fonction Lambda dans le groupe Greengrass.
-
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.
-
-
ChoisissezAjouter une fonction Lambda.
Étape 4 : Activer le gestionnaire de flux
Dans cette étape, vous vous assurez que le gestionnaire de flux est activé.
-
Sur la page de configuration de groupe, choisissezFonctions LambdaOnglet.
-
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.
Étape 6 : Déploiement du groupe Greengrass
Déployer le groupe sur l'appareil principal (noyau)
Étape 7 : Tester l'application
LeTransferStream
La 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.
-
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 contientexport 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. -
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
-
Supprimez lesTransferStreamFonction Lambda depuis le noyau.
DansAWS IoTVolet de navigation de la console sousGérer, développezAppareils Greengrass, puisGroupes (V1).
-
UNDERGroupes Greengrass, choisissez votre groupe.
-
Dans la pageLambda, choisissez les points de suspension (...) pour leTransferStreamfonction, puis choisissezFonction Supprimer.
-
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.