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 (CLI)
Tutorial ini menunjukkan bagaiman menggunakan AWS CLI 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.
![Diagram alur kerja manajemen pengaliran.](images/stream-manager-scenario.png)
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.
Saat Anda menggunakan AWS IoT Greengrass API, yang mencakup perintah Greengrass di AWS CLI, untuk membuat grup, pengelola aliran dinonaktifkan secara default. Untuk mengaktifkan pengelola pengaliran di core, Anda membuat versi definisi fungsi yang mencakup sistem GGStreamManager
fungsi Lambda dan versi grup yang referensi versi definisi fungsi baru. Kemudian Anda men-deploy grup.
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 pengelola pengelola 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, 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" ] } ] }
-
Menginstal AWS CLI dan mengonfigurasi ke komputer Anda. Untuk informasi lebih lanjut, lihat Menginstal AWS Command Line Interface dan Mengonfigurasi AWS CLI 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 AWS antarmuka baris perintah untuk informasi lebih lanjut tentang perbedaan dalam 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:
Tutorial harus memerlukan waktu sekitar 30 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
-
Buat IAM role sehingga Anda dapat lulus di dalam peran ARN ketika Anda membuat fungsi.
catatan
AWS IoT Greengrass tidak menggunakan peran ini karena izin untuk fungsi Lambda Greengrass ditentukan di dalam peran grup Greengrass. Untuk tutorial ini, Anda membuat peran kosong.
-
Salin
Arn
dari output. -
Gunakan AWS Lambda API untuk membuat
TransferStream
fungsi. Perintah berikut mengasumsikan bahwa file zip ada di dalam direktori saat ini.-
Ganti
role-arn
denganArn
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 -
-
Mempublikasikan versi fungsi.
aws lambda publish-version --function-name TransferStream --description 'First version'
-
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 $TERBARU ini.
-
Salin
AliasArn
dari output. Anda menggunakan nilai ini ketika Anda mengonfigurasi fungsi untuk AWS IoT Greengrass.
Sekarang Anda siap untuk mengonfigurasi fungsi untuk AWS IoT Greengrass.
Langkah 3: Buat definisi fungsi dan versi
Langkah ini menciptakan versi definisi fungsi yang mereferensi fungsi Lambda GGStreamManager
sistem dan fungsi Lambda TransferStream
yang ditetapkan pengguna Anda. Untuk mengaktifkan pengelola pengaliran ketika Anda menggunakan AWS IoT Greengrass API, versi definisi fungsi Anda harus menyertakan fungsi GGStreamManager
ini.
-
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. 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). AWS IoT Greengrass menggunakan pengaturan default untuk parameter yang dihilangkan.
MemorySize
setidaknya harus128000
.Pinned
harus diatur ketrue
.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.
-
Ganti
arbitrary-function-id
dengan nama untuk fungsi, sepertistream-manager
. -
Ganti
alias-arn
denganAliasArn
yang Anda salin ketika Anda membuat alias untukTransferStream
fungsi Lambda.
catatan
Timeout
diperlukan oleh versi definisi fungsi, tetapiGGStreamManager
tidak menggunakannya. Untuk informasi lebih lanjut tentangTimeout
dan pengaturan tingkat grup lainnya, lihat Mengontrol eksekusi fungsi Greengrass Lambda dengan menggunakan konfigurasi grup khusus. -
-
Salin
LatestVersionArn
dari output. Anda menggunakan nilai ini untuk menambahkan versi definisi fungsi untuk versi grup yang Anda terapkan ke inti.
Langkah 4: Buat definisi pencatat dan versi
Konfigurasi pengaturan pencatatan grup. Untuk tutorial ini, Anda mengonfigurasi AWS IoT Greengrass komponen sistem dan fungsi Lambda yang ditentukan pengguna 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.
-
Membuat definisi pencatat yang mencakup versi awal.
-
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
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.
-
Dapatkan ID dari grup Greengrass target dan versi grup. 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
Anda juga dapat menemukan nilai-nilai ini di konsol AWS IoT tersebut. ID grup ditampilkan pada halaman Pengaturan grup. ID versi grup ditampilkan pada grupDeploymentTab.
-
Salin
Id
dari grup target dari output. Anda menggunakan ini untuk mendapatkan versi definisi core dan ketika Anda men-deploy grup. -
Salin
LatestVersion
dari output, yang merupakan ID dari versi terakhir ditambahkan ke grup. Anda menggunakan ini untuk mendapatkan versi definisi core. -
Dapatkan ARN dari versi definisi core:
-
Dapatkan versi grup.
-
Ganti
id-grup
denganId
yang Anda salin untuk grup. -
Ganti
group-version-id
denganLatestVersion
yang Anda salin untuk grup.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idgroup-version-id
-
-
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
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.
-
Buat versi grup.
-
Ganti
grup-id
denganId
yang Anda salin untuk grup. -
Ganti
core-definition-version-arn
denganCoreDefinitionVersionArn
yang Anda salin untuk versi definisi core. -
Ganti
function-definition-version-arn
denganLatestVersionArn
yang Anda salin untuk versi definisi fungsi baru Anda. -
Ganti
logger-definition-version-arn
denganLatestVersionArn
yang Anda salin untuk versi definisi logger baru Anda.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
-
-
Salin
Version
dari output. Ini adalah ID dari versi grup baru.
Langkah 7: Buat deployment
Men-deploy grup ke perangkat core.
-
Buat deployment.
Ganti
grup-id
denganId
yang Anda salin untuk grup.Ganti
group-version-id
denganVersion
yang Anda salin untuk versi grup baru.
aws greengrass create-deployment \ --deployment-type NewDeployment \ --group-id
group-id
\ --group-version-idgroup-version-id
-
Salin
DeploymentId
dari output. -
Dapatkan status deployment.
Ganti
grup-id
denganId
yang Anda salin untuk grup.Ganti
id-deployment
denganDeploymentId
yang Anda salin untuk deployment.
aws greengrass get-deployment-status \ --group-id
group-id
\ --deployment-iddeployment-id
Jika statusnya
Success
, deployment berhasil. Untuk langkah-langkah penyelesaian masalah, lihat Pemecahan Masalah AWS IoT Greengrass.
Langkah 8: 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 core.
Ikuti Langkah 6: Buat versi grup untuk membuat versi grup baru. tetapi menghapus
--function-definition-version-arn
di dalam opsi perintahcreate-group-version
ini. Atau, buat versi definisi fungsi yang tidak mencakupTransferStreamFungsi Lambda.catatan
Dengan menghilangkan fungsi Lambda
GGStreamManager
sistem dari versi grup yang di-deploy, Anda menonaktifkan pengelolaan pengaliran pada core.-
Ikuti Langkah 7: Buat 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 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.logGGStreamManager
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
-
AWS Identity and Access Management perintah (IAM) dalam AWS CLI Referensi Perintah
-
AWS Lambda perintah dalam AWS CLI Referensi Perintah
-
AWS IoT Greengrass perintah dalam AWS CLI Referensi Perintah