

Pemberitahuan akhir dukungan: Pada 7 Oktober 2026, AWS akan menghentikan dukungan untuk. AWS IoT Greengrass Version 1 Setelah 7 Oktober 2026, Anda tidak akan lagi dapat mengakses sumber daya. AWS IoT Greengrass V1 Untuk informasi lebih lanjut, silakan kunjungi [Migrasi dari AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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

# Mengelola aliran data pada inti AWS IoT Greengrass
<a name="stream-manager"></a>

AWS IoT Greengrass stream manager membuatnya lebih mudah dan lebih dapat diandalkan untuk mentransfer data IoT volume tinggi ke file. AWS Cloud Manajer aliran memproses aliran data secara lokal dan mengekspornya ke secara otomatis. AWS Cloud Fitur ini terintegrasi dengan skenario tepi umum, seperti inferensi pembelajaran mesin (ML), di mana data diproses dan dianalisis secara lokal sebelum diekspor ke AWS Cloud atau tujuan penyimpanan lokal.

Pengelola pengaliran memudahkan pengembangan aplikasi. Aplikasi IoT Anda dapat menggunakan mekanisme standar untuk memproses volume tinggi pengaliran dan mengelola kebijakan penyimpanan data lokal bukannya membangun fungsionalitas manajemen pengaliran kustom. Aplikasi IoT dapat membaca dan menulis ke aliran. Mereka dapat menentukan kebijakan untuk jenis penyimpanan, ukuran, dan retensi data per pengaliran untuk mengontrol cara pengelola pengaliran memproses dan mengekspor pengaliran.

Pengelola pengaliran dirancang untuk bekerja di lingkungan dengan konektivitas intermiten atau terbatas. Anda dapat menentukan penggunaan bandwidth, perilaku timeout, dan cara aliran data ditangani ketika core terhubung atau terputus. Untuk data penting, Anda dapat menetapkan prioritas untuk mengontrol urutan pengaliran yang diekspor ke AWS Cloud.

Anda dapat mengonfigurasi ekspor otomatis ke AWS Cloud penyimpanan atau pemrosesan dan analisis lebih lanjut. Stream manager mendukung ekspor ke AWS Cloud tujuan berikut.<a name="supported-export-destinations"></a>
+ Saluran di 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*.
+ Aliran di Kinesis Data Streams. <a name="aks-export-destination"></a>Kinesis Data Streams umumnya digunakan untuk mengumpulkan data volume tinggi dan memuatnya ke dalam gudang data atau klaster map-reduce. Untuk informasi lebih lanjut, lihat [Apa itu Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/what-is-this-service.html) dalam *Panduan Developer Amazon Kinesis*.
+ Properti aset di 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*.
+ Objek dalam Amazon S3. <a name="s3-export-destination"></a>Anda dapat menggunakan Amazon S3 untuk menyimpan dan mengambil data dalam jumlah besar. Untuk informasi lebih lanjut, lihat [Apa Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) dalam *Panduan Developer Amazon Simple Storage Service*.

## Alur kerja manajemen aliran
<a name="stream-manager-workflow"></a>

Aplikasi IoT Anda berinteraksi dengan pengelola aliran melalui AWS IoT Greengrass Core SDK. Dalam alur kerja yang sederhana, fungsi Lambda yang ditetapkan pengguna berjalan pada core Greengrass mengonsumsi data IoT, seperti suhu time-series dan tekanan metrik. Fungsi Lambda mungkin memfilter atau mengompres data dan kemudian memanggil AWS IoT Greengrass Core SDK untuk menulis data ke stream di stream manager. Pengelola pengaliran dapat mengekspor pengaliran ke AWS Cloud secara otomatis, berdasarkan kebijakan yang ditetapkan untuk pengaliran. Fungsi Lambda yang ditetapkan pengguna juga dapat mengirim data langsung ke basis data lokal atau repositori penyimpanan.

Aplikasi IoT Anda dapat mencakup beberapa fungsi Lambda yang ditetapkan pengguna yang membaca atau menulis ke pengaliran. Ini fungsi Lambda lokal dapat membaca dan menulis ke pengaliran untuk memfilter, agregat, dan menganalisis data lokal. Hal ini mengizinkan untuk merespons dengan cepat peristiwa lokal dan mengekstraksi informasi berharga sebelum data ditransfer dari core ke cloud atau tujuan lokal.

Contoh alur kerja seperti yang ditunjukkan dalam diagram berikut.

![\[Diagram alur kerja pengelola pengaliran.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/stream-manager-architecture.png)


Untuk menggunakan pengelola pengaliran, mulai dengan mengonfigurasi parameter pengelola pengaliran untuk menentukan pengaturan waktu aktif tingkat grup yang berlaku untuk semua pengaliran pada core Greengrass. Pengaturan yang dapat disesuaikan ini mengizinkan Anda mengontrol cara pengelola pengaliran menyimpan, memproses, dan mengekspor pengaliran berdasarkan kebutuhan bisnis dan kendala lingkungan Anda. Untuk informasi lebih lanjut, lihat [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md).

Setelah Anda mengonfigurasi pengelola pengaliran, Anda dapat membuat dan men-deploy aplikasi IoT Anda. Ini biasanya merupakan fungsi Lambda yang ditentukan pengguna yang digunakan `StreamManagerClient` di AWS IoT Greengrass Core SDK untuk membuat dan berinteraksi dengan aliran. Selama pembuatan pengaliran, fungsi Lambda mendefinisikan kebijakan per-pengaliran, seperti tujuan ekspor, prioritas, dan ketekunan. Untuk informasi lebih lanjut, termasuk cuplikan kode untuk `StreamManagerClient` operasi, lihat [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md).

Untuk tutorial yang mengonfigurasi alur kerja sederhana, lihat [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md) atau [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md).

## Persyaratan
<a name="stream-manager-requirements"></a>

Persyaratan berikut berlaku untuk penggunaan stream manager:
+ Anda harus menggunakan perangkat lunak AWS IoT Greengrass Core v1.10 atau yang lebih baru, dengan manajer aliran diaktifkan. Untuk informasi selengkapnya, lihat [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md).

  <a name="stream-manager-not-supported-openwrt-para"></a>Manajer aliran tidak didukung pada OpenWrt distribusi.
+ Waktu aktif Java 8 (JDK 8) harus diinstal pada core.<a name="install-java8-runtime-general"></a>
  + Untuk distribusi berbasis Debian (termasuk Raspbian) atau distribusi berbasis Ubuntu, jalankan perintah berikut:

    ```
    sudo apt install openjdk-8-jdk
    ```
  + Untuk distribusi berbasis Red Hat (termasuk Amazon Linux), jalankan perintah berikut:

    ```
    sudo yum install java-1.8.0-openjdk
    ```

    Untuk informasi lebih lanjut, lihat [ Cara mengunduh dan menginstal paket OpenJDK prebuilt](https://openjdk.java.net/install/) dalam dokumentasi OpenJDK.

   
+ Stream manager membutuhkan minimal 70 MB RAM selain perangkat lunak AWS IoT Greengrass inti dasar Anda. Kebutuhan memori total Anda tergantung pada beban kerja Anda.

   
+ Fungsi Lambda yang ditetapkan pengguna harus menggunakan [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core) untuk berinteraksi dengan pengelola pengaliran. AWS IoT Greengrass Core SDK tersedia dalam beberapa bahasa, tetapi hanya versi berikut yang mendukung operasi pengelola aliran:<a name="streammanagerclient-sdk-versions"></a>
  + SDK Java (v1.4.0 atau yang lebih baru)
  + Python SDK (v1.5.0 atau yang lebih baru)
  + Node.js SDK (v1.6.0 atau yang lebih baru)

  Unduh versi SDK yang sesuai dengan fungsi waktu aktif Lambda Anda dan memasukkannya ke dalam paket deployment fungsi Lambda Anda.
**catatan**  
 AWS IoT Greengrass Core SDK untuk Python membutuhkan Python 3.7 atau yang lebih baru dan memiliki dependensi paket lainnya. Untuk informasi lebih lanjut, lihat [Buat paket deployment fungsi Lambda (konsol)](stream-manager-console.md#stream-manager-console-create-deployment-package) atau [Buat paket deployment fungsi Lambda (CLI)](stream-manager-cli.md#stream-manager-cli-create-deployment-package).
+ Jika Anda menentukan tujuan AWS Cloud ekspor untuk aliran, Anda harus membuat target ekspor dan memberikan izin akses dalam peran grup Greengrass. Tergantung pada tujuan, persyaratan lain mungkin juga berlaku. Untuk informasi selengkapnya, lihat:<a name="export-destinations-links"></a>
  + [AWS IoT Analytics saluran](stream-export-configurations.md#export-to-iot-analytics)
  + [Amazon Kinesis data streams](stream-export-configurations.md#export-to-kinesis)
  + [AWS IoT SiteWise properti aset](stream-export-configurations.md#export-to-iot-sitewise)
  + [Objek Amazon S3](stream-export-configurations.md#export-to-s3)

  Anda bertanggung jawab untuk memelihara AWS Cloud sumber daya ini.

## Keamanan data
<a name="stream-manager-security"></a>

Bila Anda menggunakan stream manager, perhatikan pertimbangan keamanan berikut ini.

### Keamanan data lokal
<a name="stream-manager-security-stream-data"></a>

AWS IoT Greengrass tidak mengenkripsi data aliran saat istirahat atau dalam transit secara lokal antar komponen pada perangkat inti.
+ **Data at rest**. Data pengaliran disimpan secara lokal dalam direktori penyimpanan pada core Greengrass. Untuk keamanan data, AWS IoT Greengrass bergantung pada izin file Unix dan enkripsi full-disk, jika diaktifkan. Anda dapat menggunakan parameter opsional [STREAM\$1MANAGER\$1STORE\$1ROOT\$1DIR](configure-stream-manager.md#STREAM_MANAGER_STORE_ROOT_DIR) untuk menentukan direktori penyimpanan. Jika Anda mengubah parameter ini nanti untuk menggunakan direktori penyimpanan yang berbeda, AWS IoT Greengrass tidak menghapus direktori penyimpanan sebelumnya atau isinya.

   
+ **Data dalam transit secara lokal**. AWS IoT Greengrass tidak mengenkripsi data aliran dalam transit lokal pada inti antara sumber data, fungsi Lambda, Core SDK, AWS IoT Greengrass dan manajer aliran.

   
+ **Data dalam perjalanan ke AWS Cloud**. Aliran data diekspor oleh manajer aliran untuk AWS Cloud menggunakan enkripsi klien AWS layanan standar dengan Transport Layer Security (TLS).

Untuk informasi selengkapnya, lihat [Enkripsi data](data-encryption.md).

### Autentikasi klien
<a name="stream-manager-security-client-authentication"></a>

Klien manajer aliran menggunakan AWS IoT Greengrass Core SDK untuk berkomunikasi dengan manajer aliran. Ketika autentikasi klien diaktifkan, hanya fungsi Lambda dalam grup Greengrass dapat berinteraksi dengan pengaliran di pengelola pengaliran. Ketika autentikasi klien dinonaktifkan, setiap proses yang berjalan pada core Greengrass (seperti [kontainer Docker](docker-app-connector.md)) dapat berinteraksi dengan pengaliran di pengelola pengaliran. Anda harus menonaktifkan autentikasi hanya jika kasus bisnis Anda memerlukannya.

Anda menggunakan parameter [STREAM\$1MANAGER\$1AUTHENTICATE\$1CLIENT](configure-stream-manager.md#STREAM_MANAGER_AUTHENTICATE_CLIENT) untuk mengatur mode autentikasi klien. Anda dapat mengonfigurasi parameter ini dari konsol atau AWS IoT Greengrass API. Perubahan berlaku setelah grup di-deploy.


****  

|   | Diaktifkan | Dinonaktifkan | 
| --- | --- | --- | 
| Nilai parameter | `true` (default dan disarankan) | `false` | 
| Klien yang diizinkan | Fungsi Lambda yang ditetapkan pengguna dalam grup Greengrass | Fungsi Lambda yang ditetapkan pengguna dalam grup Greengrass Proses lain yang berjalan di perangkat core Greengrass | 

## Lihat juga
<a name="stream-manager-see-also"></a>
+ [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md)
+ [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md)
+ [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md)
+ [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md)
+ [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md)

# Konfigurasikan pengelola AWS IoT Greengrass aliran
<a name="configure-stream-manager"></a>

Pada AWS IoT Greengrass intinya, manajer aliran dapat menyimpan, memproses, dan mengekspor data perangkat IoT. Pengelola pengaliran menyediakan parameter yang Anda gunakan untuk mengonfigurasi waktu aktif pengaturan tingkat grup. Pengaturan ini berlaku untuk semua pengaliran pada core Greengrass. Anda dapat menggunakan AWS IoT konsol atau AWS IoT Greengrass API untuk mengonfigurasi pengaturan pengelola aliran. Perubahan berlaku setelah grup di-deploy.

**catatan**  
Setelah Anda mengonfigurasi pengelola pengaliran, Anda dapat membuat dan men-deploy aplikasi IoT yang berjalan pada core Greengrass dan berinteraksi dengan pengelola pengaliran. Aplikasi IoT ini biasanya ditetapkan pengguna fungsi Lambda. Untuk informasi selengkapnya, lihat [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md).

## Parameter pengelola pengaliran
<a name="stream-manager-parameters"></a>

Pengelola pengaliran menyediakan parameter berikut yang mengizinkan Anda untuk menentukan pengaturan tingkat grup. Semua parameter bersifat opsional.

**Direktori penyimpanan**  <a name="STREAM_MANAGER_STORE_ROOT_DIR"></a>
Nama parameter: `STREAM_MANAGER_STORE_ROOT_DIR`  
Path absolut dari direktori lokal yang digunakan untuk menyimpan pengaliran. Nilai ini harus dimulai dengan garis miring ke depan (misalnya, `/data`).  
Untuk informasi tentang cara mengamankan data aliran, lihat [Keamanan data lokal](stream-manager.md#stream-manager-security-stream-data).  
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Port server**  
Nama parameter: `STREAM_MANAGER_SERVER_PORT`  
Nomor port lokal yang digunakan untuk berkomunikasi dengan stream manager. Default-nya adalah `8088`.  
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Otentikasi klien**  <a name="STREAM_MANAGER_AUTHENTICATE_CLIENT"></a>
Nama parameter: `STREAM_MANAGER_AUTHENTICATE_CLIENT`  
Menunjukkan apakah klien harus diautentikasi untuk berinteraksi dengan stream manager. Semua interaksi antara klien dan manajer aliran dikendalikan oleh AWS IoT Greengrass Core SDK. Parameter ini menentukan klien yang dapat memanggil AWS IoT Greengrass Core SDK untuk bekerja dengan pengaliran. Untuk informasi selengkapnya, lihat [Autentikasi klien](stream-manager.md#stream-manager-security-client-authentication).  
Nilai yang valid adalah `true` atau `false`. Default-nya adalah `true` (direkomendasikan).  
+ `true`. Mengizinkan hanya fungsi Greengrass Lambda sebagai klien. Klien fungsi Lambda menggunakan protokol AWS IoT Greengrass inti internal untuk mengautentikasi dengan Core SDK. AWS IoT Greengrass 
+ `false`. Memungkinkan setiap proses yang berjalan pada AWS IoT Greengrass inti menjadi klien. Jangan diatur ke `false` kecuali kasus bisnis Anda memerlukannya. Sebagai contoh, atur nilai ini ke `false` hanya jika proses non-Lambda pada perangkat core harus berkomunikasi langsung dengan pengelola pengaliran, seperti [kontainer Docker](docker-app-connector.md) berjalan pada core.
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Bandwidth maksimum**  
Nama parameter: `STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH`  
Bandwidth maksimum rata-rata (dalam kilobit per detik) yang dapat digunakan untuk mengekspor data. Default ini memungkinkan penggunaan bandwidth yang tersedia tanpa batas.  
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Ukuran kolam benang**  
Nama parameter: `STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE`  
Jumlah maksimum utas aktif yang dapat digunakan untuk mengekspor data. Default-nya adalah `5`.  
Ukuran optimal tergantung pada perangkat keras Anda, volume aliran, dan jumlah yang direncanakan dari aliran ekspor. Jika kecepatan ekspor lambat, Anda dapat menyesuaikan pengaturan ini untuk menemukan ukuran optimal untuk perangkat keras dan kasus bisnis Anda. CPU dan memori perangkat keras inti Anda merupakan faktor pembatas. Untuk memulai, Anda dapat mencoba menetapkan nilai ini sama dengan jumlah inti prosesor pada perangkat.  
Hati-hati untuk tidak menetapkan ukuran yang lebih tinggi dari yang dapat didukung perangkat keras Anda. Setiap pengaliran mengonsumsi sumber daya perangkat keras, sehingga Anda harus mencoba untuk membatasi jumlah pengaliran ekspor pada perangkat dibatasi.  
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Argumen JVM**  
Nama parameter: `JVM_ARGS`  
Argumen Mesin Virtual Java kustom yang akan disampaikan ke stream manager saat startup. Beberapa argumen harus dipisahkan oleh spasi.  
Gunakan parameter ini hanya ketika Anda harus menimpa pengaturan default yang digunakan oleh JVM. Misalnya, Anda mungkin perlu meningkatkan ukuran timbunan default jika berencana mengekspor sejumlah besar pengaliran.  
Versi AWS IoT Greengrass Inti Minimum: 1.10.0

**Direktori file input hanya-baca**  <a name="stream-manager-read-only-directories"></a>
Nama parameter: `STREAM_MANAGER_READ_ONLY_DIRS`  
Daftar dipisahkan koma jalur absolut ke direktori di luar sistem file root yang menyimpan file input. Pengelola pengaliran membaca dan mengunggah file ke Amazon S3 dan mount direktori sebagai baca-saja. Untuk informasi lebih lanjut tentang mengekspor ke Amazon S3, lihat [Objek Amazon S3](stream-export-configurations.md#export-to-s3).  
Gunakan parameter ini hanya jika kondisi berikut benar:  
+ Direktori file input untuk pengaliran yang ekspor ke Amazon S3 adalah di salah satu lokasi berikut:
  + Partisi selain sistem file root.
  + Di bawah `/tmp` pada sistem file root.
+ Sebuah [Kontainerisasi default](lambda-group-config.md#lambda-containerization-groupsettings) dari grup Greengrass adalah **kontainer Greengrass**.
Nilai contoh: `/mnt/directory-1,/mnt/directory-2,/tmp`  
Versi AWS IoT Greengrass Inti Minimum: 1.11.0

**Ukuran minimum untuk upload multipart**  <a name="stream-manager-minimum-part-size"></a>
Nama parameter: `STREAM_MANAGER_EXPORTER_S3_DESTINATION_MULTIPART_UPLOAD_MIN_PART_SIZE_BYTES`  
Ukuran minimum (dalam byte) dari bagian dalam unggahan multipart ke Amazon S3. Stream manager menggunakan pengaturan ini dan ukuran file inputnya untuk menentukan bagaimana melakukan batch data dalam permintaan PUT multipart. Nilai minimum dan default adalah `5242880` byte (5 MB).  
Pengelola pengaliran menggunakan `sizeThresholdForMultipartUploadBytes` properti untuk menentukan apakah akan mengekspor ke Amazon S3 sebagai unggahan multipart atau tunggal. Fungsi Lambda yang ditentukan pengguna menetapkan ambang batas ini ketika mereka membuat pengaliran yang mengekspor ke Amazon S3. Ambang batas default adalah 5 MB.
Versi AWS IoT Greengrass Inti Minimum: 1.11.0

## Konfigurasikan pengaturan pengelola pengaliran (konsol)
<a name="configure-stream-manager-console"></a>

Anda dapat menggunakan AWS IoT konsol untuk tugas-tugas manajemen berikut:
+ [Periksa apakah pengelola pengaliran diaktifkan](#check-stream-manager-console)
+ [Mengaktifkan atau menonaktifkan pengelola pengaliran selama pembuatan grup](#enable-stream-manager-console-new-group)
+ [Aktifkan atau Nonaktifkan pengelola pengaliran untuk grup yang ada](#enable-stream-manager-console-existing-group)
+ [Ubah pengaturan pengelola pengaturan](#change-stream-manager-console)

Perubahan berlaku setelah grup Greengrass di-deploy. Untuk tutorial yang menunjukkan cara untuk men-deploy grup Greengrass yang berisi fungsi Lambda yang berinteraksi dengan pengelola pengaliran, lihat [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md).

**catatan**  <a name="ggstreammanager-function-config-console"></a>
Ketika Anda menggunakan konsol untuk mengaktifkan pengelola pengaliran dan men-deploy grup, ukuran memori untuk pengelola pengaliran diatur ke 4194304 KB (4 GB) secara default. Kami merekomendasikan Anda mengatur ukuran memori ke setidaknya 128000 KB.

 

### Untuk memeriksa apakah pengelola pengaliran diaktifkan (konsol)
<a name="check-stream-manager-console"></a>

1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

1. <a name="group-choose-target-group"></a>Pilih grup target.

1. Pilih tab **Fungsi Lambda**.

1. **Di bawah **fungsi Sistem Lambda**, pilih **Stream manager**, dan pilih Edit.**

1. Periksa status diaktifkan atau dinonaktifkan. Pengaturan pengelola pengaliran kustom yang dikonfigurasi juga ditampilkan.

 

### Untuk mengaktifkan atau menonaktifkan pengelola pengaliran selama pembuatan grup (konsol)
<a name="enable-stream-manager-console-new-group"></a>

1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

1. Pilih **Buat group**. Pilihan Anda pada halaman selanjutnya menentukan cara mengonfigurasi pengelola pengaliran untuk grup.

1. Lanjutkan melalui **Nama Grup Anda** dan pilih **halaman inti Greengrass**.

1. Pilih **Buat grup**.

1. **Pada halaman konfigurasi grup, pilih tab **Fungsi Lambda**, pilih **Manajer aliran**, dan pilih Edit.**
   + Untuk mengaktifkan pengelola aliran dengan pengaturan default, pilih **Aktifkan dengan pengaturan default**.

      
   + Untuk mengaktifkan pengelola pengaliran dengan pengaturan kustom, pilih **Kustomkan pengaturan**.

     1. Pada halaman **Configure Stream manager**, pilih **Aktifkan dengan pengaturan khusus**.

     1. Di bawah **Pengaturan kustom**, masukkan nilai untuk parameter pengelola pengaliran. Untuk informasi selengkapnya, lihat [Parameter pengelola pengaliran](#stream-manager-parameters). Biarkan bidang kosong AWS IoT Greengrass untuk memungkinkan penggunaan nilai defaultnya.

         
   + Untuk menonaktifkan pengelola aliran, pilih **Nonaktifkan**.

     1. Pada halaman **Konfigurasi pengelola pengaliran** ini, pilih **Nonaktifkan**.

         

1. Pilih **Simpan**.

1. <a name="continue-create-group"></a>Lanjutkan melalui halaman yang tersisa untuk membuat grup Anda.

1. Di halaman **Perangkat klien**, unduh sumber daya keamanan Anda, tinjau informasi, lalu pilih **Selesai**.
**catatan**  
Ketika pengelola pengaliran diaktifkan, Anda harus [menginstal waktu aktif Java 8](stream-manager.md#stream-manager-requirements) pada perangkat core sebelum Anda men-deploy grup.

 

### Untuk mengaktifkan atau menonaktifkan pengelola pengaliran untuk grup yang sudah ada (konsol)
<a name="enable-stream-manager-console-existing-group"></a>

1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

1. <a name="group-choose-target-group"></a>Pilih grup target.

1. Pilih tab **Fungsi Lambda**.

1. **Di bawah **fungsi Sistem Lambda**, pilih **Stream manager**, dan pilih Edit.**

1. Periksa status diaktifkan atau dinonaktifkan. Pengaturan pengelola pengaliran kustom yang dikonfigurasi juga ditampilkan.

 

### Untuk mengubah pengaturan pengelola pengaliran (konsol)
<a name="change-stream-manager-console"></a>

1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

1. <a name="group-choose-target-group"></a>Pilih grup target.

1. Pilih tab **Fungsi Lambda**.

1. **Di bawah **fungsi Sistem Lambda**, pilih **Stream manager**, dan pilih Edit.**

1. Periksa status diaktifkan atau dinonaktifkan. Pengaturan pengelola pengaliran kustom yang dikonfigurasi juga ditampilkan.

1. Pilih **Simpan**.

## Konfigurasi pengaturan pengelola pengaliran (CLI)
<a name="configure-stream-manager-cli"></a>

Di AWS CLI, gunakan fungsi sistem `GGStreamManager` Lambda untuk mengkonfigurasi manajer aliran. Fungsi Sistem Lambda adalah komponen dari perangkat lunak AWS IoT Greengrass Core. Untuk pengelola pengaliran dan beberapa fungsi sistem Lambda lainnya, Anda dapat mengonfigurasi fungsi Greengrass dengan mengelola yang sesuai `Function` dan `FunctionDefinitionVersion` objek dalam grup Greengrass. Untuk informasi selengkapnya, lihat [Ikhtisar model objek AWS IoT Greengrass grup](deployments.md#api-overview).

Anda dapat menggunakan API untuk tugas-tugas manajemen berikut. Contoh di bagian ini menunjukkan cara menggunakan AWS CLI, tetapi Anda juga dapat memanggil AWS IoT Greengrass API secara langsung atau menggunakan AWS SDK.
+ [Periksa apakah pengelola pengaliran diaktifkan](#check-stream-manager-cli)
+ [Mengaktifkan, menonaktifkan, atau mengonfigurasi pengelola pengaliran](#enable-stream-manager-cli)

Perubahan berlaku setelah grup di-deploy. Untuk tutorial yang menunjukkan cara untuk men-deploy grup Greengrass dengan fungsi Lambda yang berinteraksi dengan pengelola pengaliran, lihat [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md).

**Tip**  
Untuk melihat apakah pengelola pengaliran diaktifkan dan berjalan dari perangkat core Anda, Anda dapat menjalankan perintah berikut di dalam terminal pada perangkat.  

```
ps aux | grep -i 'streammanager'
```

 

### Untuk memeriksa apakah pengelola pengaliran diaktifkan (CLI)
<a name="check-stream-manager-cli"></a>

Pengelola pengaliran diaktifkan jika versi definisi fungsi yang di-deploy Anda mencakup `GGStreamManager` fungsi Lambda sistem. Untuk memeriksa, lakukan hal berikut;

1. <a name="get-group-id-latestversion"></a>Dapatkan IDs versi grup dan grup Greengrass target. Prosedur ini mengasumsikan bahwa ini adalah versi grup dan grup terbaru. Query berikut mengembalikan grup yang paling baru dibuat.

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   Atau, Anda dapat melakukan query berdasarkan nama. Nama grup tidak perlu unik, sehingga beberapa grup mungkin ditampilkan.

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**catatan**  
<a name="find-group-ids-console"></a>Anda juga dapat menemukan nilai-nilai ini di AWS IoT konsol. ID grup ditampilkan pada halaman **Pengaturan** grup. Versi grup IDs ditampilkan di tab **Deployment** grup.

1. <a name="copy-group-id-latestversion"></a>Salin nilai `Id` dan `LatestVersion` dari grup target di dalam output.

1. <a name="get-latest-group-version"></a>Dapatkan versi grup terbaru.
   + Ganti *group-id* dengan `Id` yang Anda salin.
   + Ganti *latest-group-version-id* dengan `LatestVersion` yang Anda salin.

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. Dari `FunctionDefinitionVersionArn` dalam output, dapatkan IDs definisi fungsi dan versi definisi fungsi.
   + ID definisi fungsi adalah GUID yang mengikuti `functions` segmen di dalam Amazon Resource Name (ARN).
   + ID versi definisi fungsi adalah GUID yang mengikuti `versions` segmen di dalam ARN.

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/function-definition-id/versions/function-definition-version-id
   ```

1. Dapatkan versi definisi fungsi.
   + Ganti *function-definition-id* dengan ID definisi fungsi.
   + Ganti *function-definition-version-id* dengan ID versi definisi fungsi.

   ```
   aws greengrass get-function-definition-version \
   --function-definition-id function-definition-id \
   --function-definition-version-id function-definition-version-id
   ```

Jika `functions` array di dalam output termasuk `GGStreamManager` fungsi, maka pengelola pengaliran diaktifkan. Setiap variabel lingkungan yang didefinisikan untuk fungsi mewakili pengaturan kustom untuk pengelola pengaliran.

### Untuk mengaktifkan, menonaktifkan, atau mengonfigurasi pengelola pengaliran (CLI)
<a name="enable-stream-manager-cli"></a>

Di AWS CLI, gunakan fungsi sistem `GGStreamManager` Lambda untuk mengkonfigurasi manajer aliran. Perubahan berlaku setelah Anda men-deploy grup.
+ Untuk mengaktifkan pengelola pengaliran, sertakan `GGStreamManager` di dalam `functions` array versi definisi fungsi Anda. Untuk mengonfigurasi pengaturan kustom, definisikan variabel lingkungan yang sesuai untuk [parameter pengelola pengaliran](#stream-manager-parameters).
+ Untuk menonaktifkan pengelola pengaliran, hapus `GGStreamManager` dari `functions` array versi definisi fungsi Anda.

**Manajer streaming dengan pengaturan default**  
Contoh konfigurasi berikut mengaktifkan pengelola pengaliran dengan pengaturan default. Ini menetapkan ID fungsi secara paksa ke `streamManager`.  

```
{
    "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1",
    "FunctionConfiguration": {
        "MemorySize": 4194304,
        "Pinned": true,
        "Timeout": 3
    },
    "Id": "streamManager"
}
```
Untuk properti `FunctionConfiguration` ini, Anda mungkin mengetahui hal berikut:  
+ `MemorySize` diatur ke 4194304 KB (4 GB) dengan pengaturan default. Anda selalu dapat mengubah nilai ini. Kami menganjurkan Anda untuk mengatur `MemorySize` ke setidaknya 128000 KB.
+ `Pinned` harus diatur ke `true`.
+ `Timeout` diperlukan oleh versi definisi fungsi, tetapi `GGStreamManager` tidak menggunakannya.

**Manajer streaming dengan pengaturan khusus**  <a name="enable-stream-manager-custom-settings"></a>
Contoh konfigurasi berikut mengaktifkan manajer pengaliran dengan nilai-nilai kustom untuk direktori penyimpanan, server port, dan parameter ukuran kolam thread.  

```
{
    "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1",
    "FunctionConfiguration": {
        "Environment": {
            "Variables": {
                "STREAM_MANAGER_STORE_ROOT_DIR": "/data",
                "STREAM_MANAGER_SERVER_PORT": "1234",
                "STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE": "4"
            }
        },
        "MemorySize": 4194304,
        "Pinned": true,
        "Timeout": 3
    },
    "Id": "streamManager"
}
```
AWS IoT Greengrass menggunakan nilai default untuk [parameter manajer aliran](#stream-manager-parameters) yang tidak ditentukan sebagai variabel lingkungan.

**Manajer streaming dengan pengaturan khusus untuk ekspor Amazon S3**  <a name="enable-stream-manager-custom-settings-s3"></a>
Contoh konfigurasi berikut mengaktifkan pengelola pengaliran dengan nilai-nilai kustom untuk direktori unggah dan parameter ukuran unggah multi-bagian minimum.  

```
{
    "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1",
    "FunctionConfiguration": {
        "Environment": {
            "Variables": {
                "STREAM_MANAGER_READ_ONLY_DIRS": "/mnt/directory-1,/mnt/directory-2,/tmp",
                "STREAM_MANAGER_EXPORTER_S3_DESTINATION_MULTIPART_UPLOAD_MIN_PART_SIZE_BYTES": "10485760"
            }
        },
        "MemorySize": 4194304,
        "Pinned": true,
        "Timeout": 3
    },
    "Id": "streamManager"
}
```

 

**Untuk mengaktifkan, menonaktifkan, atau mengonfigurasi pengelola pengaliran (CLI)**

1. <a name="get-group-id-latestversion"></a>Dapatkan IDs versi grup dan grup Greengrass target. Prosedur ini mengasumsikan bahwa ini adalah versi grup dan grup terbaru. Query berikut mengembalikan grup yang paling baru dibuat.

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   Atau, Anda dapat melakukan query berdasarkan nama. Nama grup tidak perlu unik, sehingga beberapa grup mungkin ditampilkan.

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**catatan**  
<a name="find-group-ids-console"></a>Anda juga dapat menemukan nilai-nilai ini di AWS IoT konsol. ID grup ditampilkan pada halaman **Pengaturan** grup. Versi grup IDs ditampilkan di tab **Deployment** grup.

1. <a name="copy-group-id-latestversion"></a>Salin nilai `Id` dan `LatestVersion` dari grup target di dalam output.

1. <a name="get-latest-group-version"></a>Dapatkan versi grup terbaru.
   + Ganti *group-id* dengan `Id` yang Anda salin.
   + Ganti *latest-group-version-id* dengan `LatestVersion` yang Anda salin.

   ```
   aws greengrass get-group-version \
   --group-id group-id \
   --group-version-id latest-group-version-id
   ```

1. Salin `CoreDefinitionVersionArn` dan semua versi lainnya ARNs dari output, kecuali`FunctionDefinitionVersionArn`. Anda menggunakan nilai-nilai ini nanti ketika membuat versi grup.

1. <a name="parse-function-def-id"></a>Dari `FunctionDefinitionVersionArn` di dalam output, salin ID dari definisi fungsi. ID adalah GUID yang mengikuti `functions` segmen di dalam ARN, seperti yang ditunjukkan dalam contoh berikut.

   ```
   arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
   ```
**catatan**  
Atau, Anda dapat membuat definisi fungsi dengan menjalankan [https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html) perintah, dan kemudian menyalin ID dari output.

1. <a name="enable-stream-manager-function-definition-version"></a>Menambahkan versi definisi fungsi untuk definisi fungsi.
   + Ganti *function-definition-id* dengan `Id` yang Anda salin untuk definisi fungsi.
   + Di dalam `functions` array, masukkan semua fungsi lain yang Anda inginkan tersedia pada core Greengrass. Anda dapat menggunakan perintah `get-function-definition-version` untuk mendapatkan daftar fungsi yang ada.

      
**Aktifkan pengelola aliran dengan pengaturan default**  
Contoh berikut mengaktifkan pengelola pengaliran, dengan memasukkan `GGStreamManager` di `functions` array. Contoh ini menggunakan nilai default untuk [parameter pengelola pengaliran](#stream-manager-parameters).  

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[
           {
               "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1",
               "FunctionConfiguration": {
                   "MemorySize":  4194304,
                   "Pinned": true,
                   "Timeout": 3
               },
               "Id": "streamManager"
           },
           {    
               "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias",
               "FunctionConfiguration": {
                   "Executable": "myLambdaFunction.function_handler",
                   "MemorySize": 16000,
                   "Pinned": true,
                   "Timeout": 5
               },
               "Id": "myLambdaFunction"
           },
           ... more user-defined functions
       ]
   }'
   ```
fungsi `myLambdaFunction` di dalam contoh mewakili salah satu fungsi Lambda yang ditetapkan pengguna Anda.  
**Aktifkan pengelola aliran dengan pengaturan khusus**  
Contoh berikut mengaktifkan pengelola pengaliran dengan memasukkan fungsi `GGStreamManager` di dalam `functions` array. Semua pengaturan pengelola pengaliran bersifat opsional, kecuali jika Anda ingin mengubah nilai default. Contoh ini menunjukkan cara menggunakan variabel lingkungan untuk mengatur nilai-nilai kustom.  

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[
           {
               "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1",
               "FunctionConfiguration": {
                   "Environment": {
                       "Variables": {
                           "STREAM_MANAGER_STORE_ROOT_DIR": "/data",
                           "STREAM_MANAGER_SERVER_PORT": "1234",
                           "STREAM_MANAGER_EXPORTER_THREAD_POOL_SIZE": "4"
                       }
                   },
                   "MemorySize":  4194304,
                   "Pinned": true,
                   "Timeout": 3
               },
               "Id": "streamManager"
           },
           {    
               "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias",
               "FunctionConfiguration": {
                   "Executable": "myLambdaFunction.function_handler",
                   "MemorySize": 16000,
                   "Pinned": true,
                   "Timeout": 5
               },
               "Id": "myLambdaFunction"
           },
           ... more user-defined functions
       ]
   }'
   ```
Untuk properti `FunctionConfiguration` ini, Anda mungkin mengetahui hal berikut:  
   + `MemorySize` diatur ke 4194304 KB (4 GB) dengan pengaturan default. Anda selalu dapat mengubah nilai ini. Kami menganjurkan Anda untuk mengatur `MemorySize` ke setidaknya 128000 KB.
   + `Pinned` harus diatur ke `true`.
   + `Timeout` diperlukan oleh versi definisi fungsi, tetapi `GGStreamManager` tidak menggunakannya.  
**Nonaktifkan pengelola aliran**  
Contoh berikut menghilangkan fungsi `GGStreamManager` ini, yang menonaktifkan pengelola pengaliran.  

   ```
   aws greengrass create-function-definition-version \
   --function-definition-id function-definition-id \
   --functions '[
           {       
               "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:MyLambdaFunction:MyAlias",
               "FunctionConfiguration": {
                   "Executable": "myLambdaFunction.function_handler",
                   "MemorySize": 16000,
                   "Pinned": true,
                   "Timeout": 5
               },
               "Id": "myLambdaFunction"
           },
           ... more user-defined functions
       ]
   }'
   ```
Jika Anda tidak ingin men-deploy fungsi Lambda, Anda dapat menghilangkan versi definisi fungsi sepenuhnya.

1. <a name="copy-function-def-version-arn"></a>Salin `Arn` dari versi definisi fungsi dari output.

1. <a name="create-group-version-with-sys-lambda"></a>Buat versi grup yang berisi fungsi Lambda sistem.
   + Ganti *group-id* dengan `Id` untuk grup.
   + Ganti *core-definition-version-arn* dengan `CoreDefinitionVersionArn` yang Anda salin dari versi grup terbaru.
   + Ganti *function-definition-version-arn* dengan `Arn` yang Anda salin untuk versi definisi fungsi baru.
   + Ganti ARNs untuk komponen grup lain (misalnya, `SubscriptionDefinitionVersionArn` atau`DeviceDefinitionVersionArn`) yang Anda salin dari versi grup terbaru.
   + Hapus parameter yang tidak terpakai. Sebagai contoh, Hapus `--resource-definition-version-arn` jika versi grup Anda tidak berisi sumber daya apa pun.

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --device-definition-version-arn device-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>Salin `Version` dari output. Ini adalah ID dari versi grup baru.

1. <a name="create-group-deployment"></a>Men-deploy grup dengan versi grup baru.
   + Ganti *group-id* dengan `Id` yang Anda salin untuk grup.
   + Ganti *group-version-id* dengan `Version` yang Anda salin untuk versi grup baru.

   ```
   aws greengrass create-deployment \
   --group-id group-id \
   --group-version-id group-version-id \
   --deployment-type NewDeployment
   ```

 

Ikuti prosedur ini jika Anda ingin mengedit pengaturan pengelola pengaliran lagi nanti. Pastikan untuk membuat versi definisi fungsi yang mencakup `GGStreamManager` fungsi dengan konfigurasi yang diperbarui. Versi grup harus mereferensikan semua versi komponen ARNs yang ingin Anda terapkan ke inti. Perubahan berlaku setelah grup di-deploy.

## Lihat juga
<a name="configure-stream-manager-see-also"></a>
+ [Mengelola aliran data pada inti AWS IoT Greengrass](stream-manager.md)
+ [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md)
+ [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md)
+ [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md)
+ [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md)

# Gunakan StreamManagerClient untuk bekerja dengan aliran
<a name="work-with-streams"></a>

Fungsi Lambda yang ditentukan pengguna yang berjalan pada AWS IoT Greengrass inti dapat menggunakan `StreamManagerClient` objek di [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks) untuk membuat aliran di [pengelola aliran dan kemudian berinteraksi dengan aliran](stream-manager.md). Saat fungsi Lambda membuat aliran, fungsi ini akan menentukan AWS Cloud tujuan, prioritas, dan kebijakan ekspor dan penyimpanan data lainnya untuk aliran. Untuk mengirim data ke pengelola pengaliran, fungsi Lambda menambahkan data ke pengaliran. Jika tujuan ekspor ditentukan untuk pengaliran, pengelola pengaliran mengekspor pengaliran secara otomatis.

**catatan**  
<a name="stream-manager-clients"></a>Biasanya, klien dari pengelola pengaliran adalah fungsi Lambda yang ditetapkan pengguna. Jika kasus bisnis Anda memerlukannya, Anda juga dapat mengizinkan proses non-Lambda berjalan pada core Greengrass (sebagai contoh, wadah Docker) untuk berinteraksi dengan pengelola pengaliran. Untuk informasi selengkapnya, lihat [Autentikasi klien](stream-manager.md#stream-manager-security-client-authentication).

Cuplikan dalam topik ini menunjukkan cara klien memanggil metode `StreamManagerClient` untuk bekerja dengan aliran. Untuk rincian implementasi tentang metode dan argumen mereka, gunakan tautan ke referensi SDK yang tercantum setelah setiap cuplikan. Untuk tutorial yang mencakup fungsi Python Lambda lengkap, lihat [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md) atau [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md).

Fungsi Lambda Anda harus berjalan `StreamManagerClient` di luar dari fungsi handler. Jika berjalan di dalam handler, fungsi membuat `client` dan koneksi ke pengelola pengaliran setiap kali dipanggil.

**catatan**  
Jika Anda membuat contoh `StreamManagerClient` dalam handler, Anda harus secara tegas memanggil metode `close()` ketika `client` menyelesaikan pekerjaannya. Jika tidak, `client` akan membuat sambungan terbuka dan utas lain yang berjalan sampai skrip keluar.

`StreamManagerClient` mendukung operasi berikut:
+ [Membuat pengaliran pesan](#streammanagerclient-create-message-stream)
+ [Tambahkan pesan](#streammanagerclient-append-message)
+ [Baca pesan](#streammanagerclient-read-messages)
+ [Daftar aliran](#streammanagerclient-list-streams)
+ [Jelaskan aliran pesan](#streammanagerclient-describe-message-stream)
+ [Perbarui aliran pesan](#streammanagerclient-update-message-stream)
+ [Hapus aliran pesan](#streammanagerclient-delete-message-stream)

## Membuat pengaliran pesan
<a name="streammanagerclient-create-message-stream"></a>

Untuk membuat pengaliran, fungsi Lambda yang ditetapkan pengguna memanggil metode pembuatan dan melewati di dalam `MessageStreamDefinition` objek. Objek ini menentukan nama unik untuk pengaliran dan menentukan cara pengelola pengaliran harus menangani data baru ketika ukuran pengaliran maksimum tercapai. Anda dapat menggunakan `MessageStreamDefinition` dan jenis datanya (seperti `ExportDefinition`, `StrategyOnFull`, dan `Persistence`) untuk menentukan properti pengaliran lainnya. Ini termasuk:
+ Target AWS IoT Analytics, Kinesis Data AWS IoT SiteWise Streams, dan tujuan Amazon S3 untuk ekspor otomatis. Untuk informasi selengkapnya, lihat [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md).
+ Prioritas ekspor. Stream manager mengekspor aliran prioritas yang lebih tinggi sebelum aliran prioritas lebih rendah.
+ Ukuran batch maksimum dan interval batch untuk AWS IoT Analytics, Kinesis Data Streams AWS IoT SiteWise , dan tujuan. Stream manager mengekspor pesan ketika salah satu kondisi terpenuhi.
+ Time-to-live (TTL). Jumlah waktu untuk menjamin bahwa data aliran tersedia untuk diproses. Anda harus memastikan bahwa data dapat dikonsumsi dalam periode waktu ini. Ini bukan kebijakan penghapusan. Data mungkin tidak segera dihapus setelah periode TTL.
+ Ketekunan aliran. Pilih untuk menyimpan aliran ke sistem file untuk mempertahankan data di seluruh restart inti atau menyimpan aliran dalam memori.
+ Memulai nomor urut. Tentukan nomor urutan pesan yang akan digunakan sebagai pesan awal dalam ekspor.

Untuk informasi lebih lanjut tentang `MessageStreamDefinition`, lihat referensi SDK untuk bahasa target Anda:
+ [MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/MessageStreamDefinition.html)di Java SDK
+ [MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.MessageStreamDefinition.html)di Node.js SDK
+ [MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.MessageStreamDefinition)di Python SDK

**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. Hal ini tidak stabil atau didukung untuk digunakan di lingkungan produksi.

Setelah pengaliran dibuat, fungsi Lambda Anda dapat [tambahkan pesan](#streammanagerclient-append-message) ke pengaliran untuk mengirim data untuk ekspor dan [baca pesan](#streammanagerclient-append-message) dari pengaliran untuk pemrosesan lokal. Jumlah pengaliran yang Anda buat tergantung pada kemampuan perangkat keras dan kasus bisnis Anda. Salah satu strateginya adalah membuat aliran untuk setiap saluran target di AWS IoT Analytics atau aliran data Kinesis, meskipun Anda dapat menentukan beberapa target untuk aliran. Aliran memiliki masa pakai yang tahan lama.

### Persyaratan
<a name="streammanagerclient-create-message-stream-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

**catatan**  
Membuat stream dengan tujuan ekspor Amazon S3 AWS IoT SiteWise atau Amazon memiliki persyaratan sebagai berikut:  
<a name="streammanagerclient-min-ggc-1.11.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.11.0
<a name="streammanagerclient-min-sdk-ggc-1.11.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.6.0 \$1 Java: 1.5.0 \$1 Node.js: 1.7.0

### Contoh
<a name="streammanagerclient-create-message-stream-examples"></a>

Potongan berikut menciptakan aliran bernama `StreamName`. Potongan ini menentukan sifat aliran di `MessageStreamDefinition` dan jenis data bawahan.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    client.create_message_stream(MessageStreamDefinition(
        name="StreamName",  # Required.
        max_size=268435456,  # Default is 256 MB.
        stream_segment_size=16777216,  # Default is 16 MB.
        time_to_live_millis=None,  # By default, no TTL is enabled.
        strategy_on_full=StrategyOnFull.OverwriteOldestData,  # Required.
        persistence=Persistence.File,  # Default is File.
        flush_on_write=False,  # Default is false.
        export_definition=ExportDefinition(  # Optional. Choose where/how the stream is exported to the AWS Cloud.
            kinesis=None,
            iot_analytics=None,
            iot_sitewise=None,
            s3_task_executor=None
        )
    ))
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

[Referensi Python SDK: create\$1message\$1stream \$1 [MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.MessageStreamDefinition)](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.create_message_stream)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    client.createMessageStream(
            new MessageStreamDefinition()
                    .withName("StreamName") // Required.
                    .withMaxSize(268435456L)  // Default is 256 MB.
                    .withStreamSegmentSize(16777216L)  // Default is 16 MB.
                    .withTimeToLiveMillis(null)  // By default, no TTL is enabled.
                    .withStrategyOnFull(StrategyOnFull.OverwriteOldestData)  // Required.
                    .withPersistence(Persistence.File)  // Default is File.
                    .withFlushOnWrite(false)  // Default is false.
                    .withExportDefinition(  // Optional. Choose where/how the stream is exported to the AWS Cloud.
                            new ExportDefinition()
                                    .withKinesis(null)
                                    .withIotAnalytics(null)
                                    .withIotSitewise(null)
                                    .withS3TaskExecutor(null)
                    )
 
    );
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: \$1 [createMessageStream[MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/MessageStreamDefinition.html)](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#createMessageStream-com.amazonaws.greengrass.streammanager.model.MessageStreamDefinition-)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        await client.createMessageStream(
            new MessageStreamDefinition()
                .withName("StreamName") // Required.
                .withMaxSize(268435456)  // Default is 256 MB.
                .withStreamSegmentSize(16777216)  // Default is 16 MB.
                .withTimeToLiveMillis(null)  // By default, no TTL is enabled.
                .withStrategyOnFull(StrategyOnFull.OverwriteOldestData)  // Required.
                .withPersistence(Persistence.File)  // Default is File.
                .withFlushOnWrite(false)  // Default is false.
                .withExportDefinition(  // Optional. Choose where/how the stream is exported to the AWS Cloud.
                    new ExportDefinition()
                        .withKinesis(null)
                        .withIotAnalytics(null)
                        .withIotSitewise(null)
                        .withS3TaskExecutor(null)
                )
        );
    } 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: \$1 [createMessageStream[MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.MessageStreamDefinition.html)](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#createMessageStream)

------

Untuk informasi lebih lanjut tentang konfigurasi tujuan ekspor, lihat[Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md).

 

## Tambahkan pesan
<a name="streammanagerclient-append-message"></a>

Untuk mengirim data ke pengelola pesan untuk ekspor, fungsi Lambda Anda menambahkan data ke pengaliran target. Tujuan ekspor menentukan tipe data yang lolos untuk metode ini.

### Persyaratan
<a name="streammanagerclient-append-message-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

**catatan**  
Menambahkan pesan dengan tujuan ekspor Amazon S3 AWS IoT SiteWise atau Amazon memiliki persyaratan berikut:  
<a name="streammanagerclient-min-ggc-1.11.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.11.0
<a name="streammanagerclient-min-sdk-ggc-1.11.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.6.0 \$1 Java: 1.5.0 \$1 Node.js: 1.7.0

### Contoh
<a name="streammanagerclient-append-message-examples"></a>

#### AWS IoT Analytics atau tujuan ekspor Kinesis Data Streams
<a name="streammanagerclient-append-message-blob"></a>

Potongan berikut menambahkan pesan ke aliran bernama `StreamName`. Untuk AWS IoT Analytics atau tujuan Kinesis Data Streams, fungsi Lambda Anda menambahkan gumpalan data.

Potongan ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    sequence_number = client.append_message(stream_name="StreamName", data=b'Arbitrary bytes data')
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

Referensi SDK Python: [append\$1message](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.append_message)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    long sequenceNumber = client.appendMessage("StreamName", "Arbitrary byte array".getBytes());
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: [appendMessage](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#appendMessage-java.lang.String-byte:A-)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const sequenceNumber = await client.appendMessage("StreamName", Buffer.from("Arbitrary byte array"));
    } 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 SDK Node.js: [appendMessage](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#appendMessage)

------

#### AWS IoT SiteWise tujuan ekspor
<a name="streammanagerclient-append-message-sitewise"></a>

Potongan berikut menambahkan pesan ke aliran bernama `StreamName`. Untuk AWS IoT SiteWise tujuan, fungsi Lambda Anda menambahkan objek serial. `PutAssetPropertyValueEntry` Untuk informasi selengkapnya, lihat [Mengekspor ke AWS IoT SiteWise](stream-export-configurations.md#export-streams-to-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 *. 

Potongan ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.11.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.11.0
+ <a name="streammanagerclient-min-sdk-ggc-1.11.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.6.0 \$1 Java: 1.5.0 \$1 Node.js: 1.7.0

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    # SiteWise requires unique timestamps in all messages. Add some randomness to time and offset.

    # Note: To create a new asset property data, you should use the classes defined in the
    # greengrasssdk.stream_manager module.

    time_in_nanos = TimeInNanos(
        time_in_seconds=calendar.timegm(time.gmtime()) - random.randint(0, 60), offset_in_nanos=random.randint(0, 10000)
    )
    variant = Variant(double_value=random.random())
    asset = [AssetPropertyValue(value=variant, quality=Quality.GOOD, timestamp=time_in_nanos)]
    putAssetPropertyValueEntry = PutAssetPropertyValueEntry(entry_id=str(uuid.uuid4()), property_alias="PropertyAlias", property_values=asset)
    sequence_number = client.append_message(stream_name="StreamName", data=Util.validate_and_serialize_to_json_bytes(putAssetPropertyValueEntry))
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

[Referensi Python SDK: append\$1message \$1 [PutAssetPropertyValueEntry](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.PutAssetPropertyValueEntry)](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.append_message)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    Random rand = new Random();
    // Note: To create a new asset property data, you should use the classes defined in the
    // com.amazonaws.greengrass.streammanager.model.sitewise package.
    List<AssetPropertyValue> entries = new ArrayList<>() ;

    // IoTSiteWise requires unique timestamps in all messages. Add some randomness to time and offset.
    final int maxTimeRandomness = 60;
    final int maxOffsetRandomness = 10000;
    double randomValue = rand.nextDouble();
    TimeInNanos timestamp = new TimeInNanos()
            .withTimeInSeconds(Instant.now().getEpochSecond() - rand.nextInt(maxTimeRandomness))
            .withOffsetInNanos((long) (rand.nextInt(maxOffsetRandomness)));
    AssetPropertyValue entry = new AssetPropertyValue()
            .withValue(new Variant().withDoubleValue(randomValue))
            .withQuality(Quality.GOOD)
            .withTimestamp(timestamp);
    entries.add(entry);

    PutAssetPropertyValueEntry putAssetPropertyValueEntry = new PutAssetPropertyValueEntry()
            .withEntryId(UUID.randomUUID().toString())
            .withPropertyAlias("PropertyAlias")
            .withPropertyValues(entries);
    long sequenceNumber = client.appendMessage("StreamName", ValidateAndSerialize.validateAndSerializeToJsonBytes(putAssetPropertyValueEntry));
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi Java SDK: [AppendMessage](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#appendMessage-java.lang.String-byte:A-) \$1 [PutAssetPropertyValueEntry](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/sitewise/PutAssetPropertyValueEntry.html)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const maxTimeRandomness = 60;
        const maxOffsetRandomness = 10000;
        const randomValue = Math.random();
        // Note: To create a new asset property data, you should use the classes defined in the
        // aws-greengrass-core-sdk StreamManager module.
        const timestamp = new TimeInNanos()
            .withTimeInSeconds(Math.round(Date.now() / 1000) - Math.floor(Math.random() - maxTimeRandomness))
            .withOffsetInNanos(Math.floor(Math.random() * maxOffsetRandomness));
        const entry = new AssetPropertyValue()
            .withValue(new Variant().withDoubleValue(randomValue))
            .withQuality(Quality.GOOD)
            .withTimestamp(timestamp);

        const putAssetPropertyValueEntry =  new PutAssetPropertyValueEntry()
            .withEntryId(`${ENTRY_ID_PREFIX}${i}`)
            .withPropertyAlias("PropertyAlias")
            .withPropertyValues([entry]);
        const sequenceNumber = await client.appendMessage("StreamName", util.validateAndSerializeToJsonBytes(putAssetPropertyValueEntry));
    } 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: [AppendMessage](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#appendMessage) \$1 [PutAssetPropertyValueEntry](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.PutAssetPropertyValueEntry.html)

------

#### Tujuan ekspor Amazon S3
<a name="streammanagerclient-append-message-export-task"></a>

Cuplikan berikut menambahkan tugas ekspor ke pengaliran bernama `StreamName`. Untuk tujuan Amazon S3, fungsi Lambda Anda menambahkan `S3ExportTaskDefinition` objek berseri yang berisi informasi tentang file input sumber dan objek Amazon S3 target. Jika objek yang ditentukan tidak ada, Pengelola Pengaliran membuatnya untuk Anda. Untuk informasi selengkapnya, lihat [Mengekspor ke Amazon S3](stream-export-configurations.md#export-streams-to-s3).

Potongan ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.11.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.11.0
+ <a name="streammanagerclient-min-sdk-ggc-1.11.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.6.0 \$1 Java: 1.5.0 \$1 Node.js: 1.7.0

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    # Append an Amazon S3 Task definition and print the sequence number.
    s3_export_task_definition = S3ExportTaskDefinition(input_url="URLToFile", bucket="BucketName", key="KeyName")
    sequence_number = client.append_message(stream_name="StreamName", data=Util.validate_and_serialize_to_json_bytes(s3_export_task_definition))
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

[https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.append_message](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.append_message)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    // Append an Amazon S3 export task definition and print the sequence number.
    S3ExportTaskDefinition s3ExportTaskDefinition = new S3ExportTaskDefinition()
        .withBucket("BucketName")
        .withKey("KeyName")
        .withInputUrl("URLToFile");
    long sequenceNumber = client.appendMessage("StreamName", ValidateAndSerialize.validateAndSerializeToJsonBytes(s3ExportTaskDefinition));
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

[Referensi Java SDK: [AppendMessage \$1](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#appendMessage-java.lang.String-byte:A-) S3 ExportTaskDefinition](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/S3ExportTaskDefinition.html)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
     // Append an Amazon S3 export task definition and print the sequence number.
     const taskDefinition = new S3ExportTaskDefinition()
        .withBucket("BucketName")
        .withKey("KeyName")
        .withInputUrl("URLToFile");
        const sequenceNumber = await client.appendMessage("StreamName", util.validateAndSerializeToJsonBytes(taskDefinition)));
    } 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: [AppendMessage \$1](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#appendMessage) S3 ExportTaskDefinition](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.S3ExportTaskDefinition.html)

------

 

## Baca pesan
<a name="streammanagerclient-read-messages"></a>

Baca pesan dari suatu aliran.

### Persyaratan
<a name="streammanagerclient-read-messages-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

### Contoh
<a name="streammanagerclient-read-messages-examples"></a>

Potongan berikut membaca pesan dari aliran bernama `StreamName`. Metode membaca mengambil objek `ReadMessagesOptions` opsional yang menentukan urutan nomor untuk memulai membaca, jumlah minimum dan maksimum yang dibaca, dan batas waktu untuk membaca pesan.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    message_list = client.read_messages(
        stream_name="StreamName",
        # By default, if no options are specified, it tries to read one message from the beginning of the stream.
        options=ReadMessagesOptions(
            desired_start_sequence_number=100,
            # Try to read from sequence number 100 or greater. By default, this is 0.
            min_message_count=10,
            # Try to read 10 messages. If 10 messages are not available, then NotEnoughMessagesException is raised. By default, this is 1.
            max_message_count=100,  # Accept up to 100 messages. By default this is 1.
            read_timeout_millis=5000
            # Try to wait at most 5 seconds for the min_messsage_count to be fulfilled. By default, this is 0, which immediately returns the messages or an exception.
        )
    )
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

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

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    List<Message> messages = client.readMessages("StreamName",
            // By default, if no options are specified, it tries to read one message from the beginning of the stream.
            new ReadMessagesOptions()
                    // Try to read from sequence number 100 or greater. By default this is 0.
                    .withDesiredStartSequenceNumber(100L)
                    // Try to read 10 messages. If 10 messages are not available, then NotEnoughMessagesException is raised. By default, this is 1.
                    .withMinMessageCount(10L)
                    // Accept up to 100 messages. By default this is 1.
                    .withMaxMessageCount(100L)
                    // Try to wait at most 5 seconds for the min_messsage_count to be fulfilled. By default, this is 0, which immediately returns the messages or an exception.
                    .withReadTimeoutMillis(Duration.ofSeconds(5L).toMillis())
    );
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: [ReadMessages \$1 [ReadMessagesOptions](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/ReadMessagesOptions.html)](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-)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const messages = await client.readMessages("StreamName",
            // By default, if no options are specified, it tries to read one message from the beginning of the stream.
            new ReadMessagesOptions()
                // Try to read from sequence number 100 or greater. By default this is 0.
                .withDesiredStartSequenceNumber(100)
                // Try to read 10 messages. If 10 messages are not available, then NotEnoughMessagesException is thrown. By default, this is 1.
                .withMinMessageCount(10)
                // Accept up to 100 messages. By default this is 1.
                .withMaxMessageCount(100)
                // Try to wait at most 5 seconds for the minMessageCount to be fulfilled. By default, this is 0, which immediately returns the messages or an exception.
                .withReadTimeoutMillis(5 * 1000)
        );
    } 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 [ReadMessagesOptions](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.ReadMessagesOptions.html)](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#readMessages)

------

 

## Daftar aliran
<a name="streammanagerclient-list-streams"></a>

Dapatkan daftar aliran di stream manager.

### Persyaratan
<a name="streammanagerclient-list-streams-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

### Contoh
<a name="streammanagerclient-list-streams-examples"></a>

Potongan berikut mendapat daftar aliran (dengan nama) di stream manager.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    stream_names = client.list_streams()
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

Referensi SDK Python: [list\$1streams](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.list_streams)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    List<String> streamNames = client.listStreams();
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: [listStreams](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#listStreams--)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const streams = await client.listStreams();
    } 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 SDK Node.js: [listStreams](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#listStreams)

------

 

## Jelaskan aliran pesan
<a name="streammanagerclient-describe-message-stream"></a>

Dapatkan metadata tentang aliran, termasuk definisi, ukuran, dan status ekspor aliran.

### Persyaratan
<a name="streammanagerclient-describe-message-stream-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

### Contoh
<a name="streammanagerclient-describe-message-stream-examples"></a>

Potongan berikut mendapat metadata tentang aliran bernama `StreamName`, termasuk status definisi, ukuran, dan pengekspor aliran.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    stream_description = client.describe_message_stream(stream_name="StreamName")
    if stream_description.export_statuses[0].error_message:
        # The last export of export destination 0 failed with some error
        # Here is the last sequence number that was successfully exported
        stream_description.export_statuses[0].last_exported_sequence_number
 
    if (stream_description.storage_status.newest_sequence_number >
            stream_description.export_statuses[0].last_exported_sequence_number):
        pass
        # The end of the stream is ahead of the last exported sequence number
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

Referensi SDK Python: [describe\$1message\$1stream](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.describe_message_stream)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    MessageStreamInfo description = client.describeMessageStream("StreamName");
    String lastErrorMessage = description.getExportStatuses().get(0).getErrorMessage();
    if (lastErrorMessage != null && !lastErrorMessage.equals("")) {
        // The last export of export destination 0 failed with some error.
        // Here is the last sequence number that was successfully exported.
        description.getExportStatuses().get(0).getLastExportedSequenceNumber();
    }
 
    if (description.getStorageStatus().getNewestSequenceNumber() >
            description.getExportStatuses().get(0).getLastExportedSequenceNumber()) {
        // The end of the stream is ahead of the last exported sequence number.
    }
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi Java SDK: [describeMessageStream](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#describeMessageStream-java.lang.String-)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const description = await client.describeMessageStream("StreamName");
        const lastErrorMessage = description.exportStatuses[0].errorMessage;
        if (lastErrorMessage) {
            // The last export of export destination 0 failed with some error.
            // Here is the last sequence number that was successfully exported.
            description.exportStatuses[0].lastExportedSequenceNumber;
        }
 
        if (description.storageStatus.newestSequenceNumber >
            description.exportStatuses[0].lastExportedSequenceNumber) {
            // The end of the stream is ahead of the last exported sequence number.
        }
    } 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: [describeMessageStream](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#describeMessageStream)

------

 

## Perbarui aliran pesan
<a name="streammanagerclient-update-message-stream"></a>

Perbarui properti dari aliran yang ada. Anda mungkin ingin memperbarui aliran jika kebutuhan Anda berubah setelah aliran dibuat. Contoh:
+ Tambahkan [konfigurasi ekspor](stream-export-configurations.md) baru untuk AWS Cloud tujuan.
+ Tingkatkan ukuran maksimum aliran untuk mengubah cara data diekspor atau disimpan. Misalnya, ukuran aliran yang dikombinasikan dengan strategi Anda pada pengaturan penuh dapat mengakibatkan data dihapus atau ditolak sebelum stream manager dapat memprosesnya.
+ Jeda dan lanjutkan ekspor; sebagai contoh, jika tugas ekspor berjalan lama dan Anda ingin menjatah data unggahan Anda.

Fungsi Lambda Anda mengikuti proses tingkat tinggi ini untuk memperbarui pengaliran:

1. [Dapatkan deskripsi aliran.](#streammanagerclient-describe-message-stream)

1. Perbarui properti target pada `MessageStreamDefinition` dan objek bawahan yang sesuai.

1. Lewati `MessageStreamDefinition` yang diperbarui. Pastikan untuk menyertakan definisi objek lengkap untuk aliran yang diperbarui. Properti yang tidak terdefinisi kembali ke nilai default.

   Anda dapat menentukan nomor urutan pesan yang akan digunakan sebagai pesan awal dalam ekspor.

### Persyaratan
<a name="-streammanagerclient-update-message-streamreqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.11.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.11.0
+ <a name="streammanagerclient-min-sdk-ggc-1.11.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.6.0 \$1 Java: 1.5.0 \$1 Node.js: 1.7.0

### Contoh
<a name="streammanagerclient-update-message-stream-examples"></a>

Potongan berikut menciptakan aliran bernama `StreamName`. Potongan ini memperbarui beberapa properti aliran yang mengekspor ke Kinesis Data Streams.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    message_stream_info = client.describe_message_stream(STREAM_NAME)
    message_stream_info.definition.max_size=536870912
    message_stream_info.definition.stream_segment_size=33554432
    message_stream_info.definition.time_to_live_millis=3600000
    message_stream_info.definition.strategy_on_full=StrategyOnFull.RejectNewData
    message_stream_info.definition.persistence=Persistence.Memory
    message_stream_info.definition.flush_on_write=False
    message_stream_info.definition.export_definition.kinesis=
        [KinesisConfig(  
            # Updating Export definition to add a Kinesis Stream configuration.
            identifier=str(uuid.uuid4()), kinesis_stream_name=str(uuid.uuid4()))]
    client.update_message_stream(message_stream_info.definition)
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

Referensi Python SDK: \$1 [updateMessageStream[MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.MessageStreamDefinition)](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.update_message_stream)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    MessageStreamInfo messageStreamInfo = client.describeMessageStream(STREAM_NAME);
    // Update the message stream with new values.
    client.updateMessageStream(
        messageStreamInfo.getDefinition()
            .withStrategyOnFull(StrategyOnFull.RejectNewData) // Required. Updating Strategy on full to reject new data.
            // Max Size update should be greater than initial Max Size defined in Create Message Stream request
            .withMaxSize(536870912L) // Update Max Size to 512 MB.
            .withStreamSegmentSize(33554432L) // Update Segment Size to 32 MB.
            .withFlushOnWrite(true) // Update flush on write to true.
            .withPersistence(Persistence.Memory) // Update the persistence to Memory.
            .withTimeToLiveMillis(3600000L)  // Update TTL to 1 hour.
            .withExportDefinition(
                // Optional. Choose where/how the stream is exported to the AWS Cloud.
                messageStreamInfo.getDefinition().getExportDefinition().
                    // Updating Export definition to add a Kinesis Stream configuration.
                    .withKinesis(new ArrayList<KinesisConfig>() {{
                        add(new KinesisConfig()
                            .withIdentifier(EXPORT_IDENTIFIER)
                            .withKinesisStreamName("test"));
                        }})
            );
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: [update\$1message\$1stream](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#updateMessageStream-java.lang.String-) \$1 [MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/MessageStreamDefinition.html)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        const messageStreamInfo = await c.describeMessageStream(STREAM_NAME);
        await client.updateMessageStream(
            messageStreamInfo.definition
                // Max Size update should be greater than initial Max Size defined in Create Message Stream request
                .withMaxSize(536870912)  // Default is 256 MB. Updating Max Size to 512 MB.
                .withStreamSegmentSize(33554432)  // Default is 16 MB. Updating Segment Size to 32 MB.
                .withTimeToLiveMillis(3600000)  // By default, no TTL is enabled. Update TTL to 1 hour.
                .withStrategyOnFull(StrategyOnFull.RejectNewData)  // Required. Updating Strategy on full to reject new data.
                .withPersistence(Persistence.Memory)  // Default is File. Update the persistence to Memory
                .withFlushOnWrite(true)  // Default is false. Updating to true.
                .withExportDefinition(  
                    // Optional. Choose where/how the stream is exported to the AWS Cloud.
                    messageStreamInfo.definition.exportDefinition
                        // Updating Export definition to add a Kinesis Stream configuration.
                        .withKinesis([new KinesisConfig().withIdentifier(uuidv4()).withKinesisStreamName(uuidv4())])
                )
        );
    } 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: \$1 [updateMessageStream[MessageStreamDefinition](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.MessageStreamDefinition.html)](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#updateMessageStream)

------

### Kendala untuk memperbarui aliran
<a name="streammanagerclient-update-constraints"></a>

Kendala berikut berlaku saat memperbarui aliran. Kecuali tercantum dalam daftar berikut, pembaruan berlaku segera.
+ Anda tidak dapat memperbarui kegigihan aliran. Untuk mengubah perilaku ini, [hapus aliran](#streammanagerclient-delete-message-stream) dan [buat Stream](#streammanagerclient-create-message-stream) yang menentukan kebijakan kegigihan baru.
+ Anda dapat memperbarui ukuran maksimum aliran hanya dalam kondisi berikut:
  + Ukuran maksimum harus lebih besar atau sama dengan ukuran aliran. <a name="messagestreaminfo-describe-stream"></a>Untuk menemukan informasi ini, [jelaskan aliran](#streammanagerclient-describe-message-stream) dan kemudian periksa status penyimpanan `MessageStreamInfo` objek yang dikembalikan.
  + Ukuran maksimum harus lebih besar atau sama dengan ukuran segmen aliran.
+ Anda dapat memperbarui ukuran segmen aliran ke nilai kurang dari ukuran maksimum aliran tersebut. Pengaturan yang diperbarui berlaku untuk segmen baru.
+ Pembaruan ke properti waktu untuk tayang (TTL) berlaku untuk operasi append yang baru. Jika Anda mengurangi nilai ini, stream manager juga dapat menghapus segmen yang ada yang melebihi TTL.
+ Pembaruan untuk strategi tersebut pada properti penuh berlaku untuk operasi append yang baru. Jika Anda menetapkan strategi untuk menimpa data tertua, stream manager juga dapat menimpa segmen yang ada berdasarkan pengaturan yang baru.
+ Pembaruan untuk properti flush on write berlaku untuk pesan baru.
+ Pembaruan untuk konfigurasi ekspor berlaku untuk ekspor baru. Permintaan pembaruan harus mencakup semua konfigurasi ekspor yang ingin Anda dukung. Jika tidak, stream manager akan menghapusnya.
  + Saat Anda memperbarui konfigurasi ekspor, tentukan pengenal konfigurasi ekspor target.
  + Untuk menambahkan konfigurasi ekspor, tentukan pengenal unik untuk konfigurasi ekspor baru.
  + Untuk menghapus konfigurasi ekspor, hapus konfigurasi ekspor.
+ Untuk [memperbarui](#streammanagerclient-update-message-stream) nomor urutan awal konfigurasi ekspor di suatu aliran, Anda harus menentukan nilai yang kurang dari nomor urut terbaru. <a name="messagestreaminfo-describe-stream"></a>Untuk menemukan informasi ini, [jelaskan aliran](#streammanagerclient-describe-message-stream) dan kemudian periksa status penyimpanan `MessageStreamInfo` objek yang dikembalikan.

 

## Hapus aliran pesan
<a name="streammanagerclient-delete-message-stream"></a>

Hapus aliran. Bila Anda menghapus suatu aliran, semua data yang tersimpan untuk aliran itu akan dihapus dari disk.

### Persyaratan
<a name="streammanagerclient-delete-message-stream-reqs"></a>

Komponen ini memiliki persyaratan sebagai berikut:
+ <a name="streammanagerclient-min-ggc-1.10.0"></a>Versi AWS IoT Greengrass Inti Minimum: 1.10.0
+ <a name="streammanagerclient-min-sdk-ggc-1.10.0"></a>Versi SDK AWS IoT Greengrass Inti Minimum: Python: 1.5.0 \$1 Java: 1.4.0 \$1 Node.js: 1.6.0

### Contoh
<a name="streammanagerclient-delete-message-stream-examples"></a>

Potongan berikut menghapus aliran bernama `StreamName`.

------
#### [ Python ]

```
client = StreamManagerClient()
 
try:
    client.delete_message_stream(stream_name="StreamName")
except StreamManagerException:
    pass
    # Properly handle errors.
except ConnectionError or asyncio.TimeoutError:
    pass
    # Properly handle errors.
```

Referensi Python SDK: [deleteMessageStream](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html#greengrasssdk.stream_manager.streammanagerclient.StreamManagerClient.delete_message_stream)

------
#### [ Java ]

```
try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) {
    client.deleteMessageStream("StreamName");
} catch (StreamManagerException e) {
    // Properly handle exception.
}
```

Referensi SDK Java: [delete\$1message\$1stream](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html#deleteMessageStream-java.lang.String-)

------
#### [ Node.js ]

```
const client = new StreamManagerClient();
client.onConnected(async () => {
    try {
        await client.deleteMessageStream("StreamName");
    } 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: [deleteMessageStream](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html#deleteMessageStream)

------

## Lihat juga
<a name="work-with-streams-see-also"></a>
+ [Mengelola aliran data pada inti AWS IoT Greengrass](stream-manager.md)
+ [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md)
+ [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md)
+ [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md)
+ [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md)
+ `StreamManagerClient`dalam referensi AWS IoT Greengrass Core SDK:
  + [Python](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.streammanagerclient.html)
  + [Java](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/client/StreamManagerClient.html)
  + [Node.js](https://aws.github.io/aws-greengrass-core-sdk-js/aws-greengrass-core-sdk.StreamManager.StreamManagerClient.html)

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

Fungsi Lambda yang ditentukan pengguna digunakan `StreamManagerClient` di AWS IoT Greengrass Core SDK untuk berinteraksi dengan pengelola aliran. Ketika fungsi Lambda [membuat pengaliran](work-with-streams.md#streammanagerclient-create-message-stream) atau [memperbarui pengaliran](work-with-streams.md#streammanagerclient-create-message-stream), fungsi ini melewati objek `MessageStreamDefinition` yang mewakili properti pengaliran, termasuk definisi ekspor. Objek `ExportDefinition` berisi konfigurasi ekspor yang ditentukan untuk pengaliran. 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/v1/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 usaha ekspor yang gagal, stream manager terus-menerus mencoba mengekspor data ke AWS Cloud pada 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 mempertahankan sumber daya ini AWS Cloud .

## 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*.

Di AWS IoT Greengrass Core SDK, fungsi Lambda Anda menggunakan untuk `IoTAnalyticsConfig` menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [TAnalyticsKonfigurasi Io di SDK](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.IoTAnalyticsConfig) Python
+ [Io TAnalytics Config](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/IoTAnalyticsConfig.html) di Java SDK
+ [Io TAnalytics Config di Node.js](https://aws.github.io/aws-greengrass-core-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 grup Greengrass.
+ [Peran grup Greengrass](group-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, [fungsi Lambda Anda membuat aliran dengan](work-with-streams.md#streammanagerclient-create-message-stream) definisi ekspor yang menyertakan satu atau `IoTAnalyticsConfig` beberapa objek. Objek ini menentukan pengaturan ekspor, seperti saluran target, ukuran batch, batch interval, dan prioritas.

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

Kemudian, manajer pengaliran mengekspor data berdasarkan pengaturan batch dan prioritas yang ditentukan di dalam konfigurasi ekspor pengaliran.

 

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

Pengelola pengaliran mendukung ekspor otomatis ke Amazon Kinesis Data Streams. <a name="aks-export-destination"></a>Kinesis Data Streams umumnya digunakan untuk mengumpulkan data volume tinggi dan memuatnya ke dalam gudang data atau klaster map-reduce. Untuk informasi lebih lanjut, lihat [Apa itu Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/what-is-this-service.html) dalam *Panduan Developer Amazon Kinesis*.

Di AWS IoT Greengrass Core SDK, fungsi Lambda Anda menggunakan untuk `KinesisConfig` menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.KinesisConfig)di Python SDK
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/KinesisConfig.html)di Java SDK
+ [KinesisConfig](https://aws.github.io/aws-greengrass-core-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 grup Greengrass.
+ [Peran grup Greengrass](group-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 mengeksport ke Kinesis Data Streams, fungsi Lambda anda [buat pengaliran](work-with-streams.md#streammanagerclient-create-message-stream) dengan definisi ekspor yang mencakup satu atau lebih `KinesisConfig` objek. Objek ini menentukan pengaturan ekspor, seperti aliran data target, ukuran batch, interval batch, dan prioritas.

Ketika fungsi Lambda Anda menerima data dari perangkat, mereka [menambahkan pesan](work-with-streams.md#streammanagerclient-append-message) yang berisi gumpalan data ke aliran target. Kemudian, manajer pengaliran mengekspor data berdasarkan pengaturan batch dan prioritas yang ditentukan di dalam konfigurasi ekspor pengaliran.

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*.

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

**catatan**  
AWS juga menyediakan[Konektor IoT SiteWise](iot-sitewise-connector.md), yang merupakan solusi pra-bangun yang dapat Anda gunakan dengan sumber OPC-UA.

### 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 grup Greengrass.
**catatan**  
Untuk daftar Wilayah 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*.
+ [Peran grup Greengrass](group-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, [fungsi Lambda Anda membuat aliran dengan](work-with-streams.md#streammanagerclient-create-message-stream) definisi ekspor yang menyertakan satu atau `IoTSiteWiseConfig` beberapa objek. Objek ini mendefinisikan pengaturan ekspor, seperti ukuran batch, batch interval, dan prioritas.

Ketika fungsi Lambda Anda menerima data properti aset dari perangkat, mereka menambahkan pesan yang berisi data ke pengaliran target. Pesan adalah objek `PutAssetPropertyValueEntry` serial 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 pengelola pengaliran dan logika fungsi Lambda 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, fungsi Lambda 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*.

Di AWS IoT Greengrass Core SDK, fungsi Lambda Anda menggunakan untuk `S3ExportTaskExecutorConfig` menentukan konfigurasi ekspor untuk jenis tujuan ini. Untuk informasi lebih lanjut, lihat referensi SDK untuk bahasa target Anda:
+ [S3 ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-sdk-python/_apidoc/greengrasssdk.stream_manager.data.html#greengrasssdk.stream_manager.data.S3ExportTaskExecutorConfig) di Python SDK
+ [S3 ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/export/S3ExportTaskExecutorConfig.html) di Java SDK
+ [S3 ExportTaskExecutorConfig](https://aws.github.io/aws-greengrass-core-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 grup Akun AWS Greengrass.
+ Jika [kontainerisasi default](lambda-group-config.md#lambda-containerization-groupsettings) untuk grup Greengrass adalah **kontainer Greengrass**, Anda harus mengatur [parameter](configure-stream-manager.md#stream-manager-read-only-directories) STREAM\$1MANAGER\$1READ\$1ONLY\$1DIRS untuk menggunakan direktori file input yang berada di bawah `/tmp` atau tidak pada sistem file root.
+ Jika fungsi Lambda berjalan di **kontainer Greengrass** mode menulis file input ke direktori file input, Anda harus membuat sumber daya volume lokal untuk direktori dan mount direktori ke kontainer dengan izin menulis. Hal ini memastikan bahwa file ditulis ke sistem file root dan terlihat di luar kontainer. Untuk informasi selengkapnya, lihat [Akses sumber daya lokal dengan fungsi dan konektor Lambda](access-local-resources.md).
+ Sebuah [Peran grup Greengrass](group-role.md) harus mengizinkan 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 pengaliran yang mengekspor ke Amazon S3, fungsi Lambda Anda menggunakan `S3ExportTaskExecutorConfig` objek untuk mengonfigurasi kebijakan ekspor. Kebijakan ini mendefinisikan pengaturan ekspor, seperti ambang dan prioritas unggahan multipart. Untuk ekspor Amazon S3, pengelola pengaliran mengunggah data yang dibaca dari file lokal pada perangkat core. Untuk memulai unggahan, fungsi Lambda Anda menambahkan tugas ekspor ke pengaliran target. Tugas ekspor berisi informasi tentang file input dan objek Amazon S3 target. Pengelola pengaliran mengeksekusi tugas dalam urutan yang mereka tambahkan ke pengaliran.

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

 Alur kerja tingkat tinggi ini ditunjukkan dalam diagram berikut.

![\[Diagram alur kerja pengelola pengaliran untuk ekspor Amazon S3.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/stream-manager-s3.png)


Pengelola pengaliran menggunakan unggahan multipart ambang properti, [ukuran bagian minimum](configure-stream-manager.md#stream-manager-minimum-part-size) pengaturan, dan ukuran file input untuk menentukan cara untuk 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 penulis kode yang digunakan aplikasi IoT untuk mengelola siklus hidup dari input data. Contoh alur kerja berikut menunjukkan cara Anda mungkin menggunakan fungsi Lambda untuk mengelola data ini.

1. Proses lokal menerima data dari perangkat atau periferal, lalu menulis data ke file dalam direktori pada perangkat core. Ini adalah file input untuk pengelola pengaliran.
**catatan**  
Untuk menentukan apakah Anda harus mengonfigurasi akses ke direktori file input, lihat parameter [STREAM\$1MANAGER\$1READ\$1ONLY\$1DIRS](configure-stream-manager.md#stream-manager-read-only-directories) ini.  
Proses yang menjalankan pengelola pengaliran dalam mewarisi semua izin sistem file [identitas akses default](lambda-group-config.md#lambda-access-identity-groupsettings) untuk grup. Pengelola pengaliran harus memiliki izin untuk mengakses file input. Anda dapat menggunakan `chmod(1)` perintah untuk mengubah izin dari file, jika perlu.

1. Sebuah fungsi Lambda memindai direktori dan [menambahkan tugas ekspor](work-with-streams.md#streammanagerclient-append-message-export-task) ke pengaliran target ketika file baru dibuat. Tugas adalah JSON-serialized `S3ExportTaskDefinition` objek yang menentukan URL dari 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 sebuah objek untuk kunci tertentu tidak ada, pengelola pengaliran membuat objek untuk Anda.

1. Fungsi Lambda [membaca pesan](work-with-streams.md#streammanagerclient-read-messages) dari pengaliran status untuk memantau status ekspor. Setelah tugas ekspor selesai, fungsi Lambda 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 penulis kode yang digunakan aplikasi IoT untuk memantau status ekspor Amazon S3 Anda. Fungsi Lambda Anda harus membuat status pengaliran lalu mengonfigurasi pengaliran ekspor untuk menulis pembaruan ke status untuk status pengaliran. Pengaliran status tunggal dapat menerima pembaruan status dari beberapa pengaliran yang mengekspor 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 dari konfigurasi ekspor `S3ExportTaskExecutorConfig` pengaliran. Ini memberitahu pengelola pengaliran untuk menulis pesan status tentang tugas ekspor ke pengaliran status. Di `StatusConfig` objek, tentukan nama pengaliran status dan tingkat verbositas. 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 cara fungsi Lambda mungkin menggunakan status pengaliran untuk memantau status ekspor.

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

1. Sebuah fungsi Lambda [membaca pesan](work-with-streams.md#streammanagerclient-read-messages) secara berurutan dari pengaliran status, lalu menyaring pesan berdasarkan nama pengaliran dan ID tugas atau berdasarkan properti tugas ekspor dari konteks pesan. Sebagai contoh, fungsi Lambda dapat difilter oleh URL file input dari tugas ekspor, yang diwakili oleh `S3ExportTaskDefinition` objek dalam konteks pesan.

   Kode status berikut menunjukkan bahwa tugas ekspor telah mencapai keadaan selesai:
   + `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 dibatalkan karena definisi aliran atau ekspor telah dihapus, atau periode time-to-live (TTL) tugas berakhir.
**catatan**  
Tugas mungkin juga memiliki status `InProgress` atau `Warning`. Pengelola pengaliran mengeluarkan peringatan ketika suatu peristiwa mengembalikan kesalahan yang tidak memengaruhi pelaksanaan tugas. Sebagai contoh, kegagalan untuk membersihkan unggahan parsial dibatalkan mengembalikan peringatan.

1. Setelah tugas ekspor selesai, fungsi Lambda dapat menghapus file input yang sesuai.

Contoh berikut menunjukkan cara fungsi Lambda mungkin membaca dan memproses pesan status.

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

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

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

Referensi SDK Java: [ReadMessages \$1 [StatusMessage](https://aws.github.io/aws-greengrass-core-sdk-java/com/amazonaws/greengrass/streammanager/model/StatusMessage.html)](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-)

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

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

------

# Ekspor aliran data ke AWS Cloud (konsol)
<a name="stream-manager-console"></a>

Tutorial ini menunjukkan cara menggunakan AWS IoT konsol untuk mengkonfigurasi dan menyebarkan AWS IoT Greengrass grup dengan manajer aliran diaktifkan. Grup ini berisi fungsi Lambda yang ditetapkan pengguna yang menulis ke pengaliran di pengelola pengaliran, yang kemudian diekspor secara otomatis ke AWS Cloud.

Pengelola pengaliran membuat penyerapan, pemrosesan, dan ekspor pengaliran data volume tinggi menjadi lebih efisien dan andal. Dalam tutorial ini, Anda membuat `TransferStream` fungsi Lambda yang mengonsumsi data IoT. Fungsi Lambda menggunakan AWS IoT Greengrass Core SDK untuk membuat aliran di stream manager dan kemudian membaca dan menulis ke sana. Pengelola pengaliran kemudian mengekspor pengaliran ke Kinesis Data Streams. Diagram berikut menunjukkan alur kerja ini.

![\[Diagram alur kerja manajemen pengaliran.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/stream-manager-scenario.png)


Fokus tutorial ini adalah untuk menunjukkan bagaimana fungsi Lambda yang ditentukan pengguna menggunakan `StreamManagerClient` objek di AWS IoT Greengrass Core SDK untuk berinteraksi dengan manajer aliran. Untuk mempermudah, fungsi Lambda Python yang Anda buat untuk tutorial ini menghasilkan data perangkat simulasi.

## Prasyarat
<a name="stream-manager-console-prerequisites"></a>

Untuk menyelesaikan tutorial ini, Anda membutuhkan:<a name="stream-manager-howto-prereqs"></a>
+ Sebuah grup Greengrass dan core Greengrass (v1.10 atau yang lebih baru). Untuk informasi tentang cara membuat grup Greengrass dan core, lihat [Memulai dengan AWS IoT Greengrass](gg-gs.md). Tutorial Memulai juga mencakup langkah-langkah untuk menginstal perangkat lunak AWS IoT Greengrass Core.
**catatan**  <a name="stream-manager-not-supported-openwrt"></a>
<a name="stream-manager-not-supported-openwrt-para"></a>Manajer aliran tidak didukung pada OpenWrt distribusi.
+ Waktu aktif Java 8 (JDK 8) dipasang pada perangkat core.<a name="install-java8-runtime-general"></a>
  + Untuk distribusi berbasis Debian (termasuk Raspbian) atau distribusi berbasis Ubuntu, jalankan perintah berikut:

    ```
    sudo apt install openjdk-8-jdk
    ```
  + Untuk distribusi berbasis Red Hat (termasuk Amazon Linux), jalankan perintah berikut:

    ```
    sudo yum install java-1.8.0-openjdk
    ```

    Untuk informasi lebih lanjut, lihat [ Cara mengunduh dan menginstal paket OpenJDK prebuilt](https://openjdk.java.net/install/) dalam dokumentasi OpenJDK.
+ AWS IoT Greengrass Core SDK untuk Python v1.5.0 atau yang lebih baru. Untuk menggunakan `StreamManagerClient` dalam AWS IoT Greengrass Core SDK for Python, Anda harus:
  + Instal Python 3.7 atau yang lebih baru pada perangkat core.
  + Sertakan SDK dan dependensinya dalam paket deployment fungsi Lambda Anda. Instruksi disediakan pada tutorial ini.
**Tip**  
Anda dapat menggunakan `StreamManagerClient` dengan Java atau NodeJS. Misalnya kode, lihat [AWS IoT Greengrass Core SDK for](https://github.com/aws/aws-greengrass-core-sdk-java/blob/master/samples/StreamManagerKinesis/src/main/java/com/amazonaws/greengrass/examples/StreamManagerKinesis.java) Java [AWS IoT Greengrass dan Core SDK untuk](https://github.com/aws/aws-greengrass-core-sdk-js/blob/master/greengrassExamples/StreamManagerKinesis/index.js) Node.js aktif. GitHub
+ Aliran tujuan bernama **MyKinesisStream** dibuat di Amazon Kinesis Data Streams sama dengan grup Wilayah AWS Greengrass Anda. Untuk informasi lebih lanjut, lihat [Buat aliran](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html#create-stream) dalam *Panduan Developer Amazon Kinesis*.
**catatan**  
Dalam tutorial ini, pengelola pengaliran mengekspor data ke Kinesis Data Streams, yang mengakibatkan biaya ke Akun AWS. Untuk informasi lebih lanjut tentang harga, lihat [Harga Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).  
Untuk menghindari timbulnya biaya, Anda dapat menjalankan tutorial ini tanpa membuat Kinesis data stream. Dalam kasus ini, Anda memeriksa catatan untuk melihat pengelola pengaliran tersebut berusaha mengekspor pengaliran ke Kinesis Data Streams.
+ Kebijakan IAM ditambahkan ke [Peran grup Greengrass](group-role.md) yang mengizinkan tindakan `kinesis:PutRecords` pada aliran data target, seperti yang ditunjukkan dalam contoh berikut:

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

****  

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

------

Tutorial berisi langkah-langkah tingkat tinggi berikut:

1. [Buat paket deployment fungsi Lambda](#stream-manager-console-create-deployment-package)

1. [Buat fungsi Lambda](#stream-manager-console-create-function)

1. [Menambahkan fungsi ke grup](#stream-manager-console-create-gg-function)

1. [Mengaktifkan pengelola pengaliran](#stream-manager-console-enable-stream-manager)

1. [Konfigurasikan logging lokal](#stream-manager-console-configure-logging)

1. [Men-deploy grup](#stream-manager-console-create-deployment)

1. [Uji aplikasi](#stream-manager-console-test-application)

Tutorial harus memakan waktu sekitar 20 menit untuk menyelesaikannya.

## Langkah 1: Buat paket deployment fungsi Lambda
<a name="stream-manager-console-create-deployment-package"></a>

Dalam langkah ini, Anda membuat paket deployment fungsi Lambda yang berisi kode fungsi Python dan dependensi. Anda mengunggah paket ini nanti saat Anda membuat fungsi Lambda di. AWS Lambda Fungsi Lambda menggunakan AWS IoT Greengrass Core SDK untuk membuat dan berinteraksi dengan aliran lokal.

**catatan**  
 Fungsi Lambda yang ditetapkan pengguna milik Anda harus menggunakan [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core) untuk berinteraksi dengan pengelola pengaliran. Untuk informasi lebih lanjut tentang persyaratan untuk Greengrass pengelola pengaliran, lihat [Persyaratan pengelola pengaliran Greengrass](stream-manager.md#stream-manager-requirements). 

1.  Unduh [AWS IoT Greengrass Core SDK for Python](lambda-functions.md#lambda-sdks-core) v1.5.0 atau yang lebih baru.

1. <a name="unzip-ggc-sdk"></a>Unzip paket unduhan untuk mendapatkan SDK. SDK adalah folder `greengrasssdk` ini.

1. <a name="install-python-sdk-dependencies-stream-manager"></a>Instal paket dependensi untuk menyertakan dengan SDK dalam paket deployment fungsi Lambda Anda.<a name="python-sdk-dependencies-stream-manager"></a>

   1. Arahkan ke direktori SDK yang berisi file `requirements.txt` ini. File ini berisi daftar dependensi.

   1. Instal dependensi SDK. Sebagai contoh, jalankan perintah `pip` berikut untuk menginstalnya di direktori saat ini:

      ```
      pip install --target . -r requirements.txt
      ```

1. Simpan fungsi kode Python berikut dalam sebuah file lokal bernama `transfer_stream.py`.
**Tip**  
 Misalnya kode yang menggunakan Java dan NodeJS, lihat AWS IoT Greengrass Core SDK [for [AWS IoT Greengrass Java dan](https://github.com/aws/aws-greengrass-core-sdk-js/blob/master/greengrassExamples/StreamManagerKinesis/index.js) Core SDK for Node.js on](https://github.com/aws/aws-greengrass-core-sdk-java/blob/master/samples/StreamManagerKinesis/src/main/java/com/amazonaws/greengrass/examples/StreamManagerKinesis.java). GitHub

   ```
   import asyncio
   import logging
   import random
   import time
   
   from greengrasssdk.stream_manager import (
       ExportDefinition,
       KinesisConfig,
       MessageStreamDefinition,
       ReadMessagesOptions,
       ResourceNotFoundException,
       StrategyOnFull,
       StreamManagerClient,
   )
   
   
   # This example creates a local stream named "SomeStream".
   # It starts writing data into that stream and then stream manager automatically exports  
   # the data to a customer-created Kinesis data stream named "MyKinesisStream". 
   # This example runs forever until the program is stopped.
   
   # The size of the local stream on disk will not exceed the default (which is 256 MB).
   # Any data appended after the stream reaches the size limit continues to be appended, and
   # stream manager deletes the oldest data until the total stream size is back under 256 MB.
   # The Kinesis data stream in the cloud has no such bound, so all the data from this script is
   # uploaded to Kinesis and you will be charged for that usage.
   
   
   def main(logger):
       try:
           stream_name = "SomeStream"
           kinesis_stream_name = "MyKinesisStream"
   
           # Create a client for the StreamManager
           client = StreamManagerClient()
   
           # Try deleting the stream (if it exists) so that we have a fresh start
           try:
               client.delete_message_stream(stream_name=stream_name)
           except ResourceNotFoundException:
               pass
   
           exports = ExportDefinition(
               kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)]
           )
           client.create_message_stream(
               MessageStreamDefinition(
                   name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports
               )
           )
   
           # Append two messages and print their sequence numbers
           logger.info(
               "Successfully appended message to stream with sequence number %d",
               client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")),
           )
           logger.info(
               "Successfully appended message to stream with sequence number %d",
               client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")),
           )
   
           # Try reading the two messages we just appended and print them out
           logger.info(
               "Successfully read 2 messages: %s",
               client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)),
           )
   
           logger.info("Now going to start writing random integers between 0 and 1000 to the stream")
           # Now start putting in random data between 0 and 1000 to emulate device sensor input
           while True:
               logger.debug("Appending new random integer to stream")
               client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big"))
               time.sleep(1)
   
       except asyncio.TimeoutError:
           logger.exception("Timed out while executing")
       except Exception:
           logger.exception("Exception while running")
   
   
   def function_handler(event, context):
       return
   
   
   logging.basicConfig(level=logging.INFO)
   # Start up this sample code
   main(logger=logging.getLogger())
   ```

1. Zip item berikut ke dalam file bernama `transfer_stream_python.zip`. Ini adalah paket deployment fungsi Lambda Anda.
   + **transfer\$1stream.py**. Logika aplikasi.
   + **greengrasssdk**. Diperlukan perpustakaan untuk fungsi Python Greengrass Lambda yang menerbitkan pesan MQTT.

     [Operasi manajer aliran](work-with-streams.md) tersedia dalam versi 1.5.0 atau yang lebih baru dari AWS IoT Greengrass Core SDK untuk Python.
   + Dependensi yang Anda instal untuk AWS IoT Greengrass Core SDK untuk Python (misalnya, direktori). `cbor2`

   Ketika Anda membuat file `zip` ini, termasuk hanya item ini, bukan folder yang berisi.

## Langkah 2: Buat fungsi Lambda
<a name="stream-manager-console-create-function"></a>

Pada langkah ini, Anda menggunakan AWS Lambda konsol untuk membuat fungsi Lambda dan mengonfigurasinya untuk menggunakan paket penerapan Anda. Kemudian, Anda mempublikasikan versi fungsi dan membuat alias.

1. Pertama, buat fungsi Lambda.

   1. <a name="lambda-console-open"></a>Di Konsol Manajemen AWS, pilih **Layanan**, dan buka AWS Lambda konsol.

   1. <a name="lambda-console-create-function"></a>Pilih **Buat fungsi** dan kemudian **Tulis dari awal**.

   1. Di bagian **Informasi dasar** tersebut, gunakan nilai-nilai berikut:
      + Untuk **Nama fungsi**, masukkan **TransferStream**.
      + Untuk **Waktu pengoperasian**, pilih **Python 3.7**.
      + Untuk **Izin**, pertahankan pengaturan default. Hal ini menciptakan peran eksekusi yang memberikan izin Lambda basic. Peran ini tidak digunakan oleh AWS IoT Greengrass.

   1. <a name="lambda-console-save-function"></a>Di bagian bawah halaman, pilih **Buat Fungsi**.

1. Selanjutnya, daftarkan handler dan unggah paket deployment fungsi Lambda Anda.

   1. <a name="lambda-console-upload"></a>Pada tab **Kode** ini, di bawah **Sumber kode**, pilih **Unggah dari**. Dari dropdown, pilih **file .zip**.  
![\[Unggah dari dropdown dengan file .zip disorot.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Pilih **Unggah**, lalu pilih paket deployment `transfer_stream_python.zip` Anda. Lalu, pilih **Simpan**.

   1. <a name="lambda-console-runtime-settings-para"></a>Pada tab **Kode** fungsi, di bawah **Pengaturan waktu aktif**, pilih **Edit**, dan kemudian masukkan nilai-nilai berikut.
      + Untuk **Waktu pengoperasian**, pilih **Python 3.7**.
      + Untuk **Handler**, masukkan **transfer\$1stream.function\$1handler**

   1. <a name="lambda-console-save-config"></a>Pilih **Simpan**.
**catatan**  
Tombol **Uji** di AWS Lambda konsol tidak berfungsi dengan fungsi ini. AWS IoT Greengrass Core SDK tidak berisi modul yang diperlukan untuk menjalankan fungsi Greengrass Lambda Anda secara independen di konsol. AWS Lambda Modul-modul ini (misalnya, `greengrass_common`) dipasok ke fungsi setelah mereka di-deploy ke core Greengrass Anda.

1. Sekarang, publikasikan versi pertama fungsi Lambda Anda dan membuat [alias untuk versi](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
**catatan**  
Grup Greengrass dapat mereferensi fungsi Lambda dengan alias (direkomendasikan) atau dengan versi. Menggunakan alias membuatnya lebih mudah untuk mengelola pembaruan kode karena Anda tidak perlu mengubah tabel langganan atau definisi grup ketika kode fungsi diperbarui. Sebaliknya, Anda hanya mengarahkan alias ke versi fungsi baru.

   1. <a name="shared-publish-function-version"></a>Dari menu **Tindakan** ini, pilih **Terbitkan versi baru**.

   1. <a name="shared-publish-function-version-description"></a>Untuk **Versi Deskripsi**, masukkan **First version**, lalu pilih **Publikasikan**.

   1. Pada halaman konfigurasi **TransferStream: 1**, dari menu **Tindakan**, pilih **Buat alias**.

   1. Pada halaman **Buat alias baru** ini, gunakan nilai-nilai berikut:
      + Untuk **Nama**, masukkan **GG\$1TransferStream**.
      + Untuk **Versi**, pilih **1**.
**catatan**  
AWS IoT Greengrass **tidak mendukung alias Lambda untuk versi \$1LATEST.**

   1. Pilih **Buat**.

Sekarang Anda siap untuk menambahkan fungsi Lambda ke grup Greengrass Anda.

## Langkah 3: Tambahkan fungsi Lambda ke grup Greengrass
<a name="stream-manager-console-create-gg-function"></a>

Dalam langkah ini, Anda menambahkan fungsi Lambda ke grup lalu mengonfigurasi siklus hidup dan lingkungan variabel. Untuk informasi selengkapnya, lihat [Mengontrol eksekusi fungsi Greengrass Lambda dengan menggunakan konfigurasi grup khusus](lambda-group-config.md).

1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

1. <a name="group-choose-target-group"></a>Pilih grup target.

1. <a name="choose-add-lambda"></a>Pada halaman konfigurasi grup, pilih tab **fungsi Lambda**.

1. **Di bawah **fungsi Lambda Saya**, pilih Tambah.**

1. Pada halaman **fungsi Add Lambda, pilih fungsi** Lambda **untuk fungsi Lambda** Anda.

1. **Untuk **versi Lambda**, pilih Alias:GG\$1. TransferStream**

   Sekarang, konfigurasikan properti yang menentukan perilaku fungsi Lambda dalam grup Greengrass.

1. Di bagian **konfigurasi fungsi Lambda**, buat perubahan berikut:
   + Atur **Batas memori** hingga 32 MB.
   + Untuk **Pinned**, pilih **True**.
**catatan**  
<a name="long-lived-lambda"></a>Fungsi Lambda yang *berumur panjang* (atau *disematkan*) dimulai secara otomatis setelah AWS IoT Greengrass dimulai dan terus berjalan di wadahnya sendiri. Hal ini berbeda dengan fungsi Lambda *sesuai permintaan* ini, yang dimulai ketika diaktifkan dan berhenti ketika tidak ada tugas yang tersisa untuk dijalankan. Untuk informasi selengkapnya, lihat [Konfigurasi siklus hidup untuk fungsi Greengrass Lambda](lambda-functions.md#lambda-lifecycle).

1. Pilih **Tambahkan fungsi Lambda**.

## Langkah 4: Mengaktifkan pengelola pengaliran
<a name="stream-manager-console-enable-stream-manager"></a>

Dalam langkah ini, Anda memastikan bahwa pengelolal pengaliran diaktifkan.

1. Pada halaman konfigurasi grup, pilih tab **fungsi Lambda**.

1. Di bawah **fungsi Sistem Lambda**, pilih **Manajer aliran**, dan periksa statusnya. Jika dinonaktifkan, pilih **Edit**. Kemudian, pilih **Aktifkan** dan **Simpan**. Anda dapat menggunakan pengaturan parameter default untuk tutorial ini. Untuk informasi selengkapnya, lihat [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md).

**catatan**  <a name="ggstreammanager-function-config-console"></a>
Ketika Anda menggunakan konsol untuk mengaktifkan pengelola pengaliran dan men-deploy grup, ukuran memori untuk pengelola pengaliran diatur ke 4194304 KB (4 GB) secara default. Kami merekomendasikan Anda mengatur ukuran memori ke setidaknya 128000 KB.

## Langkah 5: Konfigurasikan logging lokal
<a name="stream-manager-console-configure-logging"></a>

Pada langkah ini, Anda mengonfigurasi komponen AWS IoT Greengrass sistem, fungsi Lambda yang ditentukan pengguna, dan konektor dalam grup untuk menulis log ke sistem file perangkat inti. Anda dapat menggunakan catatan untuk memecahkan masalah yang mungkin Anda alami. Untuk informasi selengkapnya, lihat [Pemantauan dengan AWS IoT Greengrass log](greengrass-logs-overview.md).

1. <a name="shared-group-settings-local-logs-configuration"></a>Di bawah **Konfigurasikan catatan lokal**, periksa apakah pengelogan lokal dikonfigurasi.

1. <a name="shared-group-settings-local-logs-edit"></a>Jika catatan tidak dikonfigurasi untuk komponen sistem Greengrass atau fungsi Lambda yang ditetapkan pengguna, pilih **Edit**.

1. <a name="shared-group-settings-local-logs-event-source"></a>**Pilih **tingkat log fungsi Lambda Pengguna dan tingkat log sistem** Greengrass.**

1. <a name="shared-group-settings-local-logs-save"></a>Menjaga nilai default untuk tingkat pencatatan dan batas ruang disk, lalu pilih **Simpan**.

## Langkah 6: Men-deploy grup Greengrass
<a name="stream-manager-console-create-deployment"></a>

Men-deploy grup ke perangkat core.

1. <a name="shared-deploy-group-checkggc"></a>Pastikan AWS IoT Greengrass inti berjalan. Jalankan perintah berikut di terminal Raspberry Pi Anda, sesuai kebutuhan.

   1. Untuk memeriksa apakah daemon sedang berjalan:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Jika outputnya berisi entri `root` untuk `/greengrass/ggc/packages/ggc-version/bin/daemon`, maka daemon sedang berjalan.
**catatan**  
Versi di jalur tergantung pada versi perangkat lunak AWS IoT Greengrass Core yang diinstal pada perangkat inti Anda.

   1. Untuk memulai daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>Pada halaman konfigurasi grup, pilih **Deploy**.

1. <a name="shared-deploy-group-ipconfig"></a>

   1. **Di tab **Fungsi Lambda, di bawah bagian Fungsi** **Lambda Sistem**, pilih **detektor IP** dan pilih Edit.**

   1. Dalam kotak dialog **Edit pengaturan detektor IP**, pilih **Secara otomatis mendeteksi dan mengganti titik akhir broker MQTT**.

   1. Pilih **Simpan**.

      Hal ini mengaktifkan perangkat untuk secara otomatis memperoleh informasi konektivitas untuk core, seperti alamat IP, DNS, dan nomor port. Deteksi otomatis direkomendasikan, tetapi AWS IoT Greengrass juga mendukung titik akhir yang ditentukan secara manual. Anda hanya diminta untuk metode penemuan pertama kalinya bahwa grup di-deploy.
**catatan**  
Jika diminta, berikan izin untuk membuat peran layanan [Greengrass dan kaitkan dengan peran layanan](service-role.md) Anda saat ini. Akun AWS Wilayah AWS Peran ini memungkinkan AWS IoT Greengrass untuk mengakses sumber daya Anda dalam AWS layanan.

      Halaman **Deployment** menampilkan timestamp deployment, ID versi, dan status. Setelah selesai, status yang ditampilkan untuk penerapan harus **Selesai**.

      Untuk bantuan pemecahan masalah, lihat [Pemecahan masalah AWS IoT Greengrass](gg-troubleshooting.md).

## Langkah 7: Uji aplikasi
<a name="stream-manager-console-test-application"></a>

Fungsi Lambda `TransferStream` menghasilkan data perangkat yang disimulasikan. Ini menulis data ke pengaliran yang diekspor oleh pengelola pengaliran ke Kinesis data stream target.

1. <a name="stream-manager-howto-test-open-kinesis-console"></a>Di konsol Amazon Kinesis, di bawah aliran **data Kinesis**, pilih. **MyKinesisStream**
**catatan**  
Jika Anda menjalankan tutorial tanpa Kinesis data streams target, [periksa berkas log](stream-manager-cli.md#stream-manager-cli-logs) untuk pengelola pengaliran (`GGStreamManager`). Jika itu berisi `export stream MyKinesisStream doesn't exist` dalam pesan kesalahan, maka uji ini berhasil. Kesalahan ini berarti bahwa layanan mencoba untuk mengekspor ke pengaliran tetapi pengaliran tidak ada.

1. <a name="stream-manager-howto-view-put-records"></a>Pada **MyKinesisStream**halaman, pilih **Monitoring**. Jika uji berhasil, Anda akan melihat data di bagan **Pasang Catatan** ini. Tergantung pada koneksi Anda, mungkin diperlukan waktu satu menit sebelum data ditampilkan.
**penting**  
Setelah selesai melakukan pengujian, hapus Kinesis data stream agar tidak menimbulkan biaya tambahan.  
Atau, jalankan perintah berikut untuk menghentikan daemon Greengrass. Hal ini mencegah core mengirim pesan hingga Anda siap untuk melanjutkan pengujian.  

   ```
   cd /greengrass/ggc/core/
   sudo ./greengrassd stop
   ```

1. Hapus fungsi **TransferStream**Lambda dari inti.

   1. <a name="console-gg-groups"></a>**Di panel navigasi AWS IoT konsol, di bawah **Kelola**, perluas perangkat **Greengrass**, lalu pilih Grup (V1).**

   1. Di bawah **grup Greengrass**, pilih grup Anda.

   1. **Pada halaman **Lambdas**, pilih elips (**...**) untuk **TransferStream**fungsi, dan kemudian pilih Hapus fungsi.**

   1. Dari **Tindakan**, pilih **Men-deploy**.

Untuk melihat pencatatan informasi atau pemecahan masalah dengan aliran, periksa log untuk fungsi `TransferStream` dan `GGStreamManager` tersebut. Anda harus memiliki `root` izin untuk membaca AWS IoT Greengrass log pada sistem file.
+ `TransferStream` menulis entri log ke `greengrass-root/ggc/var/log/user/region/account-id/TransferStream.log`.
+ `GGStreamManager` menulis entri log ke `greengrass-root/ggc/var/log/system/GGStreamManager.log`.

Jika Anda membutuhkan informasi pemecahan masalah lainnya, Anda dapat [mengatur tingkat logging](#stream-manager-console-configure-logging) untuk **log Lambda pengguna** ke **log Debug** lalu men-deploy grup lagi.

## Lihat juga
<a name="stream-manager-console-see-also"></a>
+ [Mengelola aliran data pada inti AWS IoT Greengrass](stream-manager.md)
+ [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md)
+ [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md)
+ [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md)
+ [Ekspor aliran data ke AWS Cloud (CLI)](stream-manager-cli.md)

# Ekspor aliran data ke AWS Cloud (CLI)
<a name="stream-manager-cli"></a>

Tutorial ini menunjukkan cara menggunakan AWS CLI untuk mengkonfigurasi dan menyebarkan AWS IoT Greengrass grup dengan manajer aliran diaktifkan. Grup ini berisi fungsi Lambda yang ditetapkan pengguna yang menulis ke pengaliran di pengelola pengaliran, yang kemudian diekspor secara otomatis ke AWS Cloud.

Pengelola pengaliran membuat penyerapan, pemrosesan, dan ekspor pengaliran data volume tinggi menjadi lebih efisien dan andal. Dalam tutorial ini, Anda membuat `TransferStream` fungsi Lambda yang mengonsumsi data IoT. Fungsi Lambda menggunakan AWS IoT Greengrass Core SDK untuk membuat aliran di stream manager dan kemudian membaca dan menulis ke sana. Pengelola pengaliran kemudian mengekspor pengaliran ke Kinesis Data Streams. Diagram berikut menunjukkan alur kerja ini.

![\[Diagram alur kerja manajemen pengaliran.\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/images/stream-manager-scenario.png)


Fokus tutorial ini adalah untuk menunjukkan bagaimana fungsi Lambda yang ditentukan pengguna menggunakan `StreamManagerClient` objek di AWS IoT Greengrass Core SDK untuk berinteraksi dengan manajer aliran. Untuk mempermudah, fungsi Lambda Python yang Anda buat untuk tutorial ini menghasilkan data perangkat simulasi.

Saat Anda menggunakan AWS IoT Greengrass API, yang menyertakan perintah Greengrass di, untuk membuat grup, AWS CLI pengelola aliran dinonaktifkan secara default. Untuk mengaktifkan pengelola pengaliran di core, Anda [membuat versi definisi fungsi](#stream-manager-cli-create-function-definition) yang mencakup sistem `GGStreamManager` fungsi Lambda dan versi grup yang referensi versi definisi fungsi baru. Kemudian Anda men-deploy grup.

## Prasyarat
<a name="stream-manager-cli-prerequisites"></a>

Untuk menyelesaikan tutorial ini, Anda membutuhkan:<a name="stream-manager-howto-prereqs"></a>
+ Sebuah grup Greengrass dan core Greengrass (v1.10 atau yang lebih baru). Untuk informasi tentang cara membuat grup Greengrass dan core, lihat [Memulai dengan AWS IoT Greengrass](gg-gs.md). Tutorial Memulai juga mencakup langkah-langkah untuk menginstal perangkat lunak AWS IoT Greengrass Core.
**catatan**  <a name="stream-manager-not-supported-openwrt"></a>
<a name="stream-manager-not-supported-openwrt-para"></a>Manajer aliran tidak didukung pada OpenWrt distribusi.
+ Waktu aktif Java 8 (JDK 8) dipasang pada perangkat core.<a name="install-java8-runtime-general"></a>
  + Untuk distribusi berbasis Debian (termasuk Raspbian) atau distribusi berbasis Ubuntu, jalankan perintah berikut:

    ```
    sudo apt install openjdk-8-jdk
    ```
  + Untuk distribusi berbasis Red Hat (termasuk Amazon Linux), jalankan perintah berikut:

    ```
    sudo yum install java-1.8.0-openjdk
    ```

    Untuk informasi lebih lanjut, lihat [ Cara mengunduh dan menginstal paket OpenJDK prebuilt](https://openjdk.java.net/install/) dalam dokumentasi OpenJDK.
+ AWS IoT Greengrass Core SDK untuk Python v1.5.0 atau yang lebih baru. Untuk menggunakan `StreamManagerClient` dalam AWS IoT Greengrass Core SDK for Python, Anda harus:
  + Instal Python 3.7 atau yang lebih baru pada perangkat core.
  + Sertakan SDK dan dependensinya dalam paket deployment fungsi Lambda Anda. Instruksi disediakan pada tutorial ini.
**Tip**  
Anda dapat menggunakan `StreamManagerClient` dengan Java atau NodeJS. Misalnya kode, lihat [AWS IoT Greengrass Core SDK for](https://github.com/aws/aws-greengrass-core-sdk-java/blob/master/samples/StreamManagerKinesis/src/main/java/com/amazonaws/greengrass/examples/StreamManagerKinesis.java) Java [AWS IoT Greengrass dan Core SDK untuk](https://github.com/aws/aws-greengrass-core-sdk-js/blob/master/greengrassExamples/StreamManagerKinesis/index.js) Node.js aktif. GitHub
+ Aliran tujuan bernama **MyKinesisStream** dibuat di Amazon Kinesis Data Streams sama dengan grup Wilayah AWS Greengrass Anda. Untuk informasi lebih lanjut, lihat [Buat aliran](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html#create-stream) dalam *Panduan Developer Amazon Kinesis*.
**catatan**  
Dalam tutorial ini, pengelola pengaliran mengekspor data ke Kinesis Data Streams, yang mengakibatkan biaya ke Akun AWS. Untuk informasi lebih lanjut tentang harga, lihat [Harga Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).  
Untuk menghindari timbulnya biaya, Anda dapat menjalankan tutorial ini tanpa membuat Kinesis data stream. Dalam kasus ini, Anda memeriksa catatan untuk melihat pengelola pengaliran tersebut berusaha mengekspor pengaliran ke Kinesis Data Streams.
+ Kebijakan IAM ditambahkan ke [Peran grup Greengrass](group-role.md) yang mengizinkan tindakan `kinesis:PutRecords` pada aliran data target, seperti yang ditunjukkan dalam contoh berikut:

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

****  

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

------<a name="aws-cli-howto-prereqs"></a>
+ Yang AWS CLI diinstal dan dikonfigurasi di komputer Anda. Untuk informasi lebih lanjut, lihat [ Menginstal AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) dan [Mengonfigurasi AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) di *AWS Command Line Interface Panduan Pengguna*.

   

  Contoh perintah dalam tutorial ini ditulis untuk Linux dan sistem berbasis UNIX lainnya. Jika Anda menggunakan Windows, lihat [Menentukan nilai parameter untuk antarmuka baris AWS perintah untuk](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html) informasi selengkapnya tentang perbedaan sintaks.

  Jika perintah berisi string JSON, tutorial memberikan contoh yang memiliki JSON pada satu baris. Pada beberapa sistem, mungkin lebih efisien untuk mengedit dan menjalankan perintah menggunakan format ini.

 

Tutorial berisi langkah-langkah tingkat tinggi berikut:

1. [Buat paket deployment fungsi Lambda](#stream-manager-cli-create-deployment-package)

1. [Buat fungsi Lambda](#stream-manager-cli-create-function)

1. [Buat definisi fungsi dan versi](#stream-manager-cli-create-function-definition)

1. [Buat definisi pencatat dan versi](#stream-manager-cli-create-logger-definition)

1. [Dapatkan ARN versi definisi core Anda](#stream-manager-cli-get-core-definition-version-arn)

1. [Buat versi grup](#stream-manager-cli-create-group-version)

1. [Buat deployment](#stream-manager-cli-create-deployment)

1. [Uji aplikasi](#stream-manager-cli-test-application)

Tutorial harus memakan waktu sekitar 30 menit untuk menyelesaikannya.

## Langkah 1: Buat paket deployment fungsi Lambda
<a name="stream-manager-cli-create-deployment-package"></a>

Dalam langkah ini, Anda membuat paket deployment fungsi Lambda yang berisi kode fungsi Python dan dependensi. Anda mengunggah paket ini nanti saat Anda membuat fungsi Lambda di. AWS Lambda Fungsi Lambda menggunakan AWS IoT Greengrass Core SDK untuk membuat dan berinteraksi dengan aliran lokal.

**catatan**  
 Fungsi Lambda yang ditetapkan pengguna milik Anda harus menggunakan [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core) untuk berinteraksi dengan pengelola pengaliran. Untuk informasi lebih lanjut tentang persyaratan untuk Greengrass pengelola pengaliran, lihat [Persyaratan pengelola pengaliran Greengrass](stream-manager.md#stream-manager-requirements). 

1.  Unduh [AWS IoT Greengrass Core SDK for Python](lambda-functions.md#lambda-sdks-core) v1.5.0 atau yang lebih baru.

1. <a name="unzip-ggc-sdk"></a>Unzip paket unduhan untuk mendapatkan SDK. SDK adalah folder `greengrasssdk` ini.

1. <a name="install-python-sdk-dependencies-stream-manager"></a>Instal paket dependensi untuk menyertakan dengan SDK dalam paket deployment fungsi Lambda Anda.<a name="python-sdk-dependencies-stream-manager"></a>

   1. Arahkan ke direktori SDK yang berisi file `requirements.txt` ini. File ini berisi daftar dependensi.

   1. Instal dependensi SDK. Sebagai contoh, jalankan perintah `pip` berikut untuk menginstalnya di direktori saat ini:

      ```
      pip install --target . -r requirements.txt
      ```

1. Simpan fungsi kode Python berikut dalam sebuah file lokal bernama `transfer_stream.py`.
**Tip**  
 Misalnya kode yang menggunakan Java dan NodeJS, lihat AWS IoT Greengrass Core SDK [for [AWS IoT Greengrass Java dan](https://github.com/aws/aws-greengrass-core-sdk-js/blob/master/greengrassExamples/StreamManagerKinesis/index.js) Core SDK for Node.js on](https://github.com/aws/aws-greengrass-core-sdk-java/blob/master/samples/StreamManagerKinesis/src/main/java/com/amazonaws/greengrass/examples/StreamManagerKinesis.java). GitHub

   ```
   import asyncio
   import logging
   import random
   import time
   
   from greengrasssdk.stream_manager import (
       ExportDefinition,
       KinesisConfig,
       MessageStreamDefinition,
       ReadMessagesOptions,
       ResourceNotFoundException,
       StrategyOnFull,
       StreamManagerClient,
   )
   
   
   # This example creates a local stream named "SomeStream".
   # It starts writing data into that stream and then stream manager automatically exports  
   # the data to a customer-created Kinesis data stream named "MyKinesisStream". 
   # This example runs forever until the program is stopped.
   
   # The size of the local stream on disk will not exceed the default (which is 256 MB).
   # Any data appended after the stream reaches the size limit continues to be appended, and
   # stream manager deletes the oldest data until the total stream size is back under 256 MB.
   # The Kinesis data stream in the cloud has no such bound, so all the data from this script is
   # uploaded to Kinesis and you will be charged for that usage.
   
   
   def main(logger):
       try:
           stream_name = "SomeStream"
           kinesis_stream_name = "MyKinesisStream"
   
           # Create a client for the StreamManager
           client = StreamManagerClient()
   
           # Try deleting the stream (if it exists) so that we have a fresh start
           try:
               client.delete_message_stream(stream_name=stream_name)
           except ResourceNotFoundException:
               pass
   
           exports = ExportDefinition(
               kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)]
           )
           client.create_message_stream(
               MessageStreamDefinition(
                   name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports
               )
           )
   
           # Append two messages and print their sequence numbers
           logger.info(
               "Successfully appended message to stream with sequence number %d",
               client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")),
           )
           logger.info(
               "Successfully appended message to stream with sequence number %d",
               client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")),
           )
   
           # Try reading the two messages we just appended and print them out
           logger.info(
               "Successfully read 2 messages: %s",
               client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)),
           )
   
           logger.info("Now going to start writing random integers between 0 and 1000 to the stream")
           # Now start putting in random data between 0 and 1000 to emulate device sensor input
           while True:
               logger.debug("Appending new random integer to stream")
               client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big"))
               time.sleep(1)
   
       except asyncio.TimeoutError:
           logger.exception("Timed out while executing")
       except Exception:
           logger.exception("Exception while running")
   
   
   def function_handler(event, context):
       return
   
   
   logging.basicConfig(level=logging.INFO)
   # Start up this sample code
   main(logger=logging.getLogger())
   ```

1. Zip item berikut ke dalam file bernama `transfer_stream_python.zip`. Ini adalah paket deployment fungsi Lambda Anda.
   + **transfer\$1stream.py**. Logika aplikasi.
   + **greengrasssdk**. Diperlukan perpustakaan untuk fungsi Python Greengrass Lambda yang menerbitkan pesan MQTT.

     [Operasi manajer aliran](work-with-streams.md) tersedia dalam versi 1.5.0 atau yang lebih baru dari AWS IoT Greengrass Core SDK untuk Python.
   + Dependensi yang Anda instal untuk AWS IoT Greengrass Core SDK untuk Python (misalnya, direktori). `cbor2`

   Ketika Anda membuat file `zip` ini, termasuk hanya item ini, bukan folder yang berisi.

## Langkah 2: Buat fungsi Lambda
<a name="stream-manager-cli-create-function"></a>

1. <a name="cli-create-empty-lambda-role"></a>Buat IAM role sehingga Anda dapat lulus di dalam peran ARN ketika Anda membuat fungsi.

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

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "lambda.amazonaws.com"
               },
              "Action": "sts:AssumeRole"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"},"Action": "sts:AssumeRole"}]}'
   ```

------
**catatan**  
AWS IoT Greengrass tidak menggunakan peran ini karena izin untuk fungsi Lambda Greengrass Anda ditentukan dalam peran grup Greengrass. Untuk tutorial ini, Anda membuat peran kosong.

1. <a name="cli-copy-lambda-role-arn"></a>Salin `Arn` dari output.

1. Gunakan AWS Lambda API untuk membuat `TransferStream` fungsi. Perintah berikut mengasumsikan bahwa file zip dalam direktori saat ini.
   + Ganti *role-arn* dengan `Arn` yang Anda salin.

   ```
   aws lambda create-function \
   --function-name TransferStream \
   --zip-file fileb://transfer_stream_python.zip \
   --role role-arn \
   --handler transfer_stream.function_handler \
   --runtime python3.7
   ```

1. Mempublikasikan versi fungsi.

   ```
   aws lambda publish-version --function-name TransferStream --description 'First version'
   ```

1. Buat alias untuk versi yang dipublikasikan.

   Grup Greengrass dapat mereferensi fungsi Lambda dengan alias (direkomendasikan) atau dengan versi. Menggunakan alias membuatnya lebih mudah untuk mengelola pembaruan kode karena Anda tidak perlu mengubah tabel langganan atau definisi grup ketika kode fungsi diperbarui. Sebaliknya, Anda hanya mengarahkan alias ke versi fungsi baru.

   ```
   aws lambda create-alias --function-name TransferStream --name GG_TransferStream --function-version 1
   ```
**catatan**  
AWS IoT Greengrass **tidak mendukung alias Lambda untuk versi \$1LATEST.**

1. Salin `AliasArn` dari output. Anda menggunakan nilai ini ketika Anda mengkonfigurasi fungsi untuk AWS IoT Greengrass.

Sekarang Anda siap untuk mengkonfigurasi fungsi untuk AWS IoT Greengrass.

## Langkah 3: Buat definisi fungsi dan versi
<a name="stream-manager-cli-create-function-definition"></a>

Langkah ini menciptakan versi definisi fungsi yang mereferensi fungsi Lambda `GGStreamManager` sistem dan fungsi Lambda `TransferStream` yang ditetapkan pengguna Anda. Untuk mengaktifkan pengelola aliran saat Anda menggunakan AWS IoT Greengrass API, versi definisi fungsi Anda harus menyertakan `GGStreamManager` fungsi tersebut.

1. Buat definisi fungsi dengan versi awal yang berisi sistem dan fungsi Lambda yang ditetapkan pengguna.

   Versi definisi berikut mengizinkan pengelola pengaliran dengan default [pengaturan parameter](configure-stream-manager.md). Untuk mengonfigurasi pengaturan kustom, Anda harus menentukan variabel lingkungan untuk parameter pengelola pengaliran yang sesuai. Sebagai contoh, lihat[Untuk mengaktifkan, menonaktifkan, atau mengonfigurasi pengelola pengaliran (CLI)](configure-stream-manager.md#enable-stream-manager-cli). AWS IoT Greengrass menggunakan pengaturan default untuk parameter yang dihilangkan. `MemorySize`Setidaknya harus`128000`. `Pinned`harus diatur ke`true`.
**catatan**  
<a name="long-lived-lambda"></a>Fungsi Lambda yang *berumur panjang* (atau *disematkan*) dimulai secara otomatis setelah AWS IoT Greengrass dimulai dan terus berjalan di wadahnya sendiri. Hal ini berbeda dengan fungsi Lambda *sesuai permintaan* ini, yang dimulai ketika diaktifkan dan berhenti ketika tidak ada tugas yang tersisa untuk dijalankan. Untuk informasi selengkapnya, lihat [Konfigurasi siklus hidup untuk fungsi Greengrass Lambda](lambda-functions.md#lambda-lifecycle).
   + Ganti *arbitrary-function-id* dengan nama untuk fungsi tersebut, seperti**stream-manager**.
   + Ganti *alias-arn* dengan `AliasArn` yang Anda salin saat Anda membuat alias untuk fungsi Lambda`TransferStream`.

    

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

   ```
   aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{
       "Functions": [
           {
               "Id": "arbitrary-function-id",
               "FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", 
               "FunctionConfiguration": {
                   "MemorySize": 128000,
                   "Pinned": true,
                   "Timeout": 3
               }
           },
           {
               "Id": "TransferStreamFunction",
               "FunctionArn": "alias-arn",
               "FunctionConfiguration": {
                   "Executable": "transfer_stream.function_handler",
                   "MemorySize": 16000,
                   "Pinned": true,
                   "Timeout": 5
               }
           }
       ]
   }'
   ```

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

   ```
   aws greengrass create-function-definition \
   --name MyGreengrassFunctions \
   --initial-version '{"Functions": [{"Id": "arbitrary-function-id","FunctionArn": "arn:aws:lambda:::function:GGStreamManager:1", "FunctionConfiguration": {"Environment": {"Variables":{"STREAM_MANAGER_STORE_ROOT_DIR": "/data","STREAM_MANAGER_SERVER_PORT": "1234","STREAM_MANAGER_EXPORTER_MAX_BANDWIDTH": "20000"}},"MemorySize": 128000,"Pinned": true,"Timeout": 3}},{"Id": "TransferStreamFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": {"Executable": "transfer_stream.function_handler", "MemorySize": 16000,"Pinned": true,"Timeout": 5}}]}'
   ```

------
**catatan**  
`Timeout` diperlukan oleh versi definisi fungsi, tetapi `GGStreamManager` tidak menggunakannya. Untuk informasi lebih lanjut tentang `Timeout` dan pengaturan tingkat grup lainnya, lihat [Mengontrol eksekusi fungsi Greengrass Lambda dengan menggunakan konfigurasi grup khusus](lambda-group-config.md).

1. Salin `LatestVersionArn` dari output. Anda menggunakan nilai ini untuk menambahkan versi definisi fungsi untuk versi grup yang Anda men-deploy ke core.

## Langkah 4: Buat definisi pencatat dan versi
<a name="stream-manager-cli-create-logger-definition"></a>

Konfigurasi pengaturan pencatatan grup. Untuk tutorial ini, Anda mengkonfigurasi komponen AWS IoT Greengrass sistem, fungsi Lambda yang ditentukan pengguna, dan konektor untuk menulis log ke sistem file perangkat inti. Anda dapat menggunakan catatan untuk memecahkan masalah yang mungkin Anda alami. Untuk informasi selengkapnya, lihat [Pemantauan dengan AWS IoT Greengrass log](greengrass-logs-overview.md).

1. <a name="create-logger-definition"></a>Membuat definisi pencatat yang mencakup versi awal.

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

   ```
   aws greengrass create-logger-definition --name "LoggingConfigs" --initial-version '{
       "Loggers": [
           {
               "Id": "1",
               "Component": "GreengrassSystem",
               "Level": "INFO",
               "Space": 10240,
               "Type": "FileSystem"
           },
           {
               "Id": "2",
               "Component": "Lambda",
               "Level": "INFO",
               "Space": 10240,
               "Type": "FileSystem"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-logger-definition \
       --name "LoggingConfigs" \
       --initial-version '{"Loggers":[{"Id":"1","Component":"GreengrassSystem","Level":"INFO","Space":10240,"Type":"FileSystem"},{"Id":"2","Component":"Lambda","Level":"INFO","Space":10240,"Type":"FileSystem"}]}'
   ```

------

1. <a name="copy-logger-definition-version-id"></a>Salin `LatestVersionArn` dari definisi pencatat dari output. Anda menggunakan nilai ini untuk menambahkan versi definisi pencatat ke versi grup yang Anda men-deploy ke core.

## Langkah 5: Dapatkan ARN versi definisi core Anda
<a name="stream-manager-cli-get-core-definition-version-arn"></a>

Dapatkan ARN versi definisi core untuk ditambahkan ke versi grup baru Anda. Untuk men-deploy versi grup, hal itu harus mereferensi versi definisi core yang berisi tepat satu core.

1. <a name="get-group-id-latestversion"></a>Dapatkan IDs versi grup dan grup Greengrass target. Prosedur ini mengasumsikan bahwa ini adalah versi grup dan grup terbaru. Query berikut mengembalikan grup yang paling baru dibuat.

   ```
   aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
   ```

   Atau, Anda dapat melakukan query berdasarkan nama. Nama grup tidak perlu unik, sehingga beberapa grup mungkin ditampilkan.

   ```
   aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
   ```
**catatan**  
<a name="find-group-ids-console"></a>Anda juga dapat menemukan nilai-nilai ini di AWS IoT konsol. ID grup ditampilkan pada halaman **Pengaturan** grup. Versi grup IDs ditampilkan di tab **Deployment** grup.

1. <a name="copy-target-group-id"></a>Salin `Id` dari grup target dari output. Anda menggunakan ini untuk mendapatkan versi definisi core dan ketika Anda men-deploy grup.

1. <a name="copy-latest-group-version-id"></a>Salin `LatestVersion` dari output, yang merupakan ID dari versi terakhir ditambahkan ke grup. Anda menggunakan ini untuk mendapatkan versi definisi core.

1. Dapatkan ARN dari versi definisi core:

   1. Dapatkan versi grup.
      + Ganti *group-id* dengan `Id` yang Anda salin untuk grup.
      + Ganti *group-version-id* dengan `LatestVersion` yang Anda salin untuk grup.

      ```
      aws greengrass get-group-version \
      --group-id group-id \
      --group-version-id group-version-id
      ```

   1. Salin `CoreDefinitionVersionArn` dari output. Anda menggunakan nilai ini untuk menambahkan versi definisi core untuk versi grup yang Anda men-deploy ke core.

## Langkah 6: Buat versi grup
<a name="stream-manager-cli-create-group-version"></a>

Sekarang, Anda siap untuk membuat versi grup yang berisi entitas yang ingin Anda gunakan. Anda melakukannya dengan membuat versi grup yang mereferensi versi target dari setiap tipe komponen. Untuk tutorial ini, Anda menyertakan versi definisi core, versi definisi fungsi, dan versi definisi logger.

1. Buat versi grup.
   + Ganti *group-id* dengan `Id` yang Anda salin untuk grup.
   + Ganti *core-definition-version-arn* dengan `CoreDefinitionVersionArn` yang Anda salin untuk versi definisi inti.
   + Ganti *function-definition-version-arn* dengan `LatestVersionArn` yang Anda salin untuk versi definisi fungsi baru Anda.
   + Ganti *logger-definition-version-arn* dengan `LatestVersionArn` yang Anda salin untuk versi definisi logger baru Anda.

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --logger-definition-version-arn logger-definition-version-arn
   ```

1. <a name="copy-group-version-id"></a>Salin `Version` dari output. Ini adalah ID dari versi grup baru.

## Langkah 7: Buat deployment
<a name="stream-manager-cli-create-deployment"></a>

Terapkan grup ke perangkat core.

1. <a name="shared-deploy-group-checkggc"></a>Pastikan AWS IoT Greengrass inti sedang berjalan. Jalankan perintah berikut di terminal Raspberry Pi Anda, sesuai kebutuhan.

   1. Untuk memeriksa apakah daemon sedang berjalan:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Jika outputnya berisi entri `root` untuk `/greengrass/ggc/packages/ggc-version/bin/daemon`, maka daemon sedang berjalan.
**catatan**  
Versi di jalur tergantung pada versi perangkat lunak AWS IoT Greengrass Core yang diinstal pada perangkat inti Anda.

   1. Mulai daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="create-deployment"></a>Buat deployment.
   + Ganti *group-id* dengan `Id` yang Anda salin untuk grup.
   + Ganti *group-version-id* dengan `Version` yang Anda salin untuk versi grup baru.

   ```
   aws greengrass create-deployment \
   --deployment-type NewDeployment \
   --group-id group-id \
   --group-version-id group-version-id
   ```

1. <a name="copy-deployment-id"></a>Salin `DeploymentId` dari output.

1. <a name="get-deployment-status"></a>Dapatkan status deployment.
   + Ganti *group-id* dengan `Id` yang Anda salin untuk grup.
   + Ganti *deployment-id* dengan `DeploymentId` yang Anda salin untuk penerapan.

   ```
   aws greengrass get-deployment-status \
   --group-id group-id \
   --deployment-id deployment-id
   ```

   Jika statusnya `Success`, deployment berhasil. Untuk bantuan pemecahan masalah, lihat [Pemecahan masalah AWS IoT Greengrass](gg-troubleshooting.md).

## Langkah 8: Uji aplikasi
<a name="stream-manager-cli-test-application"></a>

Fungsi Lambda `TransferStream` menghasilkan data perangkat yang disimulasikan. Ini menulis data ke pengaliran yang diekspor oleh pengelola pengaliran ke Kinesis data stream target.

1. <a name="stream-manager-howto-test-open-kinesis-console"></a>Di konsol Amazon Kinesis, di bawah aliran **data Kinesis**, pilih. **MyKinesisStream**
**catatan**  
Jika Anda menjalankan tutorial tanpa Kinesis data streams target, [periksa berkas log](#stream-manager-cli-logs) untuk pengelola pengaliran (`GGStreamManager`). Jika itu berisi `export stream MyKinesisStream doesn't exist` dalam pesan kesalahan, maka uji ini berhasil. Kesalahan ini berarti bahwa layanan mencoba untuk mengekspor ke pengaliran tetapi pengaliran tidak ada.

1. <a name="stream-manager-howto-view-put-records"></a>Pada **MyKinesisStream**halaman, pilih **Monitoring**. Jika uji berhasil, Anda akan melihat data di bagan **Pasang Catatan** ini. Tergantung pada koneksi Anda, mungkin diperlukan waktu satu menit sebelum data ditampilkan.
**penting**  
Setelah selesai melakukan pengujian, hapus Kinesis data stream agar tidak menimbulkan biaya tambahan.  
Atau, jalankan perintah berikut untuk menghentikan daemon Greengrass. Hal ini mencegah core mengirim pesan hingga Anda siap untuk melanjutkan pengujian.  

   ```
   cd /greengrass/ggc/core/
   sudo ./greengrassd stop
   ```

1. Hapus fungsi **TransferStream**Lambda dari inti.

   1. Ikuti [Langkah 6: Buat versi grup](#stream-manager-cli-create-group-version) untuk membuat versi grup baru. tetapi menghapus `--function-definition-version-arn` di dalam opsi perintah `create-group-version` ini. Atau, buat versi definisi fungsi yang tidak menyertakan fungsi **TransferStream**Lambda.
**catatan**  
Dengan menghilangkan fungsi Lambda `GGStreamManager` sistem dari versi grup yang di-deploy, Anda menonaktifkan pengelolaan pengaliran pada core.

   1. Ikuti [Langkah 7: Buat deployment](#stream-manager-cli-create-deployment) untuk men-deploy versi grup baru.

Untuk melihat pencatatan informasi atau pemecahan masalah dengan aliran, periksa log untuk fungsi `TransferStream` dan `GGStreamManager` tersebut. Anda harus memiliki `root` izin untuk membaca AWS IoT Greengrass log pada sistem file.
+ `TransferStream` menulis entri log ke `greengrass-root/ggc/var/log/user/region/account-id/TransferStream.log`.
+ `GGStreamManager` menulis entri log ke `greengrass-root/ggc/var/log/system/GGStreamManager.log`.

Jika Anda memerlukan informasi pemecahan masalah lainnya, Anda dapat mengatur tingkat pencatatan `Lambda` ke `DEBUG` lalu membuat dan men-deploy versi grup baru.

## Lihat juga
<a name="stream-manager-cli-see-also"></a>
+ [Mengelola aliran data pada inti AWS IoT Greengrass](stream-manager.md)
+ [Gunakan StreamManagerClient untuk bekerja dengan aliran](work-with-streams.md)
+ [Ekspor konfigurasi untuk tujuan yang didukung AWS Cloud](stream-export-configurations.md)
+ [Konfigurasikan pengelola AWS IoT Greengrass aliran](configure-stream-manager.md)
+ [Ekspor aliran data ke AWS Cloud (konsol)](stream-manager-console.md)
+ <a name="see-also-iam-cli"></a>[AWS Identity and Access Management (IAM) perintah di *AWS CLI Command*](https://docs.aws.amazon.com/cli/latest/reference/iam) Reference
+ <a name="see-also-lambda-cli"></a>[AWS Lambda perintah](https://docs.aws.amazon.com/cli/latest/reference/lambda) dalam *Referensi AWS CLI Perintah*
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass perintah](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html) dalam *Referensi AWS CLI Perintah*