Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT Core
Komponen yang berjalan pada perangkat inti Anda dapat menggunakan pustaka komunikasi interproses AWS IoT Greengrass Inti (IPC) di dalam AWS IoT Device SDK untuk berkomunikasi dengan AWS IoT Greengrass inti dan komponen Greengrass lainnya. Untuk mengembangkan dan menjalankan komponen khusus yang menggunakan IPC, Anda harus menggunakan AWS IoT Device SDK untuk terhubung ke layanan AWS IoT Greengrass Core IPC dan melakukan operasi IPC.
Antarmuka IPC mendukung dua jenis operasi:
-
Permintaan/tanggapan
Komponen mengirim permintaan ke layanan IPC dan menerima respons yang berisi hasil permintaan.
-
Berlangganan
Komponen mengirim permintaan berlangganan ke layanan IPC dan mengharapkan aliran pesan peristiwa sebagai tanggapan. Komponen menyediakan bagian yang menangani langganan yang menangani pesan peristiwa, kesalahan, dan penutupan aliran. AWS IoT Device SDK Termasuk antarmuka handler dengan respon yang benar dan jenis peristiwa untuk setiap operasi IPC. Untuk informasi selengkapnya, lihat Berlangganan pengaliran peristiwa IPC.
Topik
- Versi klien IPC
- SDK yang didukung untuk komunikasi antar proses
- Connect ke layanan AWS IoT Greengrass Core IPC
- Otorisasi komponen untuk melakukan operasi IPC
- Berlangganan pengaliran peristiwa IPC
- Praktik terbaik IPC
- Pesan lokal publikasi/berlangganan
- Terbitkan/berlangganan pesan MQTT AWS IoT Core
- Berinteraksilah dengan siklus hidup komponen
- Berinteraksilah dengan konfigurasi komponen
- Ambil nilai-nilai rahasia
- Berinteraksi dengan bayangan lokal
- Kelola penerapan dan komponen lokal
- Otentikasi dan otorisasi perangkat klien
Versi klien IPC
Dalam versi yang lebih baru dari Java dan Python SDK, AWS IoT Greengrass menyediakan versi perbaikan dari klien IPC, yang disebut IPC client V2. Klien IPC V2:
-
Mengurangi jumlah kode yang perlu Anda tulis untuk menggunakan operasi IPC dan membantu menghindari kesalahan umum yang dapat terjadi dengan klien IPC V1.
-
Memanggil callback handler langganan di thread terpisah, sehingga Anda sekarang dapat menjalankan kode pemblokiran, termasuk panggilan fungsi IPC tambahan, dalam callback handler langganan. Klien IPC V1 menggunakan thread yang sama untuk berkomunikasi dengan server IPC dan memanggil callback handler langganan.
-
Memungkinkan Anda memanggil operasi berlangganan menggunakan ekspresi Lambda (Java) atau fungsi (Python). Klien IPC V1 mengharuskan Anda untuk menentukan kelas handler berlangganan.
-
Menyediakan versi sinkron dan asinkron dari setiap operasi IPC. Klien IPC V1 hanya menyediakan versi asinkron dari setiap operasi.
Kami menyarankan Anda menggunakan klien IPC V2 untuk memanfaatkan peningkatan ini. Namun, banyak contoh dalam dokumentasi ini dan dalam beberapa konten online hanya menunjukkan bagaimana menggunakan klien IPC V1. Anda dapat menggunakan contoh dan tutorial berikut untuk melihat komponen sampel yang menggunakan klien IPC V2:
Saat ini, AWS IoT Device SDK untuk C++ v2 hanya mendukung klien IPC V1.
SDK yang didukung untuk komunikasi antar proses
Pustaka AWS IoT Greengrass Core IPC disertakan dalam versi berikut AWS IoT Device SDK .
SDK | Versi minimum | Penggunaan |
---|---|---|
v1.6.0 |
Lihat Gunakan AWS IoT Device SDK untuk Java v2 (klien IPC V2) |
|
v1.9.0 |
Lihat Gunakan AWS IoT Device SDK untuk Python v2 (klien IPC V2) |
|
v1.17.0 |
||
v1.12.0 |
Lihat Gunakan AWS IoT Device SDK untuk JavaScript v2 (klien IPC V1) |
Connect ke layanan AWS IoT Greengrass Core IPC
Untuk menggunakan komunikasi interprocess dalam komponen kustom Anda, Anda harus membuat koneksi ke soket server IPC yang dijalankan oleh perangkat lunak AWS IoT Greengrass Core. Selesaikan tugas-tugas berikut untuk mengunduh dan menggunakan AWS IoT Device SDK dalam bahasa pilihan Anda.
Untuk menggunakan AWS IoT Device SDK untuk Java v2 (klien IPC V2)
-
Unduh AWS IoT Device SDK untuk Java v2
(v1.6.0 atau yang lebih baru). -
Lakukan salah satu dari berikut ini untuk menjalankan kode kustom Anda dalam komponen Anda:
-
Bangun komponen Anda sebagai file JAR yang menyertakan AWS IoT Device SDK, dan jalankan file JAR ini dalam resep komponen Anda.
-
Tentukan AWS IoT Device SDK JAR sebagai artefak komponen, dan tambahkan artefak itu ke classpath saat Anda menjalankan aplikasi dalam resep komponen Anda.
-
-
Gunakan kode berikut untuk membuat klien IPC.
try (GreengrassCoreIPCClientV2 ipcClient = GreengrassCoreIPCClientV2.builder().build()) { // Use client. } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception occurred when using IPC.", e); System.exit(1); }
Untuk menggunakan AWS IoT Device SDK untuk Python v2 (klien IPC V2)
-
Unduh AWS IoT Device SDK untuk Python
(v1.9.0 atau yang lebih baru). -
Tambahkan langkah instalasi
SDK ke siklus hidup instalasi dalam resep komponen Anda. -
Buat koneksi ke layanan AWS IoT Greengrass Core IPC. Gunakan kode berikut untuk membuat klien IPC.
from awsiot.greengrasscoreipc.clientv2 import GreengrassCoreIPCClientV2 try: ipc_client = GreengrassCoreIPCClientV2() # Use IPC client. except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)
Untuk membangun AWS IoT Device SDK v2 untuk C ++, perangkat harus memiliki alat berikut:
-
C++ 11 atau yang lebih baru
-
CMake 3.1 atau yang lebih baru
-
Salah satu penyusun berikut:
-
GCC 4.8 atau yang lebih baru
-
Clang 3.9 atau yang lebih baru
-
MSVC 2015 atau yang lebih baru
-
Untuk menggunakan AWS IoT Device SDK untuk C++ v2
-
Unduh AWS IoT Device SDK untuk C++ v2
(v1.17.0 atau yang lebih baru). -
Ikuti petunjuk penginstalan di README
untuk membangun C++ v2 dari sumber. AWS IoT Device SDK -
Dalam alat bangun C ++ Anda, tautkan pustaka IPC Greengrass,
AWS::GreengrassIpc-cpp
, yang telah Anda bangun pada langkah sebelumnya. ContohCMakeLists.txt
berikut menautkan pustaka IPC Greengrass untuk proyek yang Anda bangun dengan CMake.cmake_minimum_required(VERSION 3.1) project (greengrassv2_pubsub_subscriber) file(GLOB MAIN_SRC "*.h" "*.cpp" ) add_executable(${PROJECT_NAME} ${MAIN_SRC}) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX CXX_STANDARD 11) find_package(aws-crt-cpp PATHS ~/sdk-cpp-workspace/build) find_package(EventstreamRpc-cpp PATHS ~/sdk-cpp-workspace/build) find_package(GreengrassIpc-cpp PATHS ~/sdk-cpp-workspace/build) target_link_libraries(${PROJECT_NAME} AWS::GreengrassIpc-cpp)
-
Dalam kode komponen Anda, buat koneksi ke layanan AWS IoT Greengrass Core IPC untuk membuat klien IPC ()
Aws::Greengrass::GreengrassCoreIpcClient
. Anda harus menentukan pengelola siklus hidup koneksi IPC yang menangani koneksi IPC, pemutusan, dan peristiwa kesalahan. Contoh berikut membuat klien IPC dan pengelola siklus hidup koneksi IPC yang mencetak ketika klien IPC terhubung, terputus, dan menemukan kesalahan.#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IpcClientLifecycleHandler : public ConnectionLifecycleHandler { void OnConnectCallback() override { std::cout << "OnConnectCallback" << std::endl; } void OnDisconnectCallback(RpcError error) override { std::cout << "OnDisconnectCallback: " << error.StatusToString() << std::endl; exit(-1); } bool OnErrorCallback(RpcError error) override { std::cout << "OnErrorCallback: " << error.StatusToString() << std::endl; return true; } }; int main() { // Create the IPC client. ApiHandle apiHandle(g_allocator); Io::EventLoopGroup eventLoopGroup(1); Io::DefaultHostResolver socketResolver(eventLoopGroup, 64, 30); Io::ClientBootstrap bootstrap(eventLoopGroup, socketResolver); IpcClientLifecycleHandler ipcLifecycleHandler; GreengrassCoreIpcClient ipcClient(bootstrap); auto connectionStatus = ipcClient.Connect(ipcLifecycleHandler).get(); if (!connectionStatus) { std::cerr << "Failed to establish IPC connection: " << connectionStatus.StatusToString() << std::endl; exit(-1); } // Use the IPC client to create an operation request. // Activate the operation request. auto activate = operation.Activate(request, nullptr); activate.wait(); // Wait for Greengrass Core to respond to the request. auto responseFuture = operation.GetResult(); if (responseFuture.wait_for(std::chrono::seconds(timeout)) == std::future_status::timeout) { std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl; exit(-1); } // Check the result of the request. auto response = responseFuture.get(); if (response) { std::cout << "Successfully published to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to publish to topic: " << topic << std::endl; auto errorType = response.GetResultType(); if (errorType == OPERATION_ERROR) { auto *error = response.GetOperationError(); std::cout << "Operation error: " << error->GetMessage().value() << std::endl; } else { std::cout << "RPC error: " << response.GetRpcError() << std::endl; } exit(-1); } return 0; }
-
Untuk menjalankan kode kustom Anda dalam komponen Anda, bangun kode Anda sebagai artefak biner, dan jalankan artefak biner dalam resep komponen Anda. Atur
Execute
izin artefakOWNER
untuk mengaktifkan perangkat lunak AWS IoT Greengrass Core menjalankan artefak biner.Bagian
Manifests
resep komponen Anda ini mungkin terlihat serupa dengan yang berikut ini.
Untuk membangun AWS IoT Device SDK for JavaScript v2 untuk digunakan dengan NodeJS, perangkat harus memiliki alat berikut:
-
NodeJS 10.0 atau yang lebih baru
-
Jalankan
node -v
untuk memeriksa versi Node.
-
-
CMake 3.1 atau yang lebih baru
Untuk menggunakan AWS IoT Device SDK for JavaScript v2 (klien IPC V1)
-
Unduh AWS IoT Device SDK untuk JavaScript v2
(v1.12.10 atau yang lebih baru). -
Ikuti petunjuk penginstalan di README
untuk membangun AWS IoT Device SDK for JavaScript v2 dari sumber. -
Buat koneksi ke layanan AWS IoT Greengrass Core IPC. Selesaikan langkah-langkah berikut untuk membuat klien IPC dan membuat sambungan.
-
Gunakan kode berikut untuk membuat klien IPC.
import * as greengrascoreipc from 'aws-iot-device-sdk-v2'; let client = greengrascoreipc.createClient();
-
Gunakan kode berikut untuk membuat sambungan dari komponen Anda ke inti Greengrass.
await client.connect();
Otorisasi komponen untuk melakukan operasi IPC
Untuk mengizinkan komponen kustom Anda untuk menggunakan beberapa operasi IPC, Anda harus menentukan kebijakan otorisasi yang memungkinkan komponen untuk melakukan operasi pada sumber daya tertentu. Setiap kebijakan otorisasi menentukan daftar operasi dan daftar sumber daya yang diizinkan oleh kebijakan. Sebagai contoh, layanan IPC olah pesan mempublikasikan/berlangganan menentukan operasi publikasi dan langganan untuk sumber daya topik. Anda dapat menentukan wildcard *
untuk mengizinkan akses ke semua operasi atau semua sumber daya.
Anda menentukan kebijakan otorisasi dengan parameter accessControl
konfigurasi, yang dapat Anda atur dalam resep komponen atau saat Anda menerapkan komponen. Objek accessControl
memetakan pengidentifikasi layanan IPC pada daftar kebijakan otorisasi. Anda dapat menentukan beberapa kebijakan otorisasi untuk setiap layanan IPC untuk mengontrol akses. Setiap kebijakan otorisasi memiliki ID kebijakan, yang harus unik di antara semua komponen.
Tip
Untuk membuat ID kebijakan yang unik, Anda dapat menggabungkan nama komponen, nama layanan IPC, dan counter. Sebagai contoh, sebuah komponen bernama com.example.HelloWorld
mungkin menentukan dua kebijakan otorisasi publikasi/berlangganan dengan ID berikut:
-
com.example.HelloWorld:pubsub:1
-
com.example.HelloWorld:pubsub:2
Kebijakan otorisasi menggunakan format berikut. Objek ini adalah parameter konfigurasi accessControl
.
Wildcard dalam kebijakan otorisasi
Anda dapat menggunakan *
wildcard dalam resources
elemen kebijakan otorisasi IPC untuk mengizinkan akses ke beberapa sumber daya dalam satu kebijakan otorisasi.
-
Di semua versi inti Greengrass, Anda dapat menentukan
*
satu karakter sebagai sumber daya untuk memungkinkan akses ke semua sumber daya. -
Di Greengrass nucleus v2.6.0 dan yang lebih baru, Anda dapat menentukan karakter dalam sumber daya agar sesuai
*
dengan kombinasi karakter apa pun. Misalnya, Anda dapat menentukanfactory/1/devices/Thermostat*/status
untuk mengizinkan akses ke topik status untuk semua perangkat termostat di pabrik, tempat nama setiap perangkat dimulaiThermostat
.
Saat menentukan kebijakan otorisasi untuk layanan AWS IoT Core MQTT IPC, Anda juga dapat menggunakan wildcard MQTT (dan) untuk mencocokkan beberapa sumber daya. +
#
Untuk informasi selengkapnya, lihat wildcard MQTT dalam kebijakan otorisasi AWS IoT Core MQTT IPC.
Variabel resep dalam kebijakan otorisasi
Jika Anda menggunakan Greengrass nucleus v2.6.0 atau yang lebih baru, dan Anda menyetel opsi konfigurasi Greengrass nucleus ke, Anda dapat menggunakan variabel resep dalam kebijakan interpolateComponentConfigurationotorisasi. true{iot:thingName} Bila Anda memerlukan kebijakan otorisasi yang menyertakan nama perangkat inti, seperti untuk topik MQTT atau bayangan perangkat, Anda dapat menggunakan variabel resep ini untuk mengonfigurasi kebijakan otorisasi tunggal untuk sekelompok perangkat inti. Misalnya, Anda dapat mengizinkan akses komponen ke sumber daya berikut untuk operasi IPC bayangan.
$aws/things/{iot:thingName}/shadow/
Karakter khusus dalam kebijakan otorisasi
Untuk menentukan literal *
atau ?
karakter dalam kebijakan otorisasi, Anda harus menggunakan urutan escape. Urutan escape berikut menginstruksikan perangkat lunak AWS IoT Greengrass Core untuk menggunakan nilai literal alih-alih makna khusus karakter. Misalnya, *
karakter adalah wildcard yang cocok dengan kombinasi karakter apa pun.
Karakter literal | Karakter pelarian | Catatan |
---|---|---|
|
|
|
|
|
AWS IoT Greengrass saat ini tidak mendukung |
|
|
Gunakan urutan escape ini untuk mencocokkan sumber daya yang berisi |
Contoh kebijakan otorisasi
Anda dapat mereferensikan contoh kebijakan otorisasi berikut untuk membantu Anda mengonfigurasi kebijakan otorisasi untuk komponen Anda.
contoh Contoh resep komponen dengan kebijakan otorisasi
Contoh resep komponen berikut meliputi objek accessControl
yang menentukan kebijakan otorisasi. Kebijakan ini mengotorisasi komponen com.example.HelloWorld
untuk dipublikasikan ke topik test/topic
.
contoh Contoh pembaruan konfigurasi komponen dengan kebijakan otorisasi
Contoh pemutakhiran konfigurasi berikut dalam penerapan menentukan untuk mengonfigurasi komponen dengan accessControl
objek yang mendefinisikan kebijakan otorisasi. Kebijakan ini mengotorisasi komponen com.example.HelloWorld
untuk dipublikasikan ke topik test/topic
.
Berlangganan pengaliran peristiwa IPC
Anda dapat menggunakan operasi IPC untuk berlangganan aliran peristiwa pada perangkat inti Greengrass. Untuk menggunakan operasi berlangganan, tentukan penanganan langganan dan buat permintaan ke layanan IPC. Kemudian, klien IPC menjalankan fungsi penanganan langganan setiap kali perangkat inti mengalirkan pesan peristiwa ke komponen Anda.
Anda dapat menutup suatu langganan untuk menghentikan pemrosesan pesan peristiwa. Untuk melakukannya, hubungi closeStream()
(Java), close()
(Python), atau Close()
(C++) pada objek operasi langganan yang Anda gunakan untuk membuka langganan.
Layanan AWS IoT Greengrass Core IPC mendukung operasi berlangganan berikut:
Tentukan penanganan langganan
Untuk menentukan handler langganan, tentukan fungsi callback yang menangani pesan peristiwa, kesalahan, dan penutupan aliran. Jika Anda menggunakan klien IPC V1, Anda harus mendefinisikan fungsi-fungsi ini di kelas. Jika Anda menggunakan klien IPC V2, yang tersedia di versi SDK Java dan Python yang lebih baru, Anda dapat menentukan fungsi-fungsi ini tanpa membuat kelas handler berlangganan.
Contoh penanganan langganan
Contoh berikut menunjukkan cara menggunakan operasi SubscribeToTopic dan penanganan langganan pada pesan publikasi/langganan lokal.
Praktik terbaik IPC
Praktik terbaik untuk menggunakan IPC dalam komponen khusus berbeda antara klien IPC V1 dan klien IPC V2. Ikuti praktik terbaik untuk versi klien IPC yang Anda gunakan.