Exportkonfigurationen für unterstützte AWS Cloud Ziele - AWS IoT Greengrass

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.

Exportkonfigurationen für unterstützte AWS Cloud Ziele

Benutzerdefinierte Greengrass-Komponenten verwenden StreamManagerClient im Stream Manager SDK, um mit dem Stream Manager zu interagieren. Wenn eine Komponente einen Stream erstellt oder einen Stream aktualisiert, übergibt sie ein MessageStreamDefinition Objekt, das Stream-Eigenschaften darstellt, einschließlich der Exportdefinition. Das -ExportDefinitionObjekt enthält die für den Stream definierten Exportkonfigurationen. Stream Manager verwendet diese Exportkonfigurationen, um zu bestimmen, wo und wie der Stream exportiert werden soll.

Objektmodelldiagramm des - ExportDefinition Eigenschaftstyps.

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

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

Anmerkung

StreamManagerClient bietet auch ein Ziel, 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 für die Wartung dieser AWS Cloud Ressourcen verantwortlich.

AWS IoT Analytics-Kanäle

Stream Manager unterstützt automatische Exporte nach AWS IoT Analytics. AWS IoT Analytics ermöglicht Ihnen eine erweiterte Analyse Ihrer Daten, um Geschäftsentscheidungen zu treffen und Machine-Learning-Modelle zu verbessern. Weitere Informationen finden Sie unter Was ist AWS IoT Analytics? im AWS IoT Analytics -Benutzerhandbuch.

Im Stream Manager SDK verwenden Ihre Greengrass-Komponenten die , IoTAnalyticsConfig um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Für dieses Exportziel gelten die folgenden Anforderungen:

  • Zielkanäle in AWS IoT Analytics müssen sich im selben AWS-Konto und in demselben AWS-Region wie das Greengrass-Kerngerät befinden.

  • Der Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS muss der -iotanalytics:BatchPutMessageBerechtigung erlauben, Kanäle anzuvisieren. Beispielsweise:

    { "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 auf -Ressourcen gewähren, z. B. durch die Verwendung eines Platzhalter-*Namensschemas. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien im IAM-Benutzerhandbuch.

Exportieren in AWS IoT Analytics

Um einen Stream zu erstellen, der nach exportiert wirdAWS IoT Analytics, erstellen Ihre Greengrass-Komponenten einen Stream mit einer Exportdefinition, die ein oder mehrere IoTAnalyticsConfig Objekte enthält. Dieses Objekt definiert Exporteinstellungen wie Zielkanal, Batch-Größe, Batch-Intervall und Priorität.

Wenn Ihre Greengrass-Komponenten Daten von Geräten empfangen, hängen sie Nachrichten an, die einen Blob von Daten enthalten, an den Ziel-Stream an.

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

Amazon Kinesis-Datenströme

Stream Manager unterstützt automatische Exporte nach 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 MapReduce Cluster zu laden. Weitere Informationen finden Sie unter Was ist Amazon Kinesis Data Streams? im Amazon Kinesis-Entwicklerhandbuch.

Im Stream Manager SDK verwenden Ihre Greengrass-Komponenten die , KinesisConfig um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Für dieses Exportziel gelten die folgenden Anforderungen:

  • Zielstreams in Kinesis Data Streams müssen sich im selben AWS-Konto und im selben AWS-Region wie das Greengrass-Kerngerät befinden.

  • Der Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS muss der -kinesis:PutRecordsBerechtigung das Ziel von Datenströmen erlauben. Beispielsweise:

    { "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, z. B. durch die Verwendung eines Platzhalter-*Namensschemas. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien im IAM-Benutzerhandbuch.

Exportieren zu Kinesis Data Streams

Um einen Stream zu erstellen, der nach Kinesis Data Streams exportiert wird, erstellen Ihre Greengrass-Komponenten einen Stream mit einer Exportdefinition, die ein oder mehrere KinesisConfig Objekte enthält. Dieses Objekt definiert Exporteinstellungen wie den Zieldatenstrom, die Batchgröße, das Batchintervall und die Priorität.

Wenn Ihre Greengrass-Komponenten Daten von Geräten empfangen, hängen sie Nachrichten an, die einen Blob von Daten enthalten, an den Ziel-Stream an. Anschließend exportiert Stream Manager die Daten basierend auf den Batch-Einstellungen und der Priorität, die in den Exportkonfigurationen des Streams definiert sind.

Stream Manager generiert eine eindeutige, zufällige UUID als Partitionsschlüssel für jeden Datensatz, der in Amazon Kinesis hochgeladen wird.

AWS IoT SiteWise Komponenteneigenschaften

Stream Manager unterstützt automatische Exporte nach AWS IoT SiteWise. AWS IoT SiteWise Mit können Sie Daten von Industrieanlagen erfassen, organisieren und analysieren. Weitere Informationen finden Sie unter Was ist AWS IoT SiteWise? im AWS IoT SiteWise -Benutzerhandbuch.

Im Stream Manager SDK verwenden Ihre Greengrass-Komponenten die , IoTSiteWiseConfig um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Anmerkung

AWS bietet auch AWS IoT SiteWise Komponenten, die eine vorgefertigte Lösung bieten, mit der Sie Daten aus OPC-UA-Quellen streamen können. Weitere Informationen finden Sie unter IoT SiteWise -OPC-UA-Kollektor.

Voraussetzungen

Für dieses Exportziel gelten die folgenden Anforderungen:

  • Die Eigenschaften der Zielkomponente in AWS IoT SiteWise müssen sich in derselben AWS-Konto und demselben AWS-Region wie das Greengrass-Kerngerät befinden.

    Anmerkung

    Eine Liste der AWS-Regionen, die AWS IoT SiteWise unterstützt, finden Sie unter -AWS IoT SiteWiseEndpunkte und -Kontingente in der AWS Allgemeinen Referenz zu .

  • Der Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS muss der -iotsitewise:BatchPutAssetPropertyValueBerechtigung erlauben, auf Komponenteneigenschaften abzuzielen. Die folgende Beispielrichtlinie verwendet den -iotsitewise:assetHierarchyPathBedingungsschlüssel, um Zugriff auf eine Ziel-Root-Komponente und ihre untergeordneten Elemente zu gewähren. Sie können die Condition aus der Richtlinie entfernen, um den Zugriff auf alle Ihre AWS IoT SiteWise Komponenten zu erlauben, oder ARNs einzelner Komponenten angeben.

    { "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 auf -Ressourcen gewähren, z. B. durch die Verwendung eines Platzhalter-*Namensschemas. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien im IAM-Benutzerhandbuch.

    Wichtige Sicherheitsinformationen finden Sie unter - BatchPutAssetPropertyValue Autorisierung im AWS IoT SiteWise -Benutzerhandbuch.

Exportieren in AWS IoT SiteWise

Um einen Stream zu erstellen, der nach exportiert wirdAWS IoT SiteWise, erstellen Ihre Greengrass-Komponenten einen Stream mit einer Exportdefinition, die ein oder mehrere IoTSiteWiseConfig Objekte enthält. Dieses Objekt definiert Exporteinstellungen wie Batchgröße, Batchintervall und Priorität.

Wenn Ihre Greengrass-Komponenten Komponenteneigenschaftsdaten von Geräten erhalten, hängen sie Nachrichten, die die Daten enthalten, an den Ziel-Stream an. Nachrichten sind JSON-serialisierte PutAssetPropertyValueEntry Objekte, die Eigenschaftswerte für eine oder mehrere Komponenteneigenschaften enthalten. Weitere Informationen finden Sie unter Nachricht für AWS IoT SiteWise Exportziele anhängen.

Anmerkung

Wenn Sie Daten an sendenAWS IoT SiteWise, müssen Ihre Daten die Anforderungen der BatchPutAssetPropertyValue Aktion erfüllen. Weitere Informationen finden Sie unter BatchPutAssetPropertyValue in der AWS IoT SiteWise-API-Referenz.

Anschließend exportiert 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 Greengrass-Komponentenlogik anpassen, um Ihre Exportstrategie zu entwerfen. Beispielsweise:

  • Legen Sie für Exporte nahezu in Echtzeit niedrige Batch-Größen- und Intervalleinstellungen fest und fügen Sie die Daten an den Stream an, wenn sie empfangen werden.

  • Um die Stapelverarbeitung zu optimieren, Bandbreitenbeschränkungen zu minimieren oder die Kosten zu minimieren, können Ihre Greengrass-Komponenten die timestamp-quality-value (TQV)-Datenpunkte, die für eine einzelne Komponenteneigenschaft empfangen wurden, bündeln, bevor die Daten an den Stream angehängt werden. Eine Strategie besteht darin, Einträge für bis zu 10 verschiedene Eigenschafts-Asset-Kombinationen oder Eigenschaftsaliasnamen in einer Nachricht zu sammeln, anstatt mehr als einen Eintrag für dieselbe Eigenschaft zu senden. Dies hilft dem Stream-Manager, die AWS IoT SiteWise Kontingente von einzuhalten.

Amazon S3-Objekte

Stream Manager unterstützt automatische Exporte nach Amazon S3. Sie können Amazon S3 verwenden, um große Datenmengen zu speichern und abzurufen. Weitere Informationen finden Sie unter Was ist Amazon S3? im Amazon Simple Storage Service-Entwicklerhandbuch.

Im Stream Manager SDK verwenden Ihre Greengrass-Komponenten die , S3ExportTaskExecutorConfig um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:

Voraussetzungen

Für dieses Exportziel gelten die folgenden Anforderungen:

  • Ziel-Amazon S3-Buckets müssen sich in derselben AWS-Konto wie das Greengrass-Kerngerät befinden.

  • Wenn eine Lambda-Funktion, die im Greengrass-Container-Modus ausgeführt wird, Eingabedateien in ein Eingabedateiverzeichnis schreibt, müssen Sie das Verzeichnis als Volume im Container mit Schreibberechtigungen mounten. Dadurch wird sichergestellt, dass die Dateien in das Stammdateisystem geschrieben und für die Stream-Manager-Komponente sichtbar sind, die außerhalb des Containers ausgeführt wird.

  • Wenn eine Docker-Containerkomponente Eingabedateien in ein Eingabedateiverzeichnis schreibt, müssen Sie das Verzeichnis als Volume im Container mit Schreibberechtigungen mounten. Dadurch wird sichergestellt, dass die Dateien in das Stammdateisystem geschrieben und für die Stream-Manager-Komponente sichtbar sind, die außerhalb des Containers ausgeführt wird.

  • Der Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS muss die folgenden Berechtigungen für die Ziel-Buckets zulassen. Beispielsweise:

    { "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 auf -Ressourcen gewähren, z. B. durch die Verwendung eines Platzhalter-*Namensschemas. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von IAM-Richtlinien im IAM-Benutzerhandbuch.

Exportieren nach Amazon S3

Um einen Stream zu erstellen, der nach Amazon S3 exportiert wird, verwenden Ihre Greengrass-Komponenten das -S3ExportTaskExecutorConfigObjekt, um die Exportrichtlinie zu konfigurieren. Die Richtlinie definiert Exporteinstellungen wie den Schwellenwert und die Priorität des mehrteiligen Uploads. Für Amazon S3-Exporte lädt der Stream-Manager Daten hoch, die er aus lokalen Dateien auf dem Core-Gerät liest. Um einen Upload zu initiieren, hängen Ihre Greengrass-Komponenten eine Exportaufgabe an den Ziel-Stream an. Die Exportaufgabe enthält Informationen über die Eingabedatei und das Amazon S3-Zielobjekt. Stream Manager führt Aufgaben in der Reihenfolge aus, in der sie an den Stream angehängt werden.

Anmerkung

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

Stream Manager verwendet die Eigenschaft für den Schwellenwert für mehrteilige Uploads, die Einstellung für die minimale Teilegröße und die Größe der Eingabedatei, um zu bestimmen, wie Daten hochgeladen werden sollen. Der Schwellenwert für mehrteilige Uploads 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-Zielobjekte angeben, können gültige Java DateTimeFormatter-Zeichenfolgen in !{timestamp:value} Platzhaltern enthalten. 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 wie aufgelöstmy-key/2020/12/31/data.txt.

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

Wenn Sie den Exportstatus für einen Stream überwachen möchten, erstellen Sie zunächst einen Status-Stream und konfigurieren Sie dann den Export-Stream für dessen Verwendung. 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 Beispiel-Workflow zeigt, wie Sie Greengrass-Komponenten verwenden können, um diese Daten zu verwalten.

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

  2. Eine Greengrass-Komponente scannt das Verzeichnis und fügt eine Exportaufgabe an den Ziel-Stream an, wenn eine neue Datei erstellt wird. Die Aufgabe ist ein JSON-serialisiertes S3ExportTaskDefinition Objekt, das die URL der Eingabedatei, den Amazon S3-Ziel-Bucket und -Schlüssel sowie optionale Benutzermetadaten angibt.

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

  4. Die Greengrass-Komponente liest Nachrichten aus einem Statusstream, um den Exportstatus zu überwachen. Nach Abschluss der Exportaufgaben kann die Greengrass-Komponente die entsprechenden Eingabedateien löschen. Weitere Informationen finden Sie unter Überwachen von Exportaufgaben.

Überwachen von Exportaufgaben

Sie können Code erstellen, den IoT-Anwendungen verwenden, um den Status Ihrer Amazon S3-Exporte zu überwachen. Ihre Greengrass-Komponenten müssen einen Statusstream 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.

Erstellen Sie zunächst einen Stream, der als Statusstream verwendet werden soll. Sie können die Größe und die Aufbewahrungsrichtlinien für den Stream konfigurieren, um die Lebensdauer der Statusmeldungen zu steuern. Beispielsweise:

  • Setzen Sie Persistence auf Memory, wenn Sie die Statusmeldungen nicht speichern möchten.

  • Setzen Sie den Wert StrategyOnFull auf , OverwriteOldestData damit keine neuen Statusmeldungen verloren gehen.

Erstellen oder aktualisieren Sie dann den Exportstream, um den Statusstream zu verwenden. Legen Sie insbesondere die Statuskonfigurationseigenschaft der S3ExportTaskExecutorConfig Exportkonfiguration des Streams fest. Diese Einstellung weist den Stream-Manager an, Statusmeldungen zu den Exportaufgaben in den Status-Stream zu schreiben. Geben Sie im StatusConfig Objekt den Namen des Statusstreams und die Ausführlichkeitsstufe an. Die folgenden unterstützten Werte reichen von am wenigsten ausführlich (ERROR) bis am ausführlichsten (TRACE). Der Standardwert ist INFO.

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

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

  1. Wie im vorherigen Workflow beschrieben, hängt eine Greengrass-Komponente eine Exportaufgabe an einen Stream an, der so konfiguriert ist, dass Statusmeldungen über Exportaufgaben in einen Statusstream geschrieben werden. Die Append-Operation gibt eine Sequenznummer zurück, die die Aufgaben-ID darstellt.

  2. Eine Greengrass-Komponente liest Nachrichten sequenziell aus dem Status-Stream und filtert dann die Nachrichten basierend auf dem Stream-Namen und der Aufgaben-ID oder basierend auf einer Exportaufgabeneigenschaft aus dem Nachrichtenkontext. Die Greengrass-Komponente kann beispielsweise nach der URL der Eingabedatei der Exportaufgabe filtern, die durch das S3ExportTaskDefinition Objekt im Nachrichtenkontext dargestellt wird.

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

    • Success. Der Upload wurde erfolgreich abgeschlossen.

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

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

    Anmerkung

    Die Aufgabe hat möglicherweise auch den Status InProgress oder Warning. Stream Manager gibt Warnungen aus, wenn ein Ereignis einen Fehler zurückgibt, der sich nicht auf die Ausführung der Aufgabe auswirkt. Wenn beispielsweise ein teilweiser Upload nicht bereinigt werden kann, wird eine Warnung zurückgegeben.

  3. Nach Abschluss der Exportaufgaben kann die Greengrass-Komponente die entsprechenden Eingabedateien löschen.

Das folgende Beispiel zeigt, wie eine Greengrass-Komponente Statusmeldungen lesen und verarbeiten kann.

Python
import time from stream_manager import ( ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, StreamManagerClient, ) from 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.StreamManagerClientFactory; 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 = StreamManagerClientFactory.standard().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-stream-manager-sdk'*); 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