Configurations d'exportation pour prises en chargeAWS Clouddestinations - 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.

Configurations d'exportation pour prises en chargeAWS Clouddestinations

Utilisation des fonctions Lambda définies par l'utilisateurStreamManagerClientdans leAWS IoT GreengrassKit SDK principal pour interagir avec le gestionnaire de flux. Quand une fonction Lambdacrée un fluxoumet à jour un flux, il passe unMessageStreamDefinitionobjet qui représente les propriétés du flux, y compris la définition d'exportation. LeExportDefinitioncontient les configurations d'exportation définies pour le flux. Stream Manager utilise ces configurations d'exportation pour déterminer où et comment exporter le flux.

Diagramme de modèle objet du ExportDefinition type de propriété.

Vous pouvez définir zéro configuration d'exportation ou plus sur un flux, y compris plusieurs configurations d'exportation pour un seul type de destination. Par exemple, vous pouvez exporter un flux vers deuxAWS IoT Analyticset un flux de données Kinesis.

En cas d'échec des tentatives d'exportation, le gestionnaire de flux tente continuellement d'exporter des données vers leAWS Cloudà intervalles allant jusqu'à cinq minutes. Le nombre de nouvelles tentatives n'a pas de limite maximale.

Note

StreamManagerClientfournit également une destination cible que vous pouvez utiliser pour exporter des flux vers un serveur HTTP. Cette cible n'est destinée qu'à des fins de test. Il n'est pas stable ni pris en charge pour une utilisation dans des environnements de production.

Vous êtes responsable de la maintenance de cesAWS CloudAWS.

Canaux AWS IoT Analytics

Stream Manager prend en charge les exportations automatiques versAWS IoT Analytics.AWS IoT Analyticsvous permet d'effectuer des analyses avancées de vos données pour aider à prendre des décisions commerciales et à améliorer les modèles d'apprentissage automatique. Pour de plus amples informations, veuillez consulterPrésentation d'AWS IoT Analytics?dans leAWS IoT AnalyticsGuide de l'utilisateur.

DansAWS IoT GreengrassSDK Core, vos fonctions Lambda utilisent leIoTAnalyticsConfigpour définir la configuration d'exportation pour ce type de destination. Pour plus d'informations, consultez la référence SDK de votre langue cible :

Prérequis

Cette destination d'exportation possède les critères suivants :

  • Canaux cibles dansAWS IoT Analyticsdoivent se trouver dans la mêmeCompte AWSetRégion AWScomme le groupe Greengrass.

  • LeRôle de groupe Greengrassdoit permettre à laiotanalytics:BatchPutMessageautorisation de cibler les chaînes. Par exemple :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iotanalytics:BatchPutMessage" ], "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources, par exemple, en utilisant un caractère générique*méthode de dénomination. Pour de plus amples informations, veuillez consulterAjout et suppression de politiques IAMdans leIAM User Guide.

Exportation vers AWS IoT Analytics

Pour créer un flux qui exporte versAWS IoT Analytics, vos fonctions LambdaCréer un fluxavec une définition d'exportation comprenant une ou plusieursIoTAnalyticsConfigobjets. Cet objet définit les paramètres d'exportation, tels que le canal cible, la taille du lot, l'intervalle de lot et la priorité.

Lorsque vos fonctions Lambda reçoivent des données provenant d'appareils, ellesAjouter des messagesqui contiennent un blob de données vers le flux cible.

Le gestionnaire de flux exporte ensuite les données en fonction des paramètres de lot et de la priorité définis dans les configurations d'exportation du flux.

 

Amazon Kinesis Data Streams

Le gestionnaire de flux prend en charge les exportations automatiques vers Amazon Kinesis Data Streams. Kinesis Data Streams est couramment utilisé pour agréger des données à volume élevé et les charger dans un entrepôt de données ou un cluster de réduction de mappe. Pour de plus amples informations, veuillez consulterQu'est-ce qu'Amazon Kinesis Data Streams ?dans leManuel du développeur Amazon Kinesis.

DansAWS IoT GreengrassSDK Core, vos fonctions Lambda utilisent leKinesisConfigpour définir la configuration d'exportation pour ce type de destination. Pour plus d'informations, consultez la référence SDK de votre langue cible :

Prérequis

Cette destination d'exportation possède les critères suivants :

  • Les flux cibles dans Kinesis Data Streams doivent se trouver dans le mêmeCompte AWSetRégion AWScomme le groupe Greengrass.

  • LeRôle de groupe Greengrassdoit permettre à lakinesis:PutRecordsautorisation de cibler les flux de données. Par exemple :

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

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources, par exemple, en utilisant un caractère générique*méthode de dénomination. Pour de plus amples informations, veuillez consulterAjout et suppression de politiques IAMdans leIAM User Guide.

Exporter vers Kinesis Data Streams

Pour créer un flux qui exporte vers Kinesis Data Streams, votre Lambda fonctionneCréer un fluxavec une définition d'exportation comprenant une ou plusieursKinesisConfigobjets. Cet objet définit les paramètres d'exportation, tels que le flux de données cible, la taille du lot, l'intervalle de lot et la priorité.

Lorsque vos fonctions Lambda reçoivent des données provenant d'appareils, ellesAjouter des messagesqui contiennent un blob de données vers le flux cible. Le gestionnaire de flux exporte ensuite les données en fonction des paramètres de lot et de la priorité définis dans les configurations d'exportation du flux.

Stream Manager génère un UUID aléatoire unique en tant que clé de partition pour chaque enregistrement téléchargé sur Amazon Kinesis.

 

AWS IoT SiteWisepropriétés des ressources

Stream Manager prend en charge les exportations automatiques versAWS IoT SiteWise.AWS IoT SiteWisevous permet de collecter, d'organiser et d'analyser à grande échelle les données provenant d'équipements industriels. Pour de plus amples informations, veuillez consulterPrésentation d'AWS IoT SiteWise?dans leAWS IoT SiteWiseGuide de l'utilisateur.

DansAWS IoT GreengrassSDK Core, vos fonctions Lambda utilisent leIoTSiteWiseConfigpour définir la configuration d'exportation pour ce type de destination. Pour plus d'informations, consultez la référence SDK de votre langue cible :

Note

AWSfournit également le SiteWise Connecteur IoT, une solution prédéfinie que vous pouvez utiliser avec des sources OPC-UA.

Prérequis

Cette destination d'exportation possède les critères suivants :

  • Propriétés des ressources cibles dansAWS IoT SiteWisedoivent se trouver dans la mêmeCompte AWSetRégion AWScomme le groupe Greengrass.

    Note

    Pour obtenir la liste des régions quiAWS IoT SiteWisesupports, voirAWS IoT SiteWisePoints de terminaison et quotasdans leAWSRéférence générale.

  • LeRôle de groupe Greengrassdoit permettre à laiotsitewise:BatchPutAssetPropertyValueautorisation de cibler les propriétés des ressources. L'exemple de stratégie suivant utilise leiotsitewise:assetHierarchyPathafin d'octroyer l'accès à une ressource racine cible et à ses enfants. Vous pouvez supprimer l'optionConditiondepuis la stratégie pour permettre l'accès à tous vosAWS IoT SiteWiseou spécifiez les ARN des actifs individuels.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*", "Condition": { "StringLike": { "iotsitewise:assetHierarchyPath": [ "/root node asset ID", "/root node asset ID/*" ] } } } ] }

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources, par exemple, en utilisant un caractère générique*méthode de dénomination. Pour de plus amples informations, veuillez consulterAjout et suppression de politiques IAMdans leIAM User Guide.

    Pour plus d'informations importantes sur la sécurité, consultez BatchPutAssetPropertyValue autorisationdans leAWS IoT SiteWiseGuide de l'utilisateur.

Exportation vers AWS IoT SiteWise

Pour créer un flux qui exporte versAWS IoT SiteWise, vos fonctions LambdaCréer un fluxavec une définition d'exportation comprenant une ou plusieursIoTSiteWiseConfigobjets. Cet objet définit les paramètres d'exportation, tels que la taille du lot, l'intervalle de lot et la priorité.

Lorsque vos fonctions Lambda reçoivent des données de propriété de ressources provenant d'appareils, elles ajoutent des messages contenant les données au flux cible. Les messages sont sérialisés en JSONPutAssetPropertyValueEntryobjets contenant des valeurs de propriétés pour une ou plusieurs propriétés d'actifs. Pour de plus amples informations, veuillez consulterAjouter un messagepourAWS IoT SiteWisedestinations d'exportation.

Note

Lorsque vous envoyez des données àAWS IoT SiteWise, vos données doivent répondre aux exigences de laBatchPutAssetPropertyValueaction. Pour de plus amples informations, veuillez consulter BatchPutasSetPropertyValue dans la référence de l'API AWS IoT SiteWise.

Le gestionnaire de flux exporte ensuite les données en fonction des paramètres de lot et de la priorité définis dans les configurations d'exportation du flux.

 

Vous pouvez ajuster les paramètres de votre gestionnaire de flux et la logique des fonctions Lambda pour concevoir votre stratégie d'exportation. Par exemple :

  • Pour les exportations quasi en temps réel, définissez des paramètres de taille de lot et d'intervalle faibles et ajoutez les données au flux lors de leur réception.

  • Pour optimiser le traitement par lots, atténuer les contraintes de bande passante ou réduire les coûts, vos fonctions Lambda peuvent regrouper les timestamp-quality-value (TQV) reçus pour une propriété d'actif unique avant d'ajouter les données au flux. Une stratégie consiste à regrouper des entrées pour un maximum de 10 combinaisons de propriétés et d'actifs différents, ou alias de propriété, dans un message au lieu d'envoyer plusieurs entrées pour la même propriété. Cela permet au gestionnaire de flux de rester dansAWS IoT SiteWisequotas.

 

Objets Amazon S3

Le gestionnaire de flux prend en charge les exportations automatiques vers Amazon S3. Vous pouvez utiliser Amazon S3 pour stocker et récupérer de grandes quantités de données. Pour de plus amples informations, veuillez consulterQu'est-ce qu'Amazon S3 ?dans leManuel du développeur Amazon Simple Storage Service.

DansAWS IoT GreengrassSDK Core, vos fonctions Lambda utilisent leS3ExportTaskExecutorConfigpour définir la configuration d'exportation pour ce type de destination. Pour plus d'informations, consultez la référence SDK de votre langue cible :

Prérequis

Cette destination d'exportation possède les critères suivants :

  • Les compartiments Amazon S3 ciblés doivent se trouver dans le même compartimentCompte AWScomme le groupe Greengrass.

  • Si l'icôneconteneurisation par défautpour le groupe Greengrass estConteneur Greengrass, vous devez définir le paramètreSTREAM_MANAGER_READ_ONLY_DIRSpour utiliser un répertoire de fichiers d'entrée situé sous/tmpou n'est pas sur le système de fichiers racine.

  • Si une fonction Lambda s'exécute dansConteneur Greengrassmode écrit les fichiers d'entrée dans le répertoire du fichier d'entrée, vous devez créer une ressource de volume local pour le répertoire et monter le répertoire dans le conteneur avec des autorisations d'écriture. Cela garantit que les fichiers sont écrits dans le système de fichiers racine et visibles en dehors du conteneur. Pour plus d'informations, consultez Accédez à des ressources locales avec des fonctions et des connecteurs Lambda.

  • LeRôle de groupe Greengrassdoit autoriser les autorisations suivantes sur les compartiments cibles. Par exemple :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::bucket-1-name/*", "arn:aws:s3:::bucket-2-name/*" ] } ] }

    Vous pouvez octroyer un accès précis ou conditionnel aux ressources, par exemple, en utilisant un caractère générique*méthode de dénomination. Pour de plus amples informations, veuillez consulterAjout et suppression de politiques IAMdans leIAM User Guide.

Exporter vers Amazon S3

Pour créer un flux qui exporte vers Amazon S3, vos fonctions Lambda utilisent leS3ExportTaskExecutorConfigpour configurer la stratégie d'exportation. La stratégie définit les paramètres d'exportation, tels que le seuil de chargement partitionné et la priorité. Pour les exportations Amazon S3, Stream Manager télécharge les données qu'il lit à partir de fichiers locaux sur le périphérique principal. Pour lancer un chargement, vos fonctions Lambda ajoutent une tâche d'exportation au flux cible. La tâche d'exportation contient des informations sur le fichier d'entrée et l'objet Amazon S3 cible. Le gestionnaire de flux exécute les tâches dans la séquence dans laquelle elles sont ajoutées au flux.

Note

Le compartiment cible doit déjà exister dans votreCompte AWS. Si un objet pour la clé spécifiée n'existe pas, le gestionnaire de flux crée l'objet pour vous.

Ce flux de travail de haut niveau est illustré dans le diagramme suivant.

Diagramme du flux de travail du gestionnaire de flux de travail pour les exportations Amazon S3.

Le gestionnaire de flux utilise la propriété seuil de chargement partitionné,Taille de partie minimumet la taille du fichier d'entrée pour déterminer comment charger les données. Le seuil de téléchargement partitionné doit être supérieur ou égal à la taille d'article minimale. Si vous souhaitez télécharger des données en parallel, vous pouvez créer plusieurs flux.

Les clés qui spécifient vos objets Amazon S3 cibles peuvent inclure des clés validesDateTimeFormatter datetimeJavachaînes dans!{timestamp:value}espaces réservés. Vous pouvez utiliser ces espaces réservés à l'horodatage pour partitionner les données dans Amazon S3 en fonction de l'heure à laquelle les données du fichier d'entrée ont été téléchargées. Par exemple, le nom de clé suivant se résout en une valeur telle quemy-key/2020/12/31/data.txt.

my-key/!{timestamp:YYYY}/!{timestamp:MM}/!{timestamp:dd}/data.txt
Note

Si vous souhaitez surveiller l'état d'exportation d'un flux, commencez par créer un flux d'état, puis configurez le flux d'exportation pour l'utiliser. Pour plus d'informations, consultez Surveillance des tâches d'exportation.

Gérer les données d'entrée

Vous pouvez créer du code utilisé par les applications IoT pour gérer le cycle de vie des données d'entrée. L'exemple de flux de travail suivant montre comment utiliser les fonctions Lambda pour gérer ces données.

  1. Un processus local reçoit des données provenant de périphériques ou de périphériques, puis les écrit dans des fichiers situés dans un répertoire sur le périphérique principal. Il s'agit des fichiers d'entrée du gestionnaire de flux.

    Note

    Pour déterminer si vous devez configurer l'accès au répertoire des fichiers d'entrée, consultez leSTREAM_MANAGER_READ_ONLY_DIRS  Paramètre .

    Le processus dans lequel le gestionnaire de flux exécute hérite de toutes les autorisations de système de fichiers duidentité d'accès par défautpour le groupe. Le gestionnaire de flux doit avoir l'autorisation d'accéder aux fichiers d'entrée. Vous pouvez utiliser le pluginchmod(1)pour modifier l'autorisation des fichiers, si nécessaire.

  2. Une fonction Lambda analyse le répertoire etajoute une tâche d'exportationvers le flux cible lorsqu'un nouveau fichier est créé. La tâche est sérialisée par JSONS3ExportTaskDefinitionqui spécifie l'URL du fichier d'entrée, le compartiment et la clé Amazon S3 cible, ainsi que les métadonnées utilisateur facultatives.

  3. Le gestionnaire de flux lit le fichier d'entrée et exporte les données vers Amazon S3 dans l'ordre des tâches ajoutées. Le compartiment cible doit déjà exister dans votreCompte AWS. Si un objet pour la clé spécifiée n'existe pas, le gestionnaire de flux crée l'objet pour vous.

  4. La fonction Lambdalit des messagesà partir d'un flux d'état pour surveiller l'état de l'exportation. Une fois les tâches d'exportation terminées, la fonction Lambda peut supprimer les fichiers d'entrée correspondants. Pour plus d'informations, consultez Surveillance des tâches d'exportation.

Surveillance des tâches d'exportation

Vous pouvez créer du code que les applications IoT utilisent pour surveiller l'état de vos exportations Amazon S3. Vos fonctions Lambda doivent créer un flux d'état, puis configurer le flux d'exportation pour écrire des mises à jour d'état dans le flux d'état. Un flux d'état unique peut recevoir des mises à jour de statut provenant de plusieurs flux exportés vers Amazon S3.

Premiers,Créer un fluxà utiliser comme flux d'état. Vous pouvez configurer les stratégies de taille et de rétention du flux afin de contrôler la durée de vie des messages d'état. Par exemple :

  • DéfinirPersistencepourMemorysi vous ne voulez pas stocker les messages d'état.

  • DéfinirStrategyOnFullpourOverwriteOldestDataafin que les nouveaux messages d'état ne soient pas perdus.

Ensuite, créez ou mettez à jour le flux d'exportation pour utiliser le flux d'état. Spécifiquement, définissez la propriété de configuration d'état du fluxS3ExportTaskExecutorConfigconfiguration d'exportation. Cela indique au gestionnaire de flux d'écrire des messages d'état concernant les tâches d'exportation vers le flux d'état. DansStatusConfig, spécifiez le nom du flux d'état et le niveau de verbosité. Les valeurs prises en charge suivantes vont des valeurs les moins détaillées (ERROR) au plus verbeux (TRACE). La valeur par défaut est INFO.

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

 

L'exemple de flux de travail suivant montre comment les fonctions Lambda peuvent utiliser un flux d'état pour surveiller l'état de l'exportation.

  1. Comme décrit dans le flux de travail précédent, une fonction Lambdaajoute une tâche d'exportationvers un flux configuré pour écrire des messages d'état concernant les tâches d'exportation vers un flux d'état. L'opération d'ajout renvoie un numéro de séquence qui représente l'ID de la tâche.

  2. Une fonction Lambdalit des messagesde manière séquentielle à partir du flux d'état, puis filtre les messages en fonction du nom du flux et de l'ID de tâche ou en fonction d'une propriété de tâche d'exportation à partir du contexte de message. Par exemple, la fonction Lambda peut filtrer en fonction de l'URL du fichier d'entrée de la tâche d'exportation, qui est représentée par leS3ExportTaskDefinitionobjet dans le contexte du message.

    Les codes d'état suivants indiquent qu'une tâche d'exportation a atteint son état terminé :

    • Success. Le téléchargement s'est terminé avec succès.

    • Failure. Le gestionnaire de flux a rencontré une erreur, par exemple, le compartiment spécifié n'existe pas. Une fois le problème résolu, vous pouvez ajouter à nouveau la tâche d'exportation au flux.

    • Canceled. La tâche a été abandonnée parce que la définition du flux ou de l'exportation a été supprimée, ou le time-to-live (TTL) de la tâche a expiré.

    Note

    La tâche peut également avoir le statut deInProgressouWarning. Le gestionnaire de flux émet des avertissements lorsqu'un événement renvoie une erreur qui n'affecte pas l'exécution de la tâche. Par exemple, l'échec du nettoyage d'un chargement partiel interrompu renvoie un avertissement.

  3. Une fois les tâches d'exportation terminées, la fonction Lambda peut supprimer les fichiers d'entrée correspondants.

L'exemple suivant montre comment une fonction Lambda peut lire et traiter les messages d'état.

Python
import time from greengrasssdk.stream_manager import ( ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, StreamManagerClient, ) from greengrasssdk.stream_manager.util import Util client = StreamManagerClient() try: # Read the statuses from the export status stream is_file_uploaded_to_s3 = False while not is_file_uploaded_to_s3: try: messages_list = client.read_messages( "StatusStreamName", ReadMessagesOptions(min_message_count=1, read_timeout_millis=1000) ) for message in messages_list: # Deserialize the status message first. status_message = Util.deserialize_json_bytes_to_obj(message.payload, StatusMessage) # Check the status of the status message. If the status is "Success", # the file was successfully uploaded to S3. # If the status was either "Failure" or "Cancelled", the server was unable to upload the file to S3. # We will print the message for why the upload to S3 failed from the status message. # If the status was "InProgress", the status indicates that the server has started uploading # the S3 task. if status_message.status == Status.Success: logger.info("Successfully uploaded file at path " + file_url + " to S3.") is_file_uploaded_to_s3 = True elif status_message.status == Status.Failure or status_message.status == Status.Canceled: logger.info( "Unable to upload file at path " + file_url + " to S3. Message: " + status_message.message ) is_file_uploaded_to_s3 = True time.sleep(5) except StreamManagerException: logger.exception("Exception while running") except StreamManagerException: pass # Properly handle errors. except ConnectionError or asyncio.TimeoutError: pass # Properly handle errors.

Référence du kit SDK Python :read_messages|StatusMessage

Java
import com.amazonaws.greengrass.streammanager.client.StreamManagerClient; import com.amazonaws.greengrass.streammanager.client.utils.ValidateAndSerialize; import com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions; import com.amazonaws.greengrass.streammanager.model.Status; import com.amazonaws.greengrass.streammanager.model.StatusConfig; import com.amazonaws.greengrass.streammanager.model.StatusLevel; import com.amazonaws.greengrass.streammanager.model.StatusMessage; try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) { try { boolean isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream List<Message> messages = client.readMessages("StatusStreamName", new ReadMessagesOptions().withMinMessageCount(1L).withReadTimeoutMillis(1000L)); for (Message message : messages) { // Deserialize the status message first. StatusMessage statusMessage = ValidateAndSerialize.deserializeJsonBytesToObj(message.getPayload(), StatusMessage.class); // Check the status of the status message. If the status is "Success", the file was successfully uploaded to S3. // If the status was either "Failure" or "Canceled", the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (Status.Success.equals(statusMessage.getStatus())) { System.out.println("Successfully uploaded file at path " + FILE_URL + " to S3."); isS3UploadComplete = true; } else if (Status.Failure.equals(statusMessage.getStatus()) || Status.Canceled.equals(statusMessage.getStatus())) { System.out.println(String.format("Unable to upload file at path %s to S3. Message %s", statusMessage.getStatusContext().getS3ExportTaskDefinition().getInputUrl(), statusMessage.getMessage())); sS3UploadComplete = true; } } } catch (StreamManagerException ignored) { } finally { // Sleep for sometime for the S3 upload task to complete before trying to read the status message. Thread.sleep(5000); } } catch (e) { // Properly handle errors. } } catch (StreamManagerException e) { // Properly handle exception. }

Référence du kit SDK Java :readMessages|StatusMessage

Node.js
const { StreamManagerClient, ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, util, } = require('aws-greengrass-core-sdk').StreamManager; const client = new StreamManagerClient(); client.onConnected(async () => { try { let isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream const messages = await c.readMessages("StatusStreamName", new ReadMessagesOptions() .withMinMessageCount(1) .withReadTimeoutMillis(1000)); messages.forEach((message) => { // Deserialize the status message first. const statusMessage = util.deserializeJsonBytesToObj(message.payload, StatusMessage); // Check the status of the status message. If the status is 'Success', the file was successfully uploaded to S3. // If the status was either 'Failure' or 'Cancelled', the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (statusMessage.status === Status.Success) { console.log(`Successfully uploaded file at path ${FILE_URL} to S3.`); isS3UploadComplete = true; } else if (statusMessage.status === Status.Failure || statusMessage.status === Status.Canceled) { console.log(`Unable to upload file at path ${FILE_URL} to S3. Message: ${statusMessage.message}`); isS3UploadComplete = true; } }); // Sleep for sometime for the S3 upload task to complete before trying to read the status message. await new Promise((r) => setTimeout(r, 5000)); } catch (e) { // Ignored } } catch (e) { // Properly handle errors. } }); client.onError((err) => { // Properly handle connection errors. // This is called only when the connection to the StreamManager server fails. });

Référence du kit SDK Node.js :readMessages|StatusMessage