

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud
<a name="stream-export-configurations"></a>

Komponen Greengrass yang ditentukan pengguna menggunakan `StreamManagerClient` di SDK Stream Manager untuk berinteraksi dengan stream manager. Ketika komponen [membuat aliran](work-with-streams.md#streammanagerclient-create-message-stream) atau [memperbarui aliran](work-with-streams.md#streammanagerclient-create-message-stream), melewati objek `MessageStreamDefinition` yang mewakili properti aliran, termasuk definisi ekspor. Objek `ExportDefinition` berisi konfigurasi ekspor yang ditentukan untuk aliran tersebut. Stream manager menggunakan konfigurasi ekspor ini untuk menentukan di mana dan bagaimana untuk mengekspor aliran tersebut.

![\[Diagram model objek dari jenis ExportDefinition properti.\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/images/stream-manager-exportconfigs.png)


Anda dapat menentukan konfigurasi ekspor nol atau lebih pada suatu aliran, termasuk beberapa konfigurasi ekspor untuk satu jenis tujuan. Misalnya, Anda dapat mengekspor aliran ke dua saluran AWS IoT Analytics dan satu Kinesis data stream.

Untuk upaya ekspor yang gagal, manajer aliran terus mencoba mengekspor data ke AWS Cloud interval hingga lima menit. Jumlah upaya coba lagi tidak memiliki batas maksimum.

**catatan**  
<a name="streammanagerclient-http-config"></a>`StreamManagerClient` juga menyediakan target tujuan yang dapat Anda gunakan untuk mengekspor aliran ke server HTTP. Target ini ditujukan untuk tujuan pengujian saja. Target ini tidak stabil atau didukung untuk digunakan di lingkungan produksi.

**Topics**
+ [AWS IoT Analytics saluran](#export-to-iot-analytics)
+ [Amazon Kinesis data streams](#export-to-kinesis)
+ [AWS IoT SiteWise properti aset](#export-to-iot-sitewise)
+ [Objek Amazon S3](#export-to-s3)

Anda bertanggung jawab untuk memelihara AWS Cloud sumber daya ini.

## AWS IoT Analytics saluran
<a name="export-to-iot-analytics"></a>

Manajer aliran mendukung ekspor otomatis ke AWS IoT Analytics. <a name="ita-export-destination"></a>AWS IoT Analytics memungkinkan Anda melakukan analisis lanjutan pada data Anda untuk membantu membuat keputusan bisnis dan meningkatkan model pembelajaran mesin. Untuk informasi lebih lanjut, lihat [Apa itu AWS IoT Analytics?](https://docs.aws.amazon.com/iotanalytics/latest/userguide/welcome.html) dalam *AWS IoT Analytics User Guide*. 

Dalam SDK Stream Manager, komponen Greengrass Anda menggunakan `IoTAnalyticsConfig` untuk menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [TAnalyticsKonfigurasi Io di SDK](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.data.html#stream_manager.data.IoTAnalyticsConfig) Python
+ [Io TAnalytics Config](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/model/export/IoTAnalyticsConfig.html) di Java SDK
+ [Io TAnalytics Config di Node.js](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.IoTAnalyticsConfig.html) SDK

### Persyaratan
<a name="export-to-iot-analytics-reqs"></a>

Tujuan ekspor ini memiliki persyaratan sebagai berikut:
+ Saluran target AWS IoT Analytics harus sama Akun AWS dan Wilayah AWS sebagai perangkat inti Greengrass.
+ [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md) harus memungkinkan izin `iotanalytics:BatchPutMessage` untuk menargetkan saluran. Contoh:

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iotanalytics:BatchPutMessage"
        ],
        "Resource": [
          "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_1_name",
          "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_2_name"
        ]
      }
    ]
  }
  ```

------

  <a name="wildcards-grant-granular-conditional-access"></a>Anda dapat memberikan akses terperinci atau bersyarat ke sumber daya, misalnya dengan menggunakan skema penamaan wildcard `*`. Untuk informasi lebih lanjut, lihat [Menambahkan dan menghapus kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dalam *Panduan Pengguna IAM*.

### Mengekspor ke AWS IoT Analytics
<a name="export-streams-to-iot-analytics"></a>

Untuk membuat aliran yang diekspor AWS IoT Analytics, [komponen Greengrass Anda membuat aliran dengan definisi ekspor yang menyertakan satu](work-with-streams.md#streammanagerclient-create-message-stream) atau beberapa objek. `IoTAnalyticsConfig` Objek ini menentukan pengaturan ekspor, seperti target saluran, ukuran batch, interval batch, dan prioritas.

Ketika komponen Greengrass Anda menerima data dari perangkat, komponen itu [menambahkan pesan](work-with-streams.md#streammanagerclient-append-message) yang berisi gumpalan data ke aliran target.

Kemudian, stream manager mengekspor data berdasarkan pengaturan batch dan prioritas yang ditentukan dalam konfigurasi ekspor aliran.

## Amazon Kinesis data streams
<a name="export-to-kinesis"></a>

Stream manager mendukung ekspor otomatis ke Amazon Kinesis Data Streams. <a name="aks-export-destination"></a>Kinesis Data Streams biasanya digunakan untuk mengumpulkan data volume tinggi dan memuatnya ke dalam gudang data atau cluster. MapReduce Untuk informasi selengkapnya, lihat [Apa yang dimaksud dengan Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/what-is-this-service.html) dalam *Panduan Developer Amazon Kinesis*. 

Dalam SDK Stream Manager, komponen Greengrass Anda menggunakan `KinesisConfig` untuk menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [KinesisConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.data.html#stream_manager.data.KinesisConfig)di Python SDK
+ [KinesisConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/model/export/KinesisConfig.html)di Java SDK
+ [KinesisConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.KinesisConfig.html)di Node.js SDK

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

Tujuan ekspor ini memiliki persyaratan sebagai berikut:
+ Aliran target di Kinesis Data Streams harus sama Akun AWS dan Wilayah AWS sebagai perangkat inti Greengrass.
+ (Disarankan) Stream manager v2.2.1 meningkatkan kinerja mengekspor stream ke tujuan Kinesis Data Streams. [Untuk menggunakan peningkatan dalam versi terbaru ini, tingkatkan [komponen pengelola aliran](stream-manager-component.md) Anda ke v2.2.1 dan gunakan `kinesis:ListShards` kebijakan dalam peran pertukaran token Greengrass.](device-service-role.md) 
+ [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md) harus memungkinkan izin `kinesis:PutRecords` untuk menargetkan aliran data. Contoh:

------
#### [ 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>Anda dapat memberikan akses terperinci atau bersyarat ke sumber daya, misalnya dengan menggunakan skema penamaan wildcard `*`. Untuk informasi lebih lanjut, lihat [Menambahkan dan menghapus kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dalam *Panduan Pengguna IAM*.

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

Untuk membuat pengaliran yang diekspor ke Kinesis Data Streams, komponen Greengrass Anda [membuat pengaliran](work-with-streams.md#streammanagerclient-create-message-stream) dengan definisi ekspor yang mencakup satu atau lebih objek `KinesisConfig`. Objek ini menentukan pengaturan ekspor, seperti target aliran data, ukuran batch, interval batch, dan prioritas.

Ketika komponen Greengrass Anda menerima data dari perangkat, komponen itu [menambahkan pesan](work-with-streams.md#streammanagerclient-append-message) yang berisi gumpalan data ke aliran target. Kemudian, stream manager mengekspor data berdasarkan pengaturan batch dan prioritas yang ditentukan dalam konfigurasi ekspor aliran. 

Stream manager menghasilkan UUID acak yang unik sebagai kunci partisi untuk setiap rekaman yang diunggah ke Amazon Kinesis. 

## AWS IoT SiteWise properti aset
<a name="export-to-iot-sitewise"></a>

Manajer aliran mendukung ekspor otomatis ke AWS IoT SiteWise. <a name="itsw-export-destination"></a>AWS IoT SiteWise memungkinkan Anda mengumpulkan, mengatur, dan menganalisis data dari peralatan industri dalam skala besar. Untuk informasi lebih lanjut, lihat [Apa itu AWS IoT SiteWise?](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) dalam *AWS IoT SiteWise User Guide*. 

Dalam SDK Stream Manager, komponen Greengrass Anda menggunakan `IoTSiteWiseConfig` untuk menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [Io TSite WiseConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.data.html#stream_manager.data.IoTSiteWiseConfig) dalam SDK Python
+ [Io TSite WiseConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/model/export/IoTSiteWiseConfig.html) di Java SDK
+ [Io TSite WiseConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.IoTSiteWiseConfig.html) di Node.js SDK

**catatan**  
AWS juga menyediakan AWS IoT SiteWise komponen, yang menawarkan solusi pra-bangun yang dapat Anda gunakan untuk mengalirkan data dari sumber OPC-UA. Untuk informasi selengkapnya, lihat [Kolektor IoT SiteWise OPC UA](iotsitewise-opcua-collector-component.md).

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

Tujuan ekspor ini memiliki persyaratan sebagai berikut:
+ Properti aset target AWS IoT SiteWise harus sama Akun AWS dan Wilayah AWS sebagai perangkat inti Greengrass.
**catatan**  
Untuk daftar Wilayah AWS s yang AWS IoT SiteWise mendukung, lihat [AWS IoT SiteWise titik akhir dan kuota](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html#iot-sitewise_region) di Referensi *AWS Umum*.
+ [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md) harus memungkinkan izin `iotsitewise:BatchPutAssetPropertyValue` untuk menargetkan properti aset. Kebijakan berikut menggunakan kunci kondisi `iotsitewise:assetHierarchyPath` untuk memberikan akses ke aset akar target dan anak-anaknya. Anda dapat menghapus `Condition` dari kebijakan untuk mengizinkan akses ke semua AWS IoT SiteWise aset Anda atau menentukan ARNs aset individu.

------
#### [ 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>Anda dapat memberikan akses terperinci atau bersyarat ke sumber daya, misalnya dengan menggunakan skema penamaan wildcard `*`. Untuk informasi lebih lanjut, lihat [Menambahkan dan menghapus kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dalam *Panduan Pengguna IAM*.

  Untuk informasi keamanan penting, lihat [ BatchPutAssetPropertyValue otorisasi](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) di *Panduan AWS IoT SiteWise Pengguna*.

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

Untuk membuat aliran yang diekspor AWS IoT SiteWise, [komponen Greengrass Anda membuat aliran dengan definisi ekspor yang menyertakan satu](work-with-streams.md#streammanagerclient-create-message-stream) atau beberapa objek. `IoTSiteWiseConfig` Objek ini menentukan pengaturan ekspor, seperti ukuran batch, interval batch, dan prioritas.

Ketika komponen Greengrass Anda menerima data properti aset dari perangkat, komponen itu menambahkan pesan yang berisi data ke aliran target. Pesan merupakan objek `PutAssetPropertyValueEntry` berseri JSON yang berisi nilai properti untuk satu atau lebih properti aset. Untuk informasi selengkapnya, lihat: [Tambahkan pesan](work-with-streams.md#streammanagerclient-append-message-sitewise) untuk tujuan ekspor AWS IoT SiteWise .

**catatan**  
<a name="BatchPutAssetPropertyValue-data-reqs"></a>Saat Anda mengirim data ke AWS IoT SiteWise, data Anda harus memenuhi persyaratan `BatchPutAssetPropertyValue` tindakan. Untuk informasi selengkapnya, lihat [BatchPutAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_BatchPutAssetPropertyValue.html) di dalam *Referensi API AWS IoT SiteWise *. 

Kemudian, stream manager mengekspor data berdasarkan pengaturan batch dan prioritas yang ditentukan dalam konfigurasi ekspor aliran.

Anda dapat menyesuaikan pengaturan stream manager dan logika komponen Greengrass untuk merancang strategi ekspor Anda. Contoh:
+ Untuk ekspor yang mendekati real time, atur ukuran batch dan pengaturan interval yang rendah dan tambahkan data ke aliran saat diterima.
+ Untuk mengoptimalkan batching, mengurangi batasan bandwidth, atau meminimalkan biaya, komponen Greengrass Anda dapat mengumpulkan titik data timestamp-quality-value (TQV) yang diterima untuk satu properti aset sebelum menambahkan data ke aliran. Salah satu strateginya adalah mengelompokkan entri hingga 10 kombinasi aset properti yang berbeda, atau alias properti, dalam satu pesan, dan bukan mengirim lebih dari satu entri untuk properti yang sama. Hal ini membantu manajer pengaliran untuk tetap berada dalam [kuota AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html).

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

Stream manager mendukung ekspor otomatis ke Amazon S3. <a name="s3-export-destination"></a>Sebagai contoh, Anda dapat menggunakan Amazon S3 untuk menyimpan dan mengambil sejumlah besar data. Untuk informasi selengkapnya, lihat [Apa itu Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) dalam *Panduan Developer Amazon Simple Storage Service*. 

Dalam SDK Stream Manager, komponen Greengrass Anda menggunakan `S3ExportTaskExecutorConfig` untuk menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [S3 ExportTaskExecutorConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.data.html#stream_manager.data.S3ExportTaskExecutorConfig) di Python SDK
+ [S3 ExportTaskExecutorConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/model/export/S3ExportTaskExecutorConfig.html) di Java SDK
+ [S3 ExportTaskExecutorConfig](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.S3ExportTaskExecutorConfig.html) di Node.js SDK

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

Tujuan ekspor ini memiliki persyaratan sebagai berikut:
+ Target ember Amazon S3 harus sama dengan perangkat inti Akun AWS Greengrass.
+ Jika fungsi Lambda yang berjalan dalam mode **wadah Greengrass** menulis file input ke direktori file input, Anda harus memasang direktori sebagai volume dalam wadah dengan izin tulis. Ini memastikan bahwa file ditulis ke sistem file root dan terlihat oleh komponen manajer aliran, yang berjalan di luar wadah.
+ Jika komponen kontainer Docker menulis file input ke direktori file input, Anda harus me-mount direktori sebagai volume dalam wadah dengan izin tulis. Ini memastikan bahwa file ditulis ke sistem file root dan terlihat oleh komponen manajer aliran, yang berjalan di luar wadah.
+ [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md) harus memungkinkan izin berikut untuk target bucket. Contoh:

------
#### [ 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>Anda dapat memberikan akses terperinci atau bersyarat ke sumber daya, misalnya dengan menggunakan skema penamaan wildcard `*`. Untuk informasi lebih lanjut, lihat [Menambahkan dan menghapus kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dalam *Panduan Pengguna IAM*.

### Mengekspor ke Amazon S3
<a name="export-streams-to-s3"></a>

Untuk membuat aliran yang diekspor ke Amazon S3, komponen Greengrass Anda menggunakan objek `S3ExportTaskExecutorConfig` untuk mengonfigurasi kebijakan ekspor. Kebijakan ini menentukan pengaturan ekspor, seperti ambang batas dan prioritas unggahan multipart. Untuk ekspor Amazon S3, stream manager akan mengunggah data yang dibaca dari file lokal pada perangkat inti. Untuk memulai unggahan, komponen Greengrass Anda menambahkan tugas ekspor ke aliran target. Tugas ekspor berisi informasi tentang file input dan objek Amazon S3 target. Stream manager menjalankan tugas dalam urutan yang ditambahkan ke aliran.

**catatan**  
 <a name="bucket-not-key-must-exist"></a>Ember target harus sudah ada di Anda Akun AWS. Jika objek untuk kunci tertentu tidak ada, stream manager akan membuatnya untuk Anda. 

Manajer pengaliran menggunakan properti ambang batas unggahan multipart, pengaturan [ukuran bagian minimum](configure-stream-manager.md#stream-manager-minimum-part-size), dan ukuran file input untuk menentukan cara mengunggah data. Ambang batas unggahan multipart harus lebih besar atau sama dengan ukuran bagian minimum. Jika Anda ingin meng-upload data secara paralel, Anda dapat membuat beberapa aliran.

Kunci yang menentukan objek Amazon S3 target Anda dapat menyertakan DateTimeFormatter string [Java](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) yang valid di placeholder. `!{timestamp:value}` Anda dapat menggunakan placeholder stempel waktu ini untuk membagi data di Amazon S3 berdasarkan waktu data file input tersebut diunggah. Sebagai contoh, nama kunci berikut memutuskan untuk nilai seperti `my-key/2020/12/31/data.txt`.

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

**catatan**  
Jika Anda ingin memantau status ekspor untuk suatu aliran, pertama-tama buat status aliran dan kemudian konfigurasi aliran ekspor untuk menggunakannya. Untuk informasi selengkapnya, lihat [Pantau tugas ekspor](#monitor-export-status-s3).

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

Anda dapat menuliskan kode yang digunakan oleh aplikasi IoT untuk mengelola siklus hidup data input. Contoh alur kerja berikut menunjukkan bagaimana Anda mungkin menggunakan komponen Greengrass untuk mengelola data ini.

1. Proses lokal menerima data dari perangkat atau periferal, dan kemudian menuliskan data ke file dalam direktori pada perangkat inti. Ini adalah file input untuk stream manager.

1. Komponen Greengrass memindai direktori dan [menambahkan tugas ekspor](work-with-streams.md#streammanagerclient-append-message-export-task) ke aliran target ketika file baru dibuat. Tugas tersebut adalah objek `S3ExportTaskDefinition` JSON berseri yang menentukan URL file input, bucket dan kunci Amazon S3 target, dan metadata pengguna opsional.

1. Stream manager membaca file input dan mengekspor data ke Amazon S3 dalam urutan tugas yang ditambahkan. <a name="bucket-not-key-must-exist"></a>Ember target harus sudah ada di Anda Akun AWS. Jika objek untuk kunci tertentu tidak ada, stream manager akan membuatnya untuk Anda. 

1. Komponen Greengrass [membaca pesan](work-with-streams.md#streammanagerclient-read-messages) dari aliran status untuk memantau status ekspor. Setelah tugas ekspor selesai, komponen Greengrass dapat menghapus file input yang sesuai. Untuk informasi selengkapnya, lihat [Pantau tugas ekspor](#monitor-export-status-s3).

### Pantau tugas ekspor
<a name="monitor-export-status-s3"></a>

Anda dapat menuliskan kode yang digunakan oleh aplikasi IoT untuk memantau status ekspor Amazon S3 Anda. Komponen Greengrass Anda harus membuat status aliran dan kemudian mengonfigurasi aliran ekspor untuk menuliskan pembaruan status pada status aliran. Aliran status tunggal dapat menerima pembaruan status dari beberapa aliran yang diekspor ke Amazon S3.

Pertama-tama, [buat aliran](work-with-streams.md#streammanagerclient-create-message-stream) yang akan digunakan sebagai status aliran. Anda dapat mengonfigurasi kebijakan ukuran dan penyimpanan bagi aliran tersebut untuk mengontrol umur pesan status. Contoh:
+ Tetapkan `Persistence` ke `Memory` jika Anda tidak ingin menyimpan pesan status.
+ Tetapkan `StrategyOnFull` ke `OverwriteOldestData` agar pesan status baru tidak hilang.

Kemudian, buat atau perbarui aliran ekspor untuk menggunakan status aliran. Secara khusus, atur properti konfigurasi status pada konfigurasi ekspor `S3ExportTaskExecutorConfig` aliran. Pengaturan ini memberitahu stream manager untuk menuliskan pesan status tentang tugas ekspor ke status aliran. Di objek `StatusConfig`, tentukan nama status pengaliran dan tingkat verbositasnya. Nilai yang didukung berikut berkisar dari verbositas paling kecil (`ERROR`) hingga verbositas tertinggi (`TRACE`). Default-nya adalah `INFO`.
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`

Contoh alur kerja berikut menunjukkan bagaimana komponen Greengrass mungkin menggunakan status aliran untuk memantau status ekspor.

1. Seperti yang dijelaskan dalam alur kerja sebelumnya, sebuah komponen Greengrass [menambahkan tugas ekspor](work-with-streams.md#streammanagerclient-append-message-export-task) ke aliran yang dikonfigurasi untuk menuliskan pesan status tentang tugas ekspor ke aliran status. Operasi append mengembalikan nomor urut yang mewakili ID tugas.

1. Komponen Greengrass [membaca pesan](work-with-streams.md#streammanagerclient-read-messages) secara berurutan dari aliran status, dan kemudian menyaring pesan berdasarkan nama aliran dan ID tugas atau berdasarkan properti tugas ekspor dari konteks pesan. Sebagai contoh, komponen Greengrass dapat memfilter dengan URL file input dari tugas ekspor, yang diwakili oleh objek `S3ExportTaskDefinition` dalam konteks pesan tersebut.

   Kode status berikut menunjukkan bahwa tugas ekspor telah mencapai keadaan lengkap:
   + `Success`. Upload berhasil diselesaikan.
   + `Failure`. Stream manager mengalami kesalahan, misalnya, bucket yang ditentukan tidak ada. Setelah menyelesaikan masalah, Anda dapat menambahkan tugas ekspor ke aliran lagi.
   + `Canceled`. Tugas dihentikan karena definisi aliran atau ekspor dihapus, atau periode time-to-live (TTL) tugas berakhir.
**catatan**  
Tugas mungkin juga memiliki status `InProgress` atau `Warning`. Stream manager mengeluarkan peringatan ketika peristiwa mengembalikan kesalahan yang tidak mempengaruhi pelaksanaan tugas. Sebagai contoh, kegagalan untuk membersihkan sebagian unggahan akan mengembalikan peringatan.

1. Setelah tugas ekspor selesai, komponen Greengrass dapat menghapus file input yang sesuai.

Contoh berikut menunjukkan bagaimana komponen Greengrass mungkin membaca dan memproses pesan status.

------
#### [ 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.
```

[Referensi Python SDK: read\$1messages \$1 [StatusMessage](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.data.html#stream_manager.data.StatusMessage)](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-python/_apidoc/stream_manager.streammanagerclient.html#stream_manager.streammanagerclient.StreamManagerClient.read_messages)

------
#### [ 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.
}
```

Referensi SDK Java: [ReadMessages \$1 [StatusMessage](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/model/StatusMessage.html)](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#readMessages-java.lang.String-com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions-)

------
#### [ 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.
});
```

Referensi Node.js SDK: [ReadMessages \$1 [StatusMessage](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.StatusMessage.html)](https://aws-greengrass.github.io/aws-greengrass-stream-manager-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#readMessages)

------