Exportieren von Konfigurationen für unterstützteAWS CloudDestinationen - AWS IoT Greengrass

AWS IoT Greengrass Version 1 hat am 30. Juni 2023 in die Phase der verlängerten Lebensdauer aufgenommen. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie . Nach diesem Datum AWS IoT Greengrass V1 wurden keine Updates veröffentlicht, die Funktionen, Verbesserungen, Fehlerbehebungen oder Sicherheitspatches bereitstellen. Geräte, die auf ausgeführt AWS IoT Greengrass V1 werden, werden nicht unterbrochen und werden weiterhin betrieben und eine Verbindung zur Cloud herstellen. Wir empfehlen dringend, zu zu migrieren AWS IoT Greengrass Version 2, was erhebliche neue Funktionen und Unterstützung für zusätzliche Plattformen hinzufügt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Exportieren von Konfigurationen für unterstützteAWS CloudDestinationen

Benutzerdefinierte Lambda-Funktionen verwendenStreamManagerClientimAWS IoT GreengrassCore-SDK zur Interaktion mit dem Stream-Manager. Wenn eine Lambda-Funktionerstellt einen Streamoderaktualisiert einen Stream, es passiert einMessageStreamDefinition-Objekt, das Stream-Eigenschaften darstellt, einschließlich der Exportdefinition. DieExportDefinitionobject enthält die Exportkonfigurationen, die für den Stream definiert sind. Stream Manager verwendet diese Exportkonfigurationen, um zu bestimmen, wo und wie der Stream exportiert werden soll.


            Objektmodelldiagramm des ExportDefinition Eigenschaftstyp.

Sie können null oder mehr Exportkonfigurationen in einem Stream definieren, einschließlich mehrerer Exportkonfigurationen für einen einzelnen Zieltyp. Sie können beispielsweise einen Stream in zwei exportierenAWS IoT Analytics-Kanäle und ein Kinesis-Data-Stream.

Bei fehlgeschlagenen Exportversuchen versucht der Stream-Manager kontinuierlich, Daten in dieAWS Cloudin Intervallen von bis zu fünf Minuten. Die Anzahl der Wiederholungsversuche hat kein maximales Limit.

Anmerkung

StreamManagerClientBietet auch ein Zielziel, mit dem Sie Streams auf einen HTTP-Server exportieren können. Dieses Ziel dient nur zu Testzwecken. Es ist nicht stabil oder wird nicht für die Verwendung in Produktionsumgebungen unterstützt.

Sie sind dafür verantwortlich, diese beizubehaltenAWS CloudRessourcen schätzen.

AWS IoT Analytics-Kanäle

Stream Manager unterstützt automatische Exporte nachAWS IoT Analyticsaus.AWS IoT Analyticsermöglicht es Ihnen, erweiterte Analysen Ihrer Daten durchzuführen, um Geschäftsentscheidungen zu treffen und Modelle für maschinelles Lernen zu verbessern. Weitere Informationen finden Sie unterWas ist ?AWS IoT Analytics?imAWS IoT Analytics-Benutzerhandbuchaus.

In derAWS IoT GreengrassCore SDK, Ihre Lambda-Funktionen nutzen dasIoTAnalyticsConfigum die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Dieses Exportziel hat die folgenden Anforderungen:

  • Zielkanäle inAWS IoT Analyticsin derselbenAWS-KontoundAWS-Regionals Greengrass-Gruppe.

  • DieGreengrass-Gruppenrolle.muss das erlaubeniotanalytics:BatchPutMessageBerechtigung zum Zielen von Kanälen. Zum Beispiel:

    { "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" ] } ] }

    Sie können granularen oder bedingten Zugriff gewähren, etwa mit einem Platzhaltern*Benennungsschema. Weitere Informationen finden Sie unterHinzufügen und Entfernen von IAM-RichtlinienimIAM User Guideaus.

Exportieren in AWS IoT Analytics

So erstellen Sie einen Stream, der nachAWS IoT Analytics, Ihre Lambda-FunktionenErstellen eines -Streamsmit einer Exportdefinition, die eine oder mehrere enthältIoTAnalyticsConfig-Objekte. Dieses Objekt definiert Exporteinstellungen wie den Zielkanal, die Stapelgröße, das Stapelintervall und die Priorität.

Wenn Ihre Lambda-Funktionen Daten von Geräten empfangen, werden sieAnhängen von Nachrichtendie einen Datenblob zum Zielstream enthalten.

Dann exportiert der Stream Manager die Daten basierend auf den Batch-Einstellungen und der Priorität, die in den Exportkonfigurationen des Streams definiert sind.

 

Amazon Kinesis Kinesis-Datenströme

Der Stream-Manager unterstützt automatische Exporte zu Amazon Kinesis Data Streams. Kinesis Data Streams wird häufig verwendet, um Daten mit hohem Volumen zu aggregieren und in ein Data Warehouse oder einen Map-Reduce-Cluster zu laden. Weitere Informationen finden Sie unterWas ist Amazon Kinesis Data Streams?imAmazon Kinesis Developer Guideaus.

In derAWS IoT GreengrassCore SDK, Ihre Lambda-Funktionen nutzen dasKinesisConfigum die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Dieses Exportziel hat die folgenden Anforderungen:

  • Zielstreams in Kinesis Data Streams müssen im selben seinAWS-KontoundAWS-Regionals Greengrass-Gruppe.

  • DieGreengrass-Gruppenrolle.muss das erlaubenkinesis:PutRecordsBerechtigung zum Zielen von Datenströmen. Zum Beispiel:

    { "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" ] } ] }

    Sie können granularen oder bedingten Zugriff auf Ressourcen gewähren, etwa mit einem Platzhaltern*Benennungsschema. Weitere Informationen finden Sie unterHinzufügen und Entfernen von IAM-RichtlinienimIAM User Guideaus.

Exportieren in Kinesis Data Streams

Um einen Stream zu erstellen, der in Kinesis Data Streams exportiert, funktioniert Ihr Lambda-FunktionenErstellen eines -Streamsmit einer Exportdefinition, die eine oder mehrere enthältKinesisConfig-Objekte. Dieses Objekt definiert Exporteinstellungen wie den Zieldatenstrom, die Stapelgröße, das Stapelintervall und die Priorität.

Wenn Ihre Lambda-Funktionen Daten von Geräten empfangen, werden sieAnhängen von Nachrichtendie einen Datenblob zum Zielstream enthalten. Dann exportiert der Stream Manager die Daten basierend auf den Batch-Einstellungen und der Priorität, die in den Exportkonfigurationen des Streams definiert sind.

Der Stream-Manager generiert eine eindeutige, zufällige UUID als Partitionsschlüssel für jeden auf Amazon Kinesis hochgeladenen Datensatz.

 

AWS IoT SiteWiseKomponenteneigenschaften

Stream Manager unterstützt automatische Exporte nachAWS IoT SiteWiseaus.AWS IoT SiteWiseMit können Sie Daten von Industrieanlagen skalierbar sammeln, organisieren und analysieren. Weitere Informationen finden Sie unterWas ist ?AWS IoT SiteWise?imAWS IoT SiteWise-Benutzerhandbuchaus.

In derAWS IoT GreengrassCore SDK, Ihre Lambda-Funktionen nutzen dasIoTSiteWiseConfigum die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Anmerkung

AWSbietet auchIoT SiteWise -Konnektor, eine vorgefertigte Lösung, die Sie mit OPC-UA-Quellen verwenden können.

Voraussetzungen

Dieses Exportziel hat die folgenden Anforderungen:

  • Zielobjekte inAWS IoT SiteWisein derselbenAWS-KontoundAWS-Regionals Greengrass-Gruppe.

    Anmerkung

    Eine Liste der Regionen, dieAWS IoT SiteWiseunterstützt, sieheAWS IoT SiteWise-Endpunkte und -KontingenteimAWS– Allgemeine Referenzaus.

  • DieGreengrass-Gruppenrolle.muss das erlaubeniotsitewise:BatchPutAssetPropertyValueBerechtigung zur Ausrichtung von Asset-Eigenschaften. Die folgende Beispielrichtlinie verwendetiotsitewise:assetHierarchyPathBedingungsschlüssel zum Gewähren von Zugriff auf ein Ziel-Root-Asset und seine untergeordneten Elemente Sie können dasConditionVon der Richtlinie aus, um Zugriff auf alle Ihre zu ermöglichenAWS IoT SiteWiseVermögenswerte oder geben Sie ARNs einzelner Vermögenswerte an.

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

    Sie können granularen oder bedingten Zugriff gewähren, etwa mit einem Platzhaltern*Benennungsschema. Weitere Informationen finden Sie unterHinzufügen und Entfernen von IAM-RichtlinienimIAM User Guideaus.

    Wichtige Sicherheitsinformationen finden Sie unter BatchPutAssetPropertyValue AutorisierungimAWS IoT SiteWise-Benutzerhandbuchaus.

Exportieren in AWS IoT SiteWise

So erstellen Sie einen Stream, der nachAWS IoT SiteWise, Ihre Lambda-FunktionenErstellen eines -Streamsmit einer Exportdefinition, die eine oder mehrere enthältIoTSiteWiseConfig-Objekte. Dieses Objekt definiert Exporteinstellungen wie Stapelgröße, Stapelintervall und Priorität.

Wenn Ihre Lambda-Funktionen Asset-Eigenschaftsdaten von Geräten erhalten, hängen sie Nachrichten an, die die Daten enthalten, an den Zielstream an. Nachrichten werden JSON-serialisiertPutAssetPropertyValueEntry-Objekte, die Eigenschaftswerte für eine oder mehrere Asset-Eigenschaften enthalten. Weitere Informationen finden Sie unterAnhängen einer NachrichtzumAWS IoT SiteWiseExportieren von -Zielen

Anmerkung

Wenn Sie Daten anAWS IoT SiteWise, müssen Ihre Daten die Anforderungen desBatchPutAssetPropertyValueAktion Weitere Informationen finden Sie unter BatchPutAssetPropertyValue in der AWS IoT SiteWise-API-Referenz.

Dann exportiert der Stream Manager die Daten basierend auf den Batch-Einstellungen und der Priorität, die in den Exportkonfigurationen des Streams definiert sind.

 

Sie können Ihre Stream-Manager-Einstellungen und die Lambda-Funktionslogik anpassen, um Ihre Exportstrategie zu entwerfen. Zum Beispiel:

  • Legen Sie für nahezu Echtzeit-Exporte die Einstellungen für niedrige Chargengröße und Intervall fest und hängen Sie die Daten an den Stream an, wenn sie empfangen werden.

  • Um das Batching zu optimieren, Bandbreitenbeschränkungen zu mindern oder Kosten zu minimieren, können Ihre Lambda-Funktionen timestamp-quality-value (TQV) Datenpunkte, die für eine einzelne Asset-Eigenschaft empfangen wurden, bevor die Daten an den Stream angehängt werden. Eine Strategie besteht darin, Einträge für bis zu 10 verschiedene Eigenschaft-Asset-Kombinationen oder Eigenschaftsaliase in einer Nachricht zu stapeln, anstatt mehr als einen Eintrag für dieselbe Eigenschaft zu senden. Dies hilft dem Stream-Manager, innerhalb zu bleibenAWS IoT SiteWiseQuotenaus.

 

Amazon S3 S3-Objekte

Der Stream-Manager unterstützt automatische Exporte nach Amazon S3. Mit Amazon S3 können Sie große Datenmengen speichern und abrufen. Weitere Informationen finden Sie unterWas ist Amazon S3?imAmazon Simple Storage Service – Entwicklerhandbuchaus.

In derAWS IoT GreengrassCore SDK, Ihre Lambda-Funktionen nutzen dasS3ExportTaskExecutorConfigum die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Dieses Exportziel hat die folgenden Anforderungen:

  • Amazon S3 S3-Zielbuckets müssen im selben seinAWS-Kontoals Greengrass-Gruppe.

  • Wenn das SymbolStandardcontainerisierungFür die Greengrass-Gruppe istGreengrass-Containereinstellen, müssen SieSTREAM_MANAGER_READ_ONLY_DIRSParameter zur Verwendung eines Eingabedateiverzeichnisses unter/tmpoder befindet sich nicht im Root-Dateisystem.

  • Wenn eine Lambda-Funktion in läuftGreengrass-Containermode schreibt Eingabedateien in das Eingabedateiverzeichnis, Sie müssen eine lokale Volume-Ressource für das Verzeichnis erstellen und das Verzeichnis mit Schreibberechtigungen in den Container einhängen. Dies stellt sicher, dass die Dateien in das Root-Dateisystem geschrieben und außerhalb des Containers sichtbar sind. Weitere Informationen finden Sie unter Greifen Sie mit Lambda-Funktionen und -Konnektoren auf lokale Ressourcen zu.

  • DieGreengrass-Gruppenrolle.muss die folgenden Berechtigungen für die Ziel-Buckets zulassen. Zum Beispiel:

    { "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/*" ] } ] }

    Sie können granularen oder bedingten Zugriff gewähren, etwa mit einem Platzhaltern*Benennungsschema. Weitere Informationen finden Sie unterHinzufügen und Entfernen von IAM-RichtlinienimIAM User Guideaus.

Exportieren nach Amazon S3

Um einen Stream zu erstellen, der nach Amazon S3 exportiert, verwenden Ihre Lambda-Funktionen dieS3ExportTaskExecutorConfig-Objekt, um die Exportrichtlinie zu konfigurieren. Die Richtlinie definiert Exporteinstellungen wie den Schwellenwert für den mehrteiligen Upload und die Priorität. Bei Amazon S3 S3-Exporten lädt der Stream Manager Daten hoch, die er aus lokalen Dateien auf dem Kerngerät liest. Um einen Upload zu initiieren, hängen Ihre Lambda-Funktionen eine Exportaufgabe an den Zielstream an. Die Exportaufgabe enthält Informationen über die Eingabedatei und das Zielobjekt von Amazon S3. Der Stream-Manager führt Aufgaben in der Reihenfolge aus, in der sie an den Stream angehängt werden.

Anmerkung

Der Ziel-Bucket muss in Ihrem bereits vorhanden seinAWS-Kontoaus. Wenn ein Objekt für den angegebenen Schlüssel nicht vorhanden ist, erstellt der Stream-Manager das Objekt für Sie.

Dieser Workflow auf hoher Ebene ist im folgenden Diagramm dargestellt.


                    Diagramm des Stream-Manager-Workflows für Amazon S3 S3-Exporte.

Der Stream-Manager verwendet die Eigenschaft Multipart-Upload-Schwellenwert,Minimale TeilegrößeEinstellung und Größe der Eingabedatei, um zu bestimmen, wie Daten hochgeladen werden sollen. Der Mehrpart-Upload-Schwellenwert muss größer oder gleich der minimalen Teilegröße sein. Wenn Sie Daten parallel hochladen möchten, können Sie mehrere Streams erstellen.

Die Schlüssel, die Ihre Amazon S3 S3-Zielobjekte angeben, können gültig enthaltenJava DateTimeFormatterStrings in!{timestamp:value}Platzhalter. Sie können diese Zeitstempel-Platzhalter verwenden, um Daten in Amazon S3 basierend auf dem Zeitpunkt zu partitionieren, zu dem die Eingabedateidaten hochgeladen wurden. Der folgende Schlüsselname wird beispielsweise in einen Wert wiemy-key/2020/12/31/data.txtaus.

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

Wenn Sie den Exportstatus für einen Stream überwachen möchten, erstellen Sie zuerst einen Statusstream und konfigurieren Sie dann den Exportstream, um ihn zu verwenden. Weitere Informationen finden Sie unter Überwachen von Exportaufgaben.

Verwalten von Eingabedaten

Sie können Code erstellen, den IoT-Anwendungen verwenden, um den Lebenszyklus der Eingabedaten zu verwalten. Der folgende Beispielworkflow zeigt, wie Sie Lambda-Funktionen verwenden können, um diese Daten zu verwalten.

  1. Ein lokaler Prozess empfängt Daten von Geräten oder Peripheriegeräten und schreibt die Daten dann in Dateien in einem Verzeichnis auf dem Kerngerät. Dies sind die Eingabedateien für den Stream-Manager.

    Anmerkung

    Um festzustellen, ob Sie den Zugriff auf das Eingabedateiverzeichnis konfigurieren müssen, lesen Sie dieSTREAM_MANAGER_READ_ONLY_DIRS-Parameter.

    Der Vorgang, in dem der Stream-Manager ausgeführt wird, erbt alle Dateisystemberechtigungen desStandardzugriffsidentitätfür die Gruppe. Der Stream-Manager muss zum Zugriff auf die Eingabedateien berechtigt sein. Sie können daschmod(1)-Befehl, um die Berechtigung der Dateien gegebenenfalls zu ändern.

  2. Eine Lambda-Funktion scannt das Verzeichnis undhängt eine Exportaufgabezum Zielstream, wenn eine neue Datei erstellt wird. Die Aufgabe ist ein JSON-serialisiertesS3ExportTaskDefinition-Objekt, das die URL der Eingabedatei, den Amazon S3 S3-Ziel-Bucket und Schlüssel sowie optionale Benutzermetadaten angibt.

  3. Der Stream-Manager liest die Eingabedatei und exportiert die Daten in der Reihenfolge der angehängten Aufgaben nach Amazon S3. Der Ziel-Bucket muss in Ihrem bereits vorhanden seinAWS-Kontoaus. Wenn ein Objekt für den angegebenen Schlüssel nicht vorhanden ist, erstellt der Stream-Manager das Objekt für Sie.

  4. Die Lambda-Funktionliest Nachrichtenaus einem Statusstream, um den Exportstatus zu überwachen. Nachdem Exportaufgaben abgeschlossen sind, kann die Lambda-Funktion die entsprechenden Eingabedateien löschen. Weitere Informationen finden Sie unter Überwachen von Exportaufgaben.

Überwachen von Exportaufgaben

Sie können Code erstellen, mit dem IoT-Anwendungen den Status Ihrer Amazon S3 S3-Exporte überwachen. Ihre Lambda-Funktionen müssen einen Status-Stream erstellen und dann den Exportstream so konfigurieren, dass Statusaktualisierungen in den Statusstream geschrieben werden. Ein einzelner Statusstream kann Statusaktualisierungen von mehreren Streams erhalten, die nach Amazon S3 exportieren.

Erstens:Erstellen eines -Streamsals Statusstream zu verwenden. Sie können die Größe und Aufbewahrungsrichtlinien für den Stream konfigurieren, um die Lebensdauer der Statusmeldungen zu steuern. Zum Beispiel:

  • Legen Sie fest.PersistencezuMemorywenn Sie die Statusmeldungen nicht speichern möchten.

  • Legen Sie fest.StrategyOnFullzuOverwriteOldestDatadamit neue Statusmeldungen nicht verloren gehen.

Erstellen oder aktualisieren Sie dann den Exportstream, um den Statusstream zu verwenden. Legen Sie insbesondere die Statuskonfigurationseigenschaft des Streams festS3ExportTaskExecutorConfigExportieren der Konfiguration. Dies weist Stream-Manager an, Statusmeldungen über die Exportaufgaben in den Statusstream zu schreiben. In derStatusConfig-Objekt, geben Sie den Namen des Status-Streams und die Ausführlichkeitsstufe an. Die folgenden unterstützten Werte reichen von am wenigsten ausführlich (ERROR) auf ausführlichste (TRACE) enthalten. Der Standardwert ist INFO.

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

 

Der folgende Beispiel-Workflow zeigt, wie Lambda-Funktionen einen Statusstream verwenden können, um den Exportstatus zu überwachen.

  1. Wie im vorherigen Workflow beschrieben, ist eine Lambda-Funktionhängt eine Exportaufgabein einen Stream, der so konfiguriert ist, dass Statusmeldungen über Exportaufgaben in einen Statusstream geschrieben werden. Der Append-Vorgang gibt eine Sequenznummer zurück, die die Aufgaben-ID darstellt.

  2. Eine Lambda-Funktionliest Nachrichtensequenziell aus dem Status-Stream und filtert die Nachrichten dann basierend auf dem Stream-Namen und der Aufgaben-ID oder basierend auf einer Exportaufgabeneigenschaft aus dem Nachrichtenkontext. Beispielsweise kann die Lambda-Funktion nach der Eingabedatei-URL der Exportaufgabe filtern, die durch dieS3ExportTaskDefinition-Objekt im Nachrichtenkontext.

    Die folgenden Statuscodes zeigen an, dass eine Exportaufgabe den Status „Abgeschlossen“ erreicht hat:

    • Successaus. Der Upload wurde erfolgreich abgeschlossen.

    • Failureaus. Der Stream-Manager ist auf einen Fehler gestoßen, z. B. existiert der angegebene Bucket nicht. Nachdem Sie das Problem behoben haben, können Sie die Exportaufgabe erneut an den Stream anhängen.

    • Canceledaus. Die Aufgabe wurde abgebrochen, weil die Stream- oder Exportdefinition gelöscht wurde, oder die time-to-live (TTL) Der Zeitraum der Aufgabe ist abgelaufen.

    Anmerkung

    Die Aufgabe könnte auch den Status von habenInProgressoderWarningaus. Der Stream-Manager gibt Warnungen aus, wenn ein Ereignis einen Fehler zurückgibt, der sich nicht auf die Ausführung der Aufgabe auswirkt. Ein Fehler beim Bereinigen eines abgebrochenen teilweisen Uploads gibt beispielsweise eine Warnung zurück.

  3. Nachdem Exportaufgaben abgeschlossen sind, kann die Lambda-Funktion die entsprechenden Eingabedateien löschen.

Das folgende Beispiel zeigt, wie eine Lambda-Funktion Statusmeldungen lesen und verarbeiten könnte.

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.

Python SDK-Referenz: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. }

Java-SDK-Referenz: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. });

Node.js SDK-Referenz:readMessages|StatusMessage