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 vers leAWS Cloud(CLI)
Ce didacticiel vous montre comment utiliser leAWS CLIpour configurer et déployer unAWS 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 le groupe deAWS Cloud.
Le gestionnaire de flux facilite et fiabilise 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
Une fonction Lambda qui consomme des données IoT. La fonction Lambda utilise la fonctionAWS IoT GreengrassInstaller le kit 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
dans leAWS IoT GreengrassKit SDK pour interagir avec le gestionnaire de flux. Par souci de simplicité, la fonction Python Lambda dans le cadre de ce didacticiel génère des données d'appareil simulées pour ce didacticiel.
Lorsque vous utilisez leAWS IoT Greengrass, qui inclut les commandes Greengrass dans leAWS CLI, pour créer un groupe, le gestionnaire de flux est désactivé par défaut. Pour activer Stream Manager sur votre cœur, vouscréer une version de définition de fonctionqui inclut le systèmeGGStreamManager
Fonction Lambda et une version de groupe qui fait référence à la nouvelle version de définition de fonction. Vous déployez ensuite le groupe.
Prérequis
Pour suivre ce didacticiel, vous devez disposer des éléments suivants :
-
Un groupe Greengrass et un service principal Greengrass (version). Pour plus d'informations sur la création d'un groupe et un service principal Greengrass, consultez pour plus d'informationsCommencer 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 pour Python v1.5.0 ou version ultérieure. Pour utiliser
StreamManagerClient
dans leAWS IoT GreengrassSDK principal pour Python, vous devez :-
Installer Python Installer Python sur Installer Python ou
-
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, consultez leAWS IoT GreengrassKit SDK for JavaetAWS IoT GreengrassKit SDK pour Node.js sur GitHub. -
-
Un flux de destination nommé
MyKinesisStream
créé dans Amazon Amazon Kinesis Data Streams dans le mêmeRégion AWSen tant que groupe Greengrass. Pour de plus amples informations, veuillez consulterCréer un fluxdans leAmazon Kinesis Developer Guide.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 plus d'informations sur la tarification, consultez leTarification 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 à laRô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" ] } ] }
-
L'AWS CLI installée et configurée sur votre ordinateur. Pour de plus amples informations, veuillez consulterInstallation deAWS Command Line InterfaceetConfiguration deAWS CLIdans leAWS Command Line InterfaceGuide de l'utilisateur.
Les exemples de commandes de ce didacticiel sont écrits pour Linux et d'autres systèmes Unix. Si vous utilisez Windows, consultezSpécification des valeurs des paramètres pour l'AWSInterface de ligne de commandepour plus d'informations sur les différences de syntaxe.
Si la commande contient une chaîne JSON, le didacticiel fournit un exemple qui possède le fichier JSON sur une seule ligne. Sur certains systèmes, il peut être plus efficace de modifier et exécuter des commandes à l'aide de ce format.
Le didacticiel contient les étapes détaillées suivantes :
Le didacticiel devrait prendre environ 30 minutes.
Étape 1 : Créer un package de déploiement de fonction Lambda
Dans cette étape, vous créez un package de déploiement de fonction Lambda qui contient le code de fonction Python et les 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 GreengrassInstaller le kit 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 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
. -
Installer Installer Installer les dépendances de package Installer les dépendances de package à inclure dans le kit de déploiement de votre 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, consultez leAWS IoT GreengrassKit SDK for Java
etAWS IoT GreengrassKit SDK 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. Installer la bibliothèque requise pour toutes les fonctions Python Greengrass Lambda 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 pour Python.
-
Les dépendances que vous avez installées pour leAWS IoT GreengrassKit SDK pour Python (par exemple, le
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
-
Créez un rôle IAM afin de pouvoir transmettre l'ARN du rôle lorsque vous créez un rôle IAM pour vous permettre de transmettre l'ARN du rôle
Note
AWS IoT Greengrassn'utilise pas ce rôle car les autorisations pour vos fonctions Greengrass Lambda sont spécifiées dans le rôle de groupe Greengrass n'utilise pas ce rôle de groupe. Dans le cadre de ce didacticiel, vous créez un rôle vide.
-
Copiez la
Arn
à partir de la sortie. -
Utilisez l'API AWS Lambda pour créer la fonction
TransferStream
. La commande suivante suppose que le fichier ZIP se trouve dans le répertoire actuel.-
Remplacez
role-arn
par l'Arn
que vous avez copié.
aws lambda create-function \ --function-name TransferStream \ --zip-file fileb://transfer_stream_python.zip \ --role
role-arn
\ --handler transfer_stream.function_handler \ --runtime python3.7 -
-
Publiez une version de la fonction.
aws lambda publish-version --function-name TransferStream --description 'First version'
-
Créez un alias pour la version publiée.
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 la définition de groupe lorsque le code de fonction est mis à jour. À la place, il vous suffit de pointer l'alias vers la nouvelle version de fonction.
aws lambda create-alias --function-name TransferStream --name GG_TransferStream --function-version 1
Note
AWS IoT Greengrassne prend pas en charge les alias Lambda pour$LATESTversions.
-
Copiez la
AliasArn
à partir de la sortie. Vous utilisez cette valeur lorsque vous configurez la fonction pour AWS IoT Greengrass.
Maintenant, vous êtes prêt à configurer la fonction pour AWS IoT Greengrass.
Étape 3 : Créer une version et une définition de fonction
Cette étape crée une version de définition de fonction qui fait référence au système.GGStreamManager
Fonction Lambda et fonction définie par l'utilisateurTransferStream
fonction Lambda. Pour activer le gestionnaire de flux lorsque vous utilisez leAWS IoT Greengrass, la version de votre définition de fonction doit inclure leGGStreamManager
.
-
Créez une définition de fonction avec une version initiale qui contient les fonctions système et les fonctions Lambda définies par l'utilisateur.
La version de définition suivante active le gestionnaire de flux avec leréglages des paramètres. Pour configurer des paramètres personnalisés, vous devez définir des variables d'environnement pour les paramètres du gestionnaire de flux correspondants. Pour obtenir un exemple, veuillez consulter .Pour activer, désactiver ou configurer le gestionnaire de flux (interface de ligne de commande).AWS IoT Greengrassutilise les paramètres par défaut pour tous les paramètres qui sont omis.
MemorySize
doit être au moins128000
.Pinned
doit être défini surtrue
.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 unsur demandeFonction 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.
-
Remplacez
arbitrary-function-id
avec un nom pour la fonction, tel questream-manager
. -
Remplacez
alias ARN
avec leAliasArn
que vous avez copié lorsque vous avez créé l'alias de l'TransferStream
fonction Lambda.
Note
Timeout
est requis par la version de définition de fonction, maisGGStreamManager
ne l'utilise pas. Pour plus d'informations surTimeout
et d'autres paramètres au niveau du groupe, voirContrôle de l'exécution des fonctions Greengrass Lambda à l'aide d'une configuration spécifique au groupe. -
-
Copiez la
LatestVersionArn
à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de fonction à la version de groupe que vous déployez pour le noyau.
Étape 4 : Créer une définition et une version de l'enregistreur
Configurez les paramètres de journalisation du groupe. Dans le cadre de ce didacticiel, vous configurezAWS IoT Greengrassles composants système, les fonctions Lambda définies par l'utilisateur et les connecteurs pour écrire 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.
-
Créez une définition d'enregistreur qui inclut une version initiale.
-
Copiez l'élément
LatestVersionArn
de la définition de l'enregistreur à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de la définition de l'enregistreur à la version de groupe que vous déployez sur le noyau.
Étape 5 : Obtenir l'ARN de votre version de définition du noyau
Obtenez l'ARN de la version de définition du noyau pour ensuite l'ajouter à votre nouvelle version de groupe. Pour que vous puissiez déployer une version de groupe, cette dernière doit référencer une version de définition du noyau contenant exactement un noyau.
-
Obtenez les ID du groupe et de la version de groupe Greengrass cible. Cette procédure suppose qu'il s'agit du dernier groupe et de la dernière version de groupe les plus récents La requête suivante renvoie le groupe créé le plus récemment.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
Vous pouvez également procéder à une interrogation par nom. Les noms de groupe ne devant pas nécessairement être uniques, plusieurs groupes peuvent être renvoyés.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"Note
Vous pouvez également trouver ces valeurs dans leAWS IoTconsole L'ID du groupe s'affiche sur la page Paramètres du groupe. Les ID de version de groupe sont affichés dans leDéploiementsOnglet.
-
Copiez l'
Id
du groupe cible à partir de la sortie. Vous utilisez cela pour obtenir la version de définition du noyau et lorsque vous déployez le groupe. -
Copiez l'élément
LatestVersion
à partir de la sortie (ID de la dernière version ajoutée au groupe). Vous utilisez cela pour obtenir la version de la définition du noyau. -
Obtenir l'ARN de la version de la définition du noyau :
-
Obtenez la version de groupe.
-
Remplacez
group-id
par l'Id
que vous avez copié pour le groupe. -
Remplacez
group-version-id
avec leLatestVersion
que vous avez copiés pour le groupe.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idgroup-version-id
-
-
Copiez la
CoreDefinitionVersionArn
à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition du noyau à la version de groupe que vous déployez sur le noyau.
-
Étape 6 : Créer une version de groupe
Maintenant, vous êtes prêt à créer une version de groupe contenant tous les éléments que vous souhaitez déployer. Pour ce faire, vous devez créer une version de groupe qui fait référence à la version cible de chaque type de composant. Pour ce didacticiel, vous incluez une version de définition du noyau, une version de définition de fonction et une version de définition de l'enregistreur.
-
Créer une version de groupe.
-
Remplacez
group-id
par l'Id
que vous avez copié pour le groupe. -
Remplacez
core-definition-version-arn
avec leCoreDefinitionVersionArn
que vous avez copié pour la version de définition du noyau. -
Remplacez
function-definition-version-arn
avec leLatestVersionArn
que vous avez copié pour votre nouvelle version de définition de fonction. -
Remplacez
logger-definition-version-arn
avec leLatestVersionArn
que vous avez copié pour votre nouvelle version de définition de l'enregistreur.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
-
-
Copiez la
Version
à partir de la sortie. Il s'agit de l'ID de la nouvelle version de groupe.
Étape 7 : Créer un déploiement
Déployer le groupe sur l'appareil principal (noyau)
-
Créer un déploiement.
Remplacez
group-id
par l'Id
que vous avez copié pour le groupe.Remplacez
group-version-id
avec leVersion
que vous avez copié pour la nouvelle version du groupe.
aws greengrass create-deployment \ --deployment-type NewDeployment \ --group-id
group-id
\ --group-version-idgroup-version-id
-
Copiez la
DeploymentId
à partir de la sortie. -
Obtenir le statut du déploiement.
Remplacez
group-id
par l'Id
que vous avez copié pour le groupe.Remplacez
deployment-id
par l'DeploymentId
que vous avez copié pour le déploiement.
aws greengrass get-deployment-status \ --group-id
group-id
\ --deployment-iddeployment-id
Si le statut est
Success
, le déploiement a réussi. Pour bénéficier d'une aide à la résolution des problèmes, consultez Résolution des problèmes de AWS IoT Greengrass.
Étape 8 : 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 data flux de données, 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 leTransferStreamUne fonction Lambda depuis le cœur.
Suivez l'Étape 6 : Créer une version de groupe pour créer une nouvelle version de groupe, mais supprimez l'option
--function-definition-version-arn
dans la commandecreate-group-version
. Vous pouvez également créer une version de définition de fonction qui n'inclut pas leTransferStreamfonction Lambda.Note
En omettant le système
GGStreamManager
Installer la fonction Lambda à partir de la version du groupe déployé, vous désactivez la gestion de flux sur le noyau.-
Suivez l'Étape 7 : Créer un déploiement pour déployer la nouvelle version du groupe.
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.logGGStreamManager
é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 pouvez définir le niveau de journalisation Lambda
sur DEBUG
, puis créer et déployer une nouvelle version de groupe.
Consulter aussi
-
Configurations d'exportation pour prises en chargeAWS Clouddestinations
-
AWS Identity and Access ManagementCommandes (IAM)dans leAWS CLIRéférence des commandes
-
AWS Lambdacommandesdans leAWS CLIRéférence des commandes
-
AWS IoT Greengrasscommandesdans leAWS CLIRéférence des commandes