AWS IoT Greengrass Version 1 memasuki fase umur panjang pada 30 Juni 2023. Untuk informasi selengkapnya, lihat kebijakan AWS IoT Greengrass V1 pemeliharaan. Setelah tanggal ini, tidak AWS IoT Greengrass V1 akan merilis pembaruan yang menyediakan fitur, penyempurnaan, perbaikan bug, atau patch keamanan. Perangkat yang berjalan AWS IoT Greengrass V1 tidak akan terganggu dan akan terus beroperasi dan terhubung ke cloud. Kami sangat menyarankan Anda bermigrasi ke AWS IoT Greengrass Version 2, yang menambahkan fitur baru yang signifikan dan dukungan untuk platform tambahan.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ekspor aliran data ke AWS Cloud (konsol)
Tutorial ini menunjukkan cara menggunakan AWS IoT konsol untuk mengonfigurasi dan men-deploy AWS IoT Greengrass dengan pengelola pengaliran yang 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 pengaliran di pengelola pengaliran lalu membaca dan menulis untuk itu. Pengelola pengaliran kemudian mengekspor pengaliran ke Kinesis Data Streams. Diagram berikut menunjukkan alur kerja ini.
Fokus dari tutorial ini adalah untuk menunjukkan cara fungsi Lambda yang ditetapkan pengguna menggunakan objek StreamManagerClient
dalam AWS IoT Greengrass Core SDK untuk berinteraksi dengan pengelola pengaliran. Untuk mempermudah, fungsi Lambda Python yang Anda buat untuk tutorial ini menghasilkan data perangkat simulasi.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda memerlukan:
-
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. Tutorial Memulai juga mencakup langkah-langkah untuk menginstal AWS IoT Greengrass perangkat lunak Core.
catatan
Pengelola pengaliran tidak didukung OpenWrt distribusi.
-
Waktu aktif Java 8 (JDK 8) dipasang pada perangkat core.
-
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
dalam dokumentasi OpenJDK.
-
-
AWS IoT Greengrass Core SDK for 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. Untuk kode sampel sampel, lihatAWS IoT GreengrassCore SDK for JavadanAWS IoT GreengrassCore SDK for Node.js di atas GitHub. -
-
Pengaliran tujuan bernama
MyKinesisStream
dibuat di Amazon Kinesis Data Streams dalam hal yang sama Wilayah AWS sebagai grup Greengrass Anda. Untuk informasi lebih lanjut, lihat Buat aliran 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
. 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 yang mengizinkan tindakan
kinesis:PutRecords
pada aliran data target, seperti yang ditunjukkan dalam contoh berikut:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:
region
:account-id
:stream/MyKinesisStream" ] } ] }
Tutorial berisi langkah-langkah tingkat tinggi berikut:
Tutorial akan memakan waktu sekitar 20 menit untuk menyelesaikannya.
Langkah 1: Buat paket deployment fungsi Lambda
Dalam langkah ini, Anda membuat paket deployment fungsi Lambda yang berisi kode fungsi Python dan dependensi. Anda mengunggah paket ini nanti ketika Anda membuat fungsi Lambda dalam AWS Lambda. Fungsi Lambda menggunakan AWS IoT Greengrass Core SDK untuk membuat dan berinteraksi dengan pengaliran lokal.
catatan
Fungsi Lambda yang ditetapkan pengguna milik Anda harus menggunakan AWS IoT Greengrass Core SDK untuk berinteraksi dengan pengelola pengaliran. Untuk informasi lebih lanjut tentang persyaratan untuk Greengrass pengelola pengaliran, lihat Persyaratan pengelola pengaliran Greengrass.
-
Unduh AWS IoT Greengrass Core SDK for Python v1.5.0 atau yang lebih baru.
-
Unzip paket unduhan untuk mendapatkan SDK. SDK adalah folder
greengrasssdk
ini. -
Instal paket dependensi untuk menyertakan dengan SDK dalam paket deployment fungsi Lambda Anda.
-
Arahkan ke direktori SDK yang berisi file
requirements.txt
ini. File ini berisi daftar dependensi. -
Instal dependensi SDK. Sebagai contoh, jalankan perintah
pip
berikut untuk menginstalnya di direktori saat ini:pip install --target . -r requirements.txt
-
-
Simpan fungsi kode Python berikut dalam sebuah file lokal bernama
transfer_stream.py
.Tip
Misalnya kode yang menggunakan Java dan NodeJS, lihatAWS IoT GreengrassCore SDK for Java
danAWS IoT GreengrassCore SDK for Node.js di atas 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())
-
Zip item berikut ke dalam file bernama
transfer_stream_python.zip
. Ini adalah paket deployment fungsi Lambda Anda.-
transfer_stream.py. Logika aplikasi.
-
greengrasssdk. Diperlukan perpustakaan fungsi Python Greengrass Lambda yang menerbitkankan pesan MQTT.
Operasi pengelola pengaliran tersedia dalam versi 1.5.0 atau yang lebih baru dari AWS IoT Greengrass Core SDK for Python.
-
Dependensi yang Anda instal untuk AWS IoT Greengrass Core SDK for Python (sebagai contoh, direktori
cbor2
ini).
Ketika Anda membuat file
zip
ini, termasuk hanya item ini, bukan folder yang berisi. -
Langkah 2: Buat fungsi Lambda
Pada langkah ini, Anda menggunakan konsol AWS Lambda untuk membuat fungsi Lambda dan mengonfigurasinya agar menggunakan paket deployment Anda. Kemudian, Anda mempublikasikan versi fungsi dan membuat alias.
-
Pertama, buat fungsi Lambda.
-
Di AWS Management Console, pilih Layanan, dan buka konsol AWS Lambda tersebut.
-
Pilih Buat fungsi dan kemudian Tulis dari awal.
-
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.
-
-
Di bagian bawah halaman, pilih Buat Fungsi.
-
-
Selanjutnya, daftarkan handler dan unggah paket deployment fungsi Lambda Anda.
-
Pada tab Kode ini, di bawah Sumber kode, pilih Unggah dari. Dari dropdown, pilih file .zip.
-
Pilih Unggah, lalu pilih paket deployment
transfer_stream_python.zip
Anda. Lalu, pilih Simpan. -
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_stream.function_handler
-
-
Pilih Save (Simpan).
catatan
Tombol Tes pada konsol AWS Lambda tidak bekerja dengan fungsi ini. Pada AWS IoT Greengrass Core SDK tidak berisi modul yang diperlukan untuk menjalankan fungsi Greengrass Lambda Anda secara independen di konsol AWS Lambda tersebut. Modul-modul ini (misalnya,
greengrass_common
) dipasok ke fungsi setelah mereka di-deploy ke core Greengrass Anda.
-
-
Sekarang, publikasikan versi pertama fungsi Lambda Anda dan membuat alias untuk versi.
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.
-
PadaTransferStream: 1halaman konfigurasi, dariTindakanmenu, pilihMembuat alias.
-
Pada halaman Buat alias baru ini, gunakan nilai-nilai berikut:
-
Untuk Nama, masukkan
GG_TransferStream
. -
Untuk Versi, pilih 1.
catatan
AWS IoT Greengrass tidak support alias Lambda untuk versi $TERBARU ini.
-
-
Pilih Create (Buat).
-
Sekarang Anda siap untuk menambahkan fungsi Lambda ke grup Greengrass Anda.
Langkah 3: Tambahkan fungsi Lambda ke grup Greengrass
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.
DiAWS IoTpanel navigasi konsol, di bawahKelola, PerluasPerangkat Greengrass, lalu pilihGrup (V1).
Pilih grup target.
-
Pada halaman konfigurasi grup, pilihFungsi Lambdatab.
-
Di bawahFungsi Lambda saya, pilihTambahkan.
-
PadaTambahkan fungsi Lambdahalaman, pilihFungsi Lambdauntuk fungsi Lambda Anda.
-
UntukVersi Lambda, pilihAlias: GG_TransferStream.
Sekarang, konfigurasikan properti yang menentukan perilaku fungsi Lambda dalam grup Greengrass.
-
DiKonfigurasi fungsi Lambdabagian, lakukan perubahan berikut:
-
Atur Batas memori hingga 32 MB.
-
UntukDi-pin, pilihBenar.
catatan
Fungsi Lambda berumur panjang (atau disematkan) memulai secara otomatis setelah AWS IoT Greengrass dimulai dan terus berjalan dalam kontainernya 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.
-
-
PilihTambahkan fungsi Lambda.
Langkah 4: Mengaktifkan pengelola pengaliran
Dalam langkah ini, Anda memastikan bahwa pengelolal pengaliran diaktifkan.
-
Pada halaman konfigurasi grup, pilihFungsi Lambdatab.
-
Di bawahFungsi Lambda sistem, pilihManajer pengaliran, 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 manajer pengaliran AWS IoT Greengrass.
catatan
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
Dalam langkah ini, Anda mengonfigurasi AWS IoT Greengrass komponen sistem, fungsi Lambda yang ditetapkan pengguna, dan konektor dalam grup untuk menulis catatan ke sistem file perangkat core. Anda dapat menggunakan catatan untuk memecahkan masalah yang mungkin Anda alami. Untuk informasi selengkapnya, lihat Pemantauan dengan AWS IoT Greengrass log.
Langkah 6: Men-deploy grup Greengrass
Men-deploy grup ke perangkat core.
Langkah 7: Uji aplikasi
Fungsi Lambda TransferStream
menghasilkan data perangkat yang disimulasikan. Ini menulis data ke pengaliran yang diekspor oleh pengelola pengaliran ke Kinesis data stream target.
-
Di konsol Amazon Kinesis, di bawahKinesis data streams, pilihMyKinesisStream.
catatan
Jika Anda menjalankan tutorial tanpa Kinesis data streams target, periksa berkas log untuk pengelola pengaliran (
GGStreamManager
). Jika itu berisiexport 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. -
PadaMyKinesisStreamhalaman, pilihPemantauan. 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
-
HapusTransferStreamFungsi Lambda dari inti.
DiAWS IoTpanel navigasi konsol, di bawahKelola, PerluasPerangkat Greengrass, lalu pilihGrup (V1).
-
Di bawah grup Greengrass, pilih grup Anda.
-
PadaLambdahalaman, pilih elips (...) untukTransferStreamfungsi, dan kemudian pilihHapus fungsi.
-
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 izin root
untuk membaca catatan AWS IoT Greengrass 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 untuk log Lambda pengguna ke log Debug lalu men-deploy grup lagi.