

Hinweis zum Ende des Supports: Am 7. Oktober 2026 AWS wird der Support für eingestellt. AWS IoT Greengrass Version 1 Nach dem 7. Oktober 2026 können Sie nicht mehr auf die Ressourcen zugreifen. AWS IoT Greengrass V1 Weitere Informationen finden Sie unter [Migrieren von AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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 Sie Konfigurationen für unterstützte AWS Cloud Destinationen
<a name="stream-export-configurations"></a>

User-defined Lambda-Funktionen, die `StreamManagerClient` im AWS IoT Greengrass Core SDK zur Interaktion mit dem Stream-Manager verwendet werden. Wenn eine Lambda-Funktion einen Stream [ erstellt ](work-with-streams.md#streammanagerclient-create-message-stream) oder einen Stream [ aktualisiert](work-with-streams.md#streammanagerclient-create-message-stream), übergibt sie ein `MessageStreamDefinition` Objekt, das die Stream-Eigenschaften darstellt, einschließlich der Exportdefinition. Das `ExportDefinition` Objekt 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.](https://docs.aws.amazon.com/de_de/greengrass/v1/developerguide/images/stream-manager-exportconfigs.png)


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 Kinesis-Datenstreams und einen Amazon S3-Bucket exportieren.

Bei fehlgeschlagenen Exportversuchen versucht der Stream-Manager kontinuierlich, Daten in Intervallen von bis zu fünf Minuten AWS Cloud in den zu exportieren. Für die Anzahl der Wiederholungsversuche gibt es kein Höchstlimit.

**Anmerkung**  
<a name="streammanagerclient-http-config"></a>`StreamManagerClient`bietet auch ein Zielziel, das Sie verwenden können, um Streams auf einen HTTP-Server zu exportieren. Dieses Ziel dient nur zu Testzwecken. Es ist nicht stabil und wird nicht für die Verwendung in Produktionsumgebungen unterstützt.

**Topics**
+ [AWS IoT Analytics Kanäle (eingestellt)](#export-to-iot-analytics)
+ [Amazon Kinesis-Datenströme](#export-to-kinesis)
+ [AWS IoT SiteWise Eigenschaften von Vermögenswerten](#export-to-iot-sitewise)
+ [Amazon-S3-Objekte](#export-to-s3)

Sie sind für die Wartung dieser AWS Cloud Ressourcen verantwortlich.

## AWS IoT Analytics Kanäle (eingestellt)
<a name="export-to-iot-analytics"></a>

**AWS IoT Analytics abgesetzt**  
AWS IoT Analytics wurde am 15. Dezember 2025 eingestellt. Stream Manager-Exporte zu AWS IoT Analytics Kanälen funktionieren nicht mehr. Wenn du Streams mit `IoTAnalyticsConfig` Exportzielen konfiguriert hast, entferne sie, um kontinuierliche fehlgeschlagene Exportversuche zu vermeiden.

Um AWS IoT Analytics Exportkonfigurationen aus einem vorhandenen Stream zu entfernen, aktualisieren Sie Ihre Stream-Definition, sodass der `IoTAnalyticsConfig` Eintrag weggelassen wird. Sie können den Stream auch ohne die AWS IoT Analytics Exportkonfiguration löschen und neu erstellen.

Erwägen Sie, zu einem der anderen unterstützten Exportziele wie [Amazon Kinesis-Datenströme](#export-to-kinesis) oder zu migrieren. [Amazon-S3-Objekte](#export-to-s3)

 

## Amazon Kinesis-Datenströme
<a name="export-to-kinesis"></a>

Stream Manager unterstützt automatische Exporte in Amazon Kinesis Data Streams. <a name="aks-export-destination"></a>Kinesis Data Streams wird häufig verwendet, um große Datenmengen zu aggregieren und sie in ein Data Warehouse oder Map-Reduce-Cluster zu laden. Weitere Informationen finden Sie unter [ Was ist Amazon Kinesis Data Streams? ](https://docs.aws.amazon.com/streams/latest/dev/what-is-this-service.html)im * Amazon Kinesis-Entwicklerhandbuch. * 

Im AWS IoT Greengrass Core SDK verwenden Ihre Lambda-Funktionen die, `KinesisConfig` um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.KinesisConfig)im Python-SDK
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/KinesisConfig.html)im Java SDK
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.KinesisConfig.html)im Node.js SDK

### Voraussetzungen
<a name="export-to-kinesis-reqs"></a>

Für dieses Exportziel gelten die folgenden Anforderungen:
+ Ziel-Streams in Kinesis Data Streams müssen sich in derselben Gruppe AWS-Konto und AWS-Region wie die Greengrass-Gruppe befinden.
+ Die [Greengrass-Gruppenrolle.](group-role.md) muss die `kinesis:PutRecords` Erlaubnis zum Targeting von Datenströmen gewähren. Beispiel:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "kinesis:PutRecords"
              ],
              "Resource": [
              "arn:aws:kinesis:{{us-east-1}}:{{123456789012}}:stream/{{stream_1_name}}",
      "arn:aws:kinesis:{{us-east-1}}:{{123456789012}}:stream/{{stream_2_name}}"
              ]
          }
      ]
  }
  ```

------

  <a name="wildcards-grant-granular-conditional-access"></a>Sie können granularen oder bedingten Zugriff auf Ressourcen gewähren, z. B. mithilfe eines `*` Platzhalter-Benennungsschemas. Weitere Informationen finden Sie unter [ Hinzufügen und Entfernen von IAM-Richtlinien ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) im * IAM-Benutzerhandbuch. *

### Exportieren in Kinesis Data Streams
<a name="export-streams-to-kinesis"></a>

Um einen Stream zu erstellen, der in Kinesis Data Streams exportiert wird, [ erstellen Ihre Lambda-Funktionen einen Stream ](work-with-streams.md#streammanagerclient-create-message-stream) mit einer Exportdefinition, die ein oder mehrere Objekte enthält. `KinesisConfig` Dieses Objekt definiert Exporteinstellungen wie den Zieldatenstream, die Batchgröße, das Batch-Intervall und die Priorität.

Wenn Ihre Lambda-Funktionen Daten von Geräten empfangen, [ hängen sie Nachrichten, ](work-with-streams.md#streammanagerclient-append-message) die einen Datenblock enthalten, an den Zielstream an. Anschließend exportiert der Stream Manager die Daten auf der Grundlage der 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 auf Amazon Kinesis hochgeladen wird. 

 

## AWS IoT SiteWise Eigenschaften von Vermögenswerten
<a name="export-to-iot-sitewise"></a>

Stream Manager unterstützt automatische Exporte nach AWS IoT SiteWise. <a name="itsw-export-destination"></a>AWS IoT SiteWise ermöglicht es Ihnen, Daten von Industrieanlagen in großem Maßstab zu sammeln, zu organisieren und zu analysieren. Weitere Informationen finden Sie unter [ Was ist AWS IoT SiteWise? ](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)im *AWS IoT SiteWise Benutzerhandbuch*. 

Im AWS IoT Greengrass Core SDK verwenden Ihre Lambda-Funktionen die, `IoTSiteWiseConfig` um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:
+ [IoTSiteWiseConfig](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.IoTSiteWiseConfig)im Python-SDK
+ [IoTSiteWiseConfig](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/IoTSiteWiseConfig.html)im Java SDK
+ [IoTSiteWiseConfig](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.IoTSiteWiseConfig.html)im Node.js SDK

**Anmerkung**  
AWS bietet auch die[SiteWise IoT-Anschluss](iot-sitewise-connector.md), eine vorgefertigte Lösung, die Sie mit OPC-UA Quellen verwenden können.

### Voraussetzungen
<a name="export-to-iot-sitewise-reqs"></a>

Für dieses Exportziel gelten die folgenden Anforderungen:
+ Die Eigenschaften des Ziel-Assets in AWS IoT SiteWise müssen zur gleichen Gruppe gehören AWS-Konto und AWS-Region denen der Greengrass-Gruppe angehören.
**Anmerkung**  
Eine Liste der Regionen, die AWS IoT SiteWise unterstützt werden, finden Sie unter [AWS IoT SiteWise Endpunkte und Kontingente ](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html#iot-sitewise_region) in der *AWS Allgemeinen Referenz. *
+ Sie [Greengrass-Gruppenrolle.](group-role.md) müssen die `iotsitewise:BatchPutAssetPropertyValue` Berechtigung zum Targeting von Asset-Eigenschaften gewähren. Die folgende Beispielrichtlinie verwendet den `iotsitewise:assetHierarchyPath` Bedingungsschlüssel, um Zugriff auf ein Ziel-Root-Asset und dessen untergeordnete Elemente zu gewähren. Sie können den `Condition` aus der Richtlinie entfernen, um den Zugriff auf alle Ihre AWS IoT SiteWise Assets zu ermöglichen, oder ARNs einzelner Assets angeben.

------
#### [ JSON ]

****  

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

------

  <a name="wildcards-grant-granular-conditional-access"></a>Sie können granularen oder bedingten Zugriff auf Ressourcen gewähren, z. B. mithilfe eines `*` Platzhalter-Benennungsschemas. Weitere Informationen finden Sie unter [ Hinzufügen und Entfernen von IAM-Richtlinien ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) im * IAM-Benutzerhandbuch. *

  Wichtige Sicherheitsinformationen finden Sie unter [ BatchPutAssetPropertyValue Autorisierung ](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-batchputassetpropertyvalue-action) im *AWS IoT SiteWise Benutzerhandbuch. *

### Exportieren nach AWS IoT SiteWise
<a name="export-streams-to-sitewise"></a>

Um einen Stream zu erstellen, in den exportiert wird AWS IoT SiteWise, [ erstellen Ihre Lambda-Funktionen einen Stream ](work-with-streams.md#streammanagerclient-create-message-stream) mit einer Exportdefinition, die ein oder mehrere `IoTSiteWiseConfig` Objekte enthält. Dieses Objekt definiert Exporteinstellungen wie Batchgröße, Batch-Intervall und Priorität.

Wenn Ihre Lambda-Funktionen Daten zu Anlageneigenschaften von Geräten empfangen, hängen sie Nachrichten, die die Daten enthalten, an den Zielstream an. Nachrichten sind JSON-serialized `PutAssetPropertyValueEntry` Objekte, die Eigenschaftswerte für eine oder mehrere Asset-Eigenschaften enthalten. Weitere Informationen finden Sie unter Nachricht [ für AWS IoT SiteWise Exportziele ](work-with-streams.md#streammanagerclient-append-message-sitewise) anhängen.

**Anmerkung**  
<a name="BatchPutAssetPropertyValue-data-reqs"></a>Wenn Sie Daten an senden AWS IoT SiteWise, müssen Ihre Daten die Anforderungen der `BatchPutAssetPropertyValue` Aktion erfüllen. Weitere Informationen finden Sie unter [BatchPutAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_BatchPutAssetPropertyValue.html) in der *AWS IoT SiteWise -API-Referenz*.

Anschließend exportiert der Stream Manager die Daten auf der Grundlage der 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. Beispiel:
+ Stellen Sie für Exporte nahezu in Echtzeit niedrige Einstellungen für Batchgröße und Intervalle ein und hängen Sie die Daten an den Stream an, wenn sie empfangen werden.
+ Um das Batching zu optimieren, Bandbreitenbeschränkungen zu minimieren oder die Kosten zu minimieren, können Ihre Lambda-Funktionen die für eine einzelne Asset-Eigenschaft empfangenen Timestamp-Quality-Value (TQV) -Datenpunkte bündeln, 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 zusammenzufassen, anstatt mehr als einen Eintrag für dieselbe Eigenschaft zu senden. Dies hilft dem Stream Manager dabei, die Kontingente einzuhalten. [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html)

 

## Amazon-S3-Objekte
<a name="export-to-s3"></a>

Stream Manager unterstützt automatische Exporte nach Amazon S3. <a name="s3-export-destination"></a>Sie können Amazon S3 verwenden, um große Datenmengen zu speichern und abzurufen. Weitere Informationen finden Sie unter [ Was ist Amazon S3? ](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)im * Amazon Simple Storage Service Developer Guide*. 

Im AWS IoT Greengrass Core SDK verwenden Ihre Lambda-Funktionen die, `S3ExportTaskExecutorConfig` um die Exportkonfiguration für diesen Zieltyp zu definieren. Weitere Informationen finden Sie in der SDK-Referenz für Ihre Zielsprache:
+ [S3ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.S3ExportTaskExecutorConfig)im Python-SDK
+ [S3ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/S3ExportTaskExecutorConfig.html)im Java SDK
+ [S3ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.S3ExportTaskExecutorConfig.html)im Node.js SDK

### Voraussetzungen
<a name="export-to-s3-reqs"></a>

Für dieses Exportziel gelten die folgenden Anforderungen:
+ Amazon S3-Ziel-Buckets müssen derselben Gruppe angehören AWS-Konto wie die Greengrass-Gruppe.
+ Wenn die [ Standardcontainerisierung ](lambda-group-config.md#lambda-containerization-groupsettings) für die Greengrass-Gruppe der Greengrass-Container ist ****, müssen Sie den [ Parameter ](configure-stream-manager.md#stream-manager-read-only-directories) STREAM\_MANAGER\_READ\_ONLY\_DIRS so einstellen, dass ein Eingabedateiverzeichnis verwendet wird, das sich unter oder nicht im Root-Dateisystem befindet. `/tmp`
+ Wenn eine Lambda-Funktion, die im ** ** Greengrass-Containermodus ausgeführt wird, Eingabedateien in das Eingabedateiverzeichnis schreibt, müssen Sie eine lokale Volume-Ressource für das Verzeichnis erstellen und das Verzeichnis mit Schreibberechtigungen im Container mounten. Dadurch wird sichergestellt, dass die Dateien in das Root-Dateisystem geschrieben werden und außerhalb des Containers sichtbar sind. Weitere Informationen finden Sie unter [Greifen Sie mit Lambda-Funktionen und Konnektoren auf lokale Ressourcen zu](access-local-resources.md).
+ Der [Greengrass-Gruppenrolle.](group-role.md) muss den Ziel-Buckets die folgenden Berechtigungen gewähren. Beispiel:

------
#### [ JSON ]

****  

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

------

  <a name="wildcards-grant-granular-conditional-access"></a>Sie können granularen oder bedingten Zugriff auf Ressourcen gewähren, z. B. mithilfe eines `*` Platzhalter-Benennungsschemas. Weitere Informationen finden Sie unter [ Hinzufügen und Entfernen von IAM-Richtlinien ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) im * IAM-Benutzerhandbuch. *

### Exportieren nach Amazon S3
<a name="export-streams-to-s3"></a>

Um einen Stream zu erstellen, der nach Amazon S3 exportiert wird, verwenden Ihre Lambda-Funktionen das `S3ExportTaskExecutorConfig` Objekt, um die Exportrichtlinie zu konfigurieren. Die Richtlinie definiert Exporteinstellungen, wie z. B. den Schwellenwert und die Priorität für mehrteilige Uploads. Bei Amazon 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 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**  
<a name="bucket-not-key-must-exist"></a>Der Ziel-Bucket muss bereits in Ihrem vorhanden sein. AWS-Konto Wenn ein Objekt für den angegebenen Schlüssel nicht existiert, erstellt Stream Manager das Objekt für Sie. 

 Dieser allgemeine Arbeitsablauf ist in der folgenden Abbildung dargestellt.

![Diagramm des Stream-Manager-Workflows für Amazon S3-Exporte.](https://docs.aws.amazon.com/de_de/greengrass/v1/developerguide/images/stream-manager-s3.png)


Der Stream-Manager verwendet die Schwellenwerteigenschaft für mehrteiligen Upload, die [ Einstellung für die ](configure-stream-manager.md#stream-manager-minimum-part-size) Mindestgröße der Teile und die Größe der Eingabedatei, um zu bestimmen, wie Daten hochgeladen werden. Der Schwellenwert für den mehrteiligen Upload muss größer oder gleich der Mindestgröße für Teile 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 [ DateTimeFormatter ](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) Java-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. Beispielsweise wird der folgende Schlüsselname in einen Wert wie aufgelöst. `my-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 so, dass er ihn verwendet. Weitere Informationen finden Sie unter [Überwachen Sie die Exportaufgaben](#monitor-export-status-s3).

#### Eingabedaten verwalten
<a name="manage-s3-input-data"></a>

Sie können Code verfassen, den IoT-Anwendungen verwenden, um den Lebenszyklus der Eingabedaten zu verwalten. Der folgende Beispiel-Workflow 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**  
Anhand des Parameters [Read-only Verzeichnisse für Eingabedateien](configure-stream-manager.md#stream-manager-read-only-directories) STREAM\_MANAGER\_READ\_ONLY\_DIRS können Sie ermitteln, ob Sie den Zugriff auf das Eingabedateiverzeichnis konfigurieren müssen.  
Der Prozess, in dem Stream Manager ausgeführt wird, erbt alle Dateisystemberechtigungen der Standardzugriffsidentität für die Gruppe. [Einstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe](lambda-group-config.md#lambda-access-identity-groupsettings) Der Stream-Manager muss die Berechtigung haben, auf die Eingabedateien zuzugreifen. Sie können den `chmod(1)` Befehl verwenden, um die Zugriffsrechte der Dateien bei Bedarf zu ändern.

1. Eine Lambda-Funktion scannt das Verzeichnis und [ hängt eine Exportaufgabe an den Zielstream ](work-with-streams.md#streammanagerclient-append-message-export-task) an, wenn eine neue Datei erstellt wird. Die Aufgabe ist ein JSON-serialized `S3ExportTaskDefinition` Objekt, das die URL der Eingabedatei, den Amazon S3-Ziel-Bucket und -Schlüssel sowie optionale Benutzermetadaten angibt.

1. Der Stream-Manager liest die Eingabedatei und exportiert die Daten in der Reihenfolge der angehängten Aufgaben nach Amazon S3. <a name="bucket-not-key-must-exist"></a>Der Ziel-Bucket muss bereits in Ihrem AWS-Konto vorhanden sein. Wenn ein Objekt für den angegebenen Schlüssel nicht existiert, erstellt Stream Manager das Objekt für Sie. 

1. Die Lambda-Funktion [ liest Nachrichten ](work-with-streams.md#streammanagerclient-read-messages) aus einem Statusstream, um den Exportstatus zu überwachen. Nach Abschluss der Exportaufgaben kann die Lambda-Funktion die entsprechenden Eingabedateien löschen. Weitere Informationen finden Sie unter [Überwachen Sie die Exportaufgaben](#monitor-export-status-s3).

### Überwachen Sie die Exportaufgaben
<a name="monitor-export-status-s3"></a>

Sie können Code verfassen, den IoT-Anwendungen verwenden, um den Status Ihrer Amazon S3-Exporte zu überwachen. Ihre Lambda-Funktionen müssen einen Status-Stream erstellen und dann den Export-Stream so konfigurieren, dass Statusaktualisierungen in den Status-Stream geschrieben werden. Ein einzelner Status-Stream kann Statusaktualisierungen von mehreren Streams empfangen, die nach Amazon S3 exportiert werden.

[Erstellen Sie zunächst einen Stream, der als Status-Stream verwendet werden ](work-with-streams.md#streammanagerclient-create-message-stream) soll. Sie können die Größen- und Aufbewahrungsrichtlinien für den Stream konfigurieren, um die Lebensdauer der Statusmeldungen zu steuern. Beispiel:
+ Setzen `Persistence` Sie `Memory` diese Option auf, wenn Sie die Statusmeldungen nicht speichern möchten.
+ Stellen `StrategyOnFull` Sie diese Option ein, `OverwriteOldestData` damit neue Statusmeldungen nicht verloren gehen.

Erstellen oder aktualisieren Sie dann den Export-Stream, um den Status-Stream zu verwenden. Legen Sie insbesondere die Statuskonfigurationseigenschaft der `S3ExportTaskExecutorConfig` Exportkonfiguration des Streams fest. Dadurch wird der Stream-Manager angewiesen, Statusmeldungen zu den Exportaufgaben in den Status-Stream zu schreiben. Geben Sie im `StatusConfig` Objekt den Namen des Status-Streams und den Grad der Ausführlichkeit an. Die folgenden unterstützten Werte reichen von am wenigsten ausführlich (`ERROR`) bis am meisten ausführlich (). `TRACE` Der Standardwert ist `INFO`.
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`

 

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

1. Wie im vorherigen Workflow beschrieben, [ hängt eine Lambda-Funktion eine Exportaufgabe an einen Stream ](work-with-streams.md#streammanagerclient-append-message-export-task) an, der so konfiguriert ist, dass er Statusmeldungen zu Exportaufgaben in einen Statusstream schreibt. Der Anfügevorgang gibt eine Sequenznummer zurück, die die Aufgaben-ID darstellt.

1. Eine Lambda-Funktion [ liest Nachrichten ](work-with-streams.md#streammanagerclient-read-messages) sequentiell aus dem Statusstream und filtert die Nachrichten dann anhand des Stream-Namens und der Task-ID oder basierend auf einer Eigenschaft der Exportaufgabe aus dem Nachrichtenkontext. Beispielsweise kann die Lambda-Funktion nach der Eingabedatei-URL der Exportaufgabe filtern, die durch das `S3ExportTaskDefinition` Objekt im Nachrichtenkontext dargestellt wird.

   Die folgenden Statuscodes geben an, dass eine Exportaufgabe den Status „Abgeschlossen“ erreicht hat:
   + `Success`. Der Upload wurde erfolgreich abgeschlossen.
   + `Failure`. Im Stream Manager ist ein Fehler aufgetreten, 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 abgebrochen, weil die Stream- oder Exportdefinition gelöscht wurde oder die Time-to-Live (TTL) -Periode der Aufgabe abgelaufen ist.
**Anmerkung**  
Die Aufgabe könnte auch den Status oder haben. `InProgress` `Warning` Stream Manager gibt Warnungen aus, wenn ein Ereignis einen Fehler zurückgibt, der die Ausführung der Aufgabe nicht beeinträchtigt. Wenn beispielsweise ein abgebrochener Teiluload nicht bereinigt werden kann, wird eine Warnung zurückgegeben.

1. Nach Abschluss der Exportaufgaben 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 \| ](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.read_messages) [ StatusMessage ](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.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 \| [https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#readMessages-java.lang.String-com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions-](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#readMessages-java.lang.String-com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions-) [ StatusMessage ](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/StatusMessage.html)

------
#### [ 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 \| ](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#readMessages) [ StatusMessage ](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StatusMessage.html)

------