

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

# Jalankan AWS Lambda fungsi
<a name="run-lambda-functions"></a>

**catatan**  
AWS IoT Greengrass saat ini tidak mendukung fitur ini di perangkat inti Windows. 

Anda dapat mengimpor AWS Lambda fungsi sebagai komponen yang berjalan pada perangkat AWS IoT Greengrass inti. Anda mungkin ingin melakukan hal ini dalam kasus berikut:
+ Anda memiliki kode aplikasi dalam fungsi Lambda yang ingin Anda deploy ke perangkat inti.
+ Anda memiliki aplikasi AWS IoT Greengrass V1 yang ingin Anda jalankan di perangkat AWS IoT Greengrass V2 inti. Untuk informasi selengkapnya, lihat [Langkah 2: Membuat dan menyebarkan AWS IoT Greengrass V2 komponen untuk memigrasi aplikasi AWS IoT Greengrass V1](set-up-v2-test-device.md#run-v1-applications).

fungsi Lambda meliputi dependensi pada komponen-komponen berikut. Anda tidak perlu mendefinisikan komponen ini sebagai dependensi ketika Anda mengimpor fungsi tersebut. Ketika Anda men-deploy komponen fungsi Lambda, deployment tersebut mencakup dependensi komponen Lambda ini.
+ [Komponen peluncur Lambda](lambda-launcher-component.md) (`aws.greengrass.LambdaLauncher`) menangani proses dan konfigurasi lingkungan.
+ [Komponen manajer Lambda](lambda-manager-component.md) (`aws.greengrass.LambdaManager`) menangani komunikasi antar proses dan penskalaan.
+ [Komponen waktu aktif Lambda](lambda-runtimes-component.md) (`aws.greengrass.LambdaRuntimes`) menyediakan artefak untuk setiap waktu aktif Lambda yang didukung.

**Topics**
+ [Persyaratan](#run-lambda-functions-requirements)
+ [Konfigurasikan siklus hidup fungsi Lambda](#lambda-lifecycle)
+ [Konfigurasikan kontainerisasi fungsi Lambda](#lambda-containerization)
+ [Impor fungsi Lambda sebagai komponen (konsol)](import-lambda-function-console.md)
+ [Impor fungsi Lambda sebagai komponen (AWS CLI)](import-lambda-function-cli.md)

## Persyaratan
<a name="run-lambda-functions-requirements"></a>

Perangkat inti dan fungsi Lambda Anda harus memenuhi persyaratan berikut agar Anda dapat menjalankan fungsi pada perangkat lunak AWS IoT Greengrass Inti:
+ <a name="core-device-lambda-function-requirements"></a>Perangkat inti Anda harus memenuhi persyaratan untuk menjalankan fungsi Lambda. Jika Anda ingin perangkat inti untuk menjalankan fungsi Lambda kontainer, perangkat harus memenuhi persyaratan untuk melakukannya. Untuk informasi selengkapnya, lihat [Persyaratan fungsi Lambda](setting-up.md#greengrass-v2-lambda-requirements).
+ Anda harus menginstal bahasa pemrograman yang digunakan oleh fungsi Lambda pada perangkat inti Anda.
**Tip**  
Anda dapat membuat komponen yang menginstal bahasa pemrograman, dan kemudian menentukan komponen itu sebagai dependensi dari komponen fungsi Lambda Anda. Greengrass mendukung semua versi runtime Python, Node.js, dan Java yang didukung Lambda. Greengrass tidak menerapkan batasan tambahan apa pun pada versi runtime Lambda yang tidak digunakan lagi. Anda dapat menjalankan fungsi Lambda yang menggunakan runtime usang ini AWS IoT Greengrass, tetapi Anda tidak dapat membuatnya. AWS Lambda Untuk informasi selengkapnya tentang AWS IoT Greengrass dukungan untuk runtime Lambda, lihat. [Jalankan AWS Lambda fungsi](#run-lambda-functions)

## Konfigurasikan siklus hidup fungsi Lambda
<a name="lambda-lifecycle"></a>

Siklus hidup fungsi Greengrass Lambda menentukan kapan fungsi dimulai dan bagaimana menciptakan dan menggunakan kontainer. Siklus hidup juga menentukan bagaimana perangkat lunak AWS IoT Greengrass Core mempertahankan variabel dan logika preprocessing yang berada di luar fungsi handler.

AWS IoT Greengrass mendukung on-demand (default) dan siklus hidup yang berumur panjang:
+ Fungsi **sesuai permintaan** dimulai saat dipanggil dan berhenti ketika tidak ada tugas yang tersisa untuk dijalankan. Setiap pemanggilan fungsi membuat wadah terpisah, juga disebut kotak pasir, untuk memproses pemanggilan, kecuali wadah yang ada tersedia untuk digunakan kembali. Kontainer mana pun dapat memproses data yang Anda kirim ke fungsi.

  Beberapa pemanggilan fungsi on-demand dapat berjalan secara bersamaan.

  Variabel dan logika preprocessing yang Anda tentukan di luar fungsi handler tidak dipertahankan saat container baru dibuat.
+ Fungsi **berumur panjang** (atau *disematkan*) dimulai saat perangkat lunak AWS IoT Greengrass Core dimulai dan dijalankan dalam satu wadah. Kontainer yang sama memproses semua data yang Anda kirim ke fungsi.

  Beberapa pemanggilan diantrian hingga perangkat lunak AWS IoT Greengrass Core menjalankan pemanggilan sebelumnya.

  Variabel dan logika preprocessing yang Anda definisikan di luar fungsi handler dipertahankan untuk setiap pemanggilan handler.

  Gunakan fungsi Lambda yang berumur panjang saat Anda harus mulai melakukan pekerjaan tanpa input awal apa pun. Misalnya, fungsi yang berumur panjang dapat memuat dan mulai memproses model pembelajaran mesin agar siap ketika fungsi menerima data perangkat.
**catatan**  
Fungsi berumur panjang memiliki batas waktu yang terkait dengan setiap pemanggilan penangan mereka. Jika Anda ingin memanggil kode yang berjalan tanpa batas waktu, Anda harus memulainya di luar handler. Pastikan tidak ada kode pemblokiran di luar handler yang mungkin mencegah fungsi dari inisialisasi.  
Fungsi-fungsi ini berjalan kecuali perangkat lunak AWS IoT Greengrass Core berhenti, seperti selama penerapan atau reboot. Fungsi-fungsi ini tidak akan berjalan jika fungsi tersebut menemukan pengecualian yang tidak tertangkap, melebihi batas memorinya, atau memasuki status kesalahan, seperti batas waktu penangan.

Untuk informasi selengkapnya tentang penggunaan kembali kontainer, lihat [Memahami Penggunaan Kembali Kontainer AWS Lambda di Blog AWS](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/) *Komputasi*.

## Konfigurasikan kontainerisasi fungsi Lambda
<a name="lambda-containerization"></a>

Secara default, fungsi Lambda berjalan di dalam wadah. AWS IoT Greengrass Wadah Greengrass memberikan isolasi antara fungsi Anda dan host. Isolasi ini meningkatkan keamanan untuk host dan fungsi dalam wadah.

Kami menyarankan Anda menjalankan fungsi Lambda dalam wadah Greengrass, kecuali jika kasus penggunaan Anda mengharuskannya berjalan tanpa kontainerisasi. Dengan menjalankan fungsi Lambda Anda dalam wadah Greengrass, Anda memiliki kontrol lebih besar atas bagaimana Anda membatasi akses ke sumber daya.

Anda dapat menjalankan fungsi Lambda tanpa containerization dalam kasus berikut:
+ Anda ingin berjalan AWS IoT Greengrass di perangkat yang tidak mendukung mode penampung. Contohnya adalah jika Anda ingin menggunakan distribusi Linux khusus, atau memiliki versi kernel sebelumnya yang kedaluwarsa.
+ Anda ingin menjalankan fungsi Lambda Anda di lingkungan kontainer lain dengan overlayFS sendiri, tetapi menghadapi konflik overlayFS ketika Anda menjalankan dalam kontainer Greengrass.
+ Anda memerlukan akses ke sumber daya lokal dengan jalur yang tidak dapat ditentukan pada waktu penerapan, atau yang jalurnya dapat berubah setelah penerapan. Contoh sumber daya ini adalah perangkat yang dapat dicolokkan.
+ Anda memiliki aplikasi sebelumnya yang ditulis sebagai proses, dan Anda mengalami masalah saat menjalankannya di wadah Greengrass.


**Perbedaan kontainerisasi**  

| Kontainerisasi | Catatan | 
| --- | --- | 
|  Kontainer Greengrass  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/run-lambda-functions.html)  | 
|  Tanpa kontainer  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v2/developerguide/run-lambda-functions.html)  | 

Jika Anda mengubah kontainerisasi untuk fungsi Lambda saat Anda menerapkannya, fungsi tersebut mungkin tidak berfungsi seperti yang diharapkan. Jika fungsi Lambda menggunakan sumber daya lokal yang tidak lagi tersedia dengan setelan kontainerisasi baru, penerapan gagal.
+ Saat Anda mengubah fungsi Lambda dari berjalan di wadah Greengrass menjadi berjalan tanpa kontainerisasi, batas memori fungsi akan dibuang. Anda harus mengakses sistem file secara langsung daripada menggunakan sumber daya lokal terlampir. Anda harus menghapus sumber daya yang terlampir sebelum menerapkan fungsi Lambda.
+ Ketika Anda mengubah fungsi Lambda dari berjalan tanpa kontainerisasi menjadi berjalan dalam kontainer, fungsi Lambda Anda kehilangan akses langsung ke sistem file. Anda harus menentukan batas memori untuk setiap fungsi atau menerima batas memori 16 MB default. Anda dapat mengonfigurasi pengaturan ini untuk setiap fungsi Lambda saat Anda menerapkannya.

Untuk mengubah setelan kontainerisasi komponen fungsi Lambda, tetapkan nilai parameter `containerMode` konfigurasi ke salah satu opsi berikut saat Anda menerapkan komponen.<a name="lambda-function-component-container-mode-parameter"></a>
+ `NoContainer` – Komponen tersebut tidak berjalan di lingkungan waktu aktif terisolasi.
+ `GreengrassContainer`— Komponen berjalan di lingkungan runtime yang terisolasi di dalam AWS IoT Greengrass wadah.

Untuk informasi selengkapnya tentang cara menerapkan dan mengonfigurasi komponen, lihat [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md) dan[Perbarui konfigurasi komponen](update-component-configurations.md).

# Impor fungsi Lambda sebagai komponen (konsol)
<a name="import-lambda-function-console"></a>

Saat Anda menggunakan [konsol AWS IoT Greengrass](https://console.aws.amazon.com/greengrass) tersebut untuk membuat komponen fungsi Lambda, Anda mengimpor elemen fungsi AWS Lambda yang ada dan kemudian mengonfigurasinya untuk membuat komponen yang berjalan pada perangkat Greengrass Anda.

Sebelum memulai, tinjau [persyaratan](https://docs.aws.amazon.com/greengrass/v2/developerguide/run-lambda-functions.html#run-lambda-functions-requirements) untuk menjalankan fungsi Lambda pada perangkat Greengrass.

**Topics**
+ [Langkah 1: Pilih fungsi Lambda yang akan diimpor](#import-lambda-console-choose-function)
+ [Langkah 2: Konfigurasikan parameter fungsi Lambda](#import-lambda-console-configure-function-parameters)
+ [Langkah 3: (Opsional) Tentukan platform yang didukung untuk fungsi Lambda](#import-lambda-console-configure-platforms)
+ [Langkah 4: (Opsional) Tentukan dependensi komponen untuk fungsi Lambda](#import-lambda-console-configure-dependencies)
+ [Langkah 5: (Opsional) Jalankan fungsi Lambda dalam kontainer](#import-lambda-console-run-isolated)
+ [Langkah 6: Buat komponen fungsi Lambda](#import-lambda-console-create-deploy)

## Langkah 1: Pilih fungsi Lambda yang akan diimpor
<a name="import-lambda-console-choose-function"></a>

1. Pada menu navigasi [konsol AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), pilih **Komponen**.

1. Pada halaman **Komponen**, pilih **Buat komponen**.

1. Pada halaman **Buat komponen**, di bawah **Informasi komponen**, pilih **Impor fungsi Lambda**.

1. Pada **Fungsi Lambda**, cari dan pilih fungsi Lambda yang ingin Anda impor. 

   AWS IoT Greengrass membuat komponen dengan nama fungsi Lambda.

1. Pada **Versi fungsi Lambda**, pilih versi yang akan diimpor. Anda tidak dapat memilih alias Lambda seperti `$LATEST`.

   AWS IoT Greengrass membuat komponen dengan versi fungsi Lambda sebagai versi semantik yang valid. Misalnya, jika versi fungsi Anda adalah `3`, versi komponen akan menjadi `3.0.0`.

## Langkah 2: Konfigurasikan parameter fungsi Lambda
<a name="import-lambda-console-configure-function-parameters"></a>

Pada halaman **Buat komponen**, di bawah **Konfigurasi fungsi Lambda**, konfigurasikan parameter berikut yang akan digunakan untuk menjalankan fungsi Lambda.

1. (Opsional) Tambahkan sumber peristiwa di mana fungsi Lambda berlangganan untuk pesan kerja. Anda dapat menentukan sumber acara untuk berlangganan fungsi ini ke publish/subscribe pesan lokal dan pesan AWS IoT Core MQTT. Fungsi Lambda dipanggil saat menerima pesan dari sumber peristiwa.
**catatan**  
Untuk berlangganan fungsi ini ke pesan dari fungsi atau komponen Lambda lainnya, gunakan komponen [router langganan lama saat Anda menerapkan komponen](legacy-subscription-router-component.md) fungsi Lambda ini. Saat Anda men-deploy komponen router langganan warisan, tentukan langganan yang digunakan oleh fungsi Lambda tersebut.

   Di bawah **Sumber peristiwa**, lakukan hal berikut untuk menambahkan sumber peristiwa:

   1. Untuk setiap sumber peristiwa yang Anda tambahkan, tentukan opsi berikut: 
      + **Topik** — Topik untuk berlangganan pesan.
      + **Jenis** — Jenis sumber peristiwa. Pilih dari salah satu pilihan berikut:
        + **Publikasi/berlangganan lokal - Berlangganan** pesan lokal. publish/subscribe 

          **Jika Anda menggunakan [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 atau yang lebih baru dan [Lambda](lambda-manager-component.md) manager v2.2.5 atau yang lebih baru, Anda dapat menggunakan wildcard topik MQTT (dan) di Topik saat Anda menentukan jenis ini. `+` `#`**
        + **AWS IoT Core MQTT** — Berlangganan pesan MQTT. AWS IoT Core 

          Anda dapat menggunakan wildcard topik MQTT (`+`dan`#`) di **Topik** saat Anda menentukan jenis ini.

   1. Untuk menambahkan sumber peristiwa lain, pilih **Tambahkan sumber peristiwa** dan ulangi langkah sebelumnya. Untuk menghapus sumber peristiwa, pilih **Hapus** di samping sumber peristiwa yang ingin Anda hapus.

1. Untuk **Batas waktu (detik)**, masukkan jumlah maksimum waktu dalam detik yang dapoat dijalankan oleh fungsi Lambda yang tidak disematkan sebelum waktunya habis. Default-nya adalah 3 detik.

1. Untuk **Yang Disematkan**, pilih apakah komponen fungsi Lambda akan disematkan. Default-nya adalah **BETUL**.<a name="lambda-function-lifecycle-type"></a>
   + Fungsi Lambda yang disematkan (atau berumur panjang) dimulai saat AWS IoT Greengrass dimulai dan terus berjalan di wadahnya sendiri.
   + Fungsi Lambda yang tidak disematkan (atau sesuai permintaan) dimulai hanya ketika menerima item pekerjaan dan keluar setelah tidak berjalan selama waktu tidak berjalan maksimum yang ditentukan. Jika fungsi memiliki beberapa item kerja, perangkat lunak AWS IoT Greengrass Core membuat beberapa instance fungsi.

1. (Opsional) Di bawah **Parameter tambahan**, atur parameter fungsi Lambda berikut.
   + **Batas waktu status (detik)** — Interval dalam detik di mana komponen fungsi Lambda mengirimkan pembaruan status ke komponen manajer Lambda. Parameter ini hanya berlaku untuk fungsi yang disematkan. Default-nya adalah 60 detik.
   + **Ukuran antrean maksimum** – Ukuran maksimum antrean pesan untuk komponen fungsi Lambda. Perangkat lunak AWS IoT Greengrass Core menyimpan pesan dalam antrian FIFO (first-in, first-out) hingga dapat menjalankan fungsi Lambda untuk mengkonsumsi setiap pesan. Default-nya adalah 1.000 pesan.
   + **Jumlah maksimum instans** — Jumlah maksimum instans yang dapat dijalankan oleh fungsi Lambda yang tidak disematkan pada saat yang sama. Default-nya adalah 100 instans.
   + **Waktu idle maksimum (detik)** - Jumlah waktu maksimum dalam detik sehingga fungsi Lambda yang tidak disematkan dapat menganggur sebelum perangkat lunak Core menghentikan AWS IoT Greengrass prosesnya. Bawaannya adalah 60 detik.
   + **Jenis pengodean** — Jenis muatan yang didukung oleh fungsi Lambda. Pilih dari salah satu pilihan berikut:
     + **JSON**
     + **Biner**

     Default-nya adalah JSON.

1. (Opsional) Tentukan daftar argumen baris perintah yang akan diteruskan ke fungsi Lambda ketika berjalan. 

   1. Di bawah **Parameter tambahan, Argumen proses**, pilih **Tambahkan argumen**.

   1. Untuk setiap argumen yang Anda tambahkan, masukkan argumen yang ingin Anda teruskan ke fungsi.

   1. Untuk menghapus argumen, pilih **Hapus** di samping argumen yang ingin Anda hapus.

1. (Opsional) Tentukan variabel lingkungan yang tersedia untuk fungsi Lambda ketika berjalan. Variabel lingkungan memungkinkan Anda untuk menyimpan dan memperbarui pengaturan konfigurasi tanpa perlu mengubah kode fungsi.

   1. Di bawah **Parameter tambahan, Variabel lingkungan**, pilih **Tambahkan variabel lingkungan**.

   1. Untuk setiap variabel lingkungan yang Anda tambahkan, tentukan opsi berikut:
      + **Kunci** — Nama variabel.
      + **Nilai** — Nilai default untuk variabel ini.

   1. Untuk menghapus variabel lingkungan, pilih **Hapus** di samping variabel lingkungan yang ingin Anda hapus.

## Langkah 3: (Opsional) Tentukan platform yang didukung untuk fungsi Lambda
<a name="import-lambda-console-configure-platforms"></a>

Semua perangkat inti memiliki atribut untuk sistem operasi dan arsitektur. Saat Anda menerapkan komponen fungsi Lambda, AWS IoT Greengrass perangkat lunak Core membandingkan nilai platform yang Anda tentukan dengan atribut platform pada perangkat inti untuk menentukan apakah fungsi Lambda didukung pada perangkat tersebut. 

**catatan**  
Anda dapat menentukan atribut platform kustom untuk perangkat inti ketika Anda men-deploy komponen inti Greengrass ke perangkat inti. Untuk informasi lebih lanjut, lihat bagian [platform menimpa parameter](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides) dari [komponen nukleus Greengrass](greengrass-nucleus-component.md). 

Di bawah **Konfigurasi fungsi Lambda, Parameter tambahan, Platform**, lakukan hal berikut untuk menentukan platform yang mendukung fungsi Lambda ini.

1. Untuk setiap platform, tentukan opsi berikut: 
   + **Sistem operasi** – Nama sistem operasi untuk platform tersebut. Saat ini, satu-satunya nilai yang didukung adalah `linux`.
   + **Arsitektur** — Arsitektur prosesor untuk platform. Nilai yang didukung adalah:
     + `amd64`
     + `arm`
     + `aarch64`
     + `x86`

1. Untuk menambahkan platform lain, pilih **Tambahkan platform** dan ulangi langkah sebelumnya. Untuk menghapus platform yang didukung, pilih **Hapus** di samping platform yang ingin Anda hapus.

## Langkah 4: (Opsional) Tentukan dependensi komponen untuk fungsi Lambda
<a name="import-lambda-console-configure-dependencies"></a>

Dependensi komponen mengidentifikasi komponen tambahan AWS yang disediakan atau komponen khusus yang digunakan fungsi Anda. Ketika Anda men-deploy komponen fungsi Lambda, deployment tersebut mencakup dependensi ini yang akan dijalankan oleh fungsi Anda.

**penting**  <a name="import-v1-lambda-note"></a>
Untuk mengimpor fungsi Lambda yang Anda buat untuk dijalankan di AWS IoT Greengrass V1, Anda harus menentukan dependensi komponen individual untuk fitur yang digunakan fungsi Anda, seperti rahasia, bayangan lokal, dan pengelola aliran. Tentukan komponen ini sebagai [dependensi keras](component-recipe-reference.md) sehingga komponen fungsi Lambda Anda akan me-restart jika dependensi tersebut mengubah keadaan. Untuk informasi selengkapnya, lihat [Impor fungsi Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

Di bawah **Konfigurasi fungsi Lambda, Parameter tambahan, Dependensi komponen**, lengkapi langkah-langkah berikut untuk menentukan dependensi komponen untuk fungsi Lambda Anda.

1.  Pilih **Tambahkan dependensi**.

1. Untuk setiap komponen dependensi yang Anda tambahkan, tentukan opsi berikut: 
   + **Nama komponen ** – Nama komponen tersebut. Misalnya, masukkan **aws.greengrass.StreamManager** untuk menyertakan [komponen stream manager](stream-manager-component.md).
   + **Persyaratan versi** – Kendala versi semantik npm-style yang mengidentifikasi versi yang kompatibel dari dependensi komponen ini. Anda dapat menentukan versi tunggal atau serangkaian versi. Misalnya, masukkan **^1.0.0** untuk menetapkan bahwa fungsi Lambda ini tergantung pada versi apa pun dalam versi utama pertama dari komponen stream manager. Untuk informasi lebih lanjut tentang kendala versi semantik, lihat [kalkulator semver npm](https://semver.npmjs.com/). 
   + **Jenis** – Jenis dependensi. Pilih dari salah satu opsi berikut:
     + **Keras** – Komponen fungsi Lambda akan memulai ulang jika dependensi mengubah keadaan. Ini adalah pilihan default.
     + **Lunak** – Komponen fungsi Lambda tidak memulai ulang jika dependensi mengubah keadaan.

1. Untuk menghapus dependensi komponen, pilih **Hapus** di sebelah dependensi komponen

## Langkah 5: (Opsional) Jalankan fungsi Lambda dalam kontainer
<a name="import-lambda-console-run-isolated"></a>

Secara default, fungsi Lambda berjalan di lingkungan runtime yang terisolasi di dalam perangkat lunak Core. AWS IoT Greengrass Anda juga dapat memilih untuk menjalankan fungsi Lambda sebagai proses tanpa isolasi apa pun (yaitu, dalam mode **Tanpa kontainer**). 

Di bawah **Konfigurasi proses Linux**, untuk **Mode isolasi**, pilih dari opsi berikut untuk memilih kontainerisasi untuk fungsi Lambda Anda:
+ **Kontainer Greengrass** - Fungsi Lambda berjalan di kontainer. Ini adalah pilihan default.
+ **Tanpa kontainer** — Fungsi Lambda berjalan sebagai proses tanpa isolasi apa pun.

Jika Anda menjalankan fungsi Lambda dalam kontainer, selesaikan langkah-langkah berikut untuk mengonfigurasi konfigurasi proses untuk fungsi Lambda. 

1. Konfigurasikan jumlah memori dan sumber daya sistem, seperti volume dan perangkat, agar dapat tersedia untuk kontainer.

   Di bawah **Parameter kontainer**, lakukan hal berikut.

   1. Untuk **Ukuran memori**, masukkan ukuran memori yang ingin Anda alokasikan ke kontainer. Anda dapat menentukan ukuran memori dalam **MB** atau **kB**.

   1. Untuk **Folder sys hanya-baca**, pilih apakah kontainer tersebut dapat membaca informasi dari folder `/sys` perangkat tersebut. Default-nya adalah **SALAH**.

1. (Opsional) Konfigurasikan volume lokal yang dapat diakses oleh fungsi Lambda yang terkontainerisasi. Saat Anda menentukan volume, perangkat lunak AWS IoT Greengrass Core memasang file sumber ke tujuan di dalam wadah. 

   1. Di bawah **volume**, pilih **Tambahkan volume**. 

   1. Untuk setiap volume yang Anda tambahkan, tentukan opsi berikut:
      + **Volume fisik** – Path ke folder sumber pada perangkat inti.
      + **Volume logis** – Path ke folder tujuan dalam kontainer.
      + **Izin** — (Opsional) Izin untuk mengakses folder sumber dari kontainer. Pilih dari salah satu pilihan berikut:
        + **Hanya-baca** — Fungsi Lambda memiliki akses hanya baca ke folder sumber. Ini adalah pilihan default.
        + **Baca-tulis** — Fungsi Lambda memiliki akses baca/tulis ke folder sumber.
      + **Tambahkan pemilik grup** — (Opsional) Apakah akan menambahkan grup sistem yang menjalankan komponen fungsi Lambda sebagai pemilik folder sumber atau tidak. Default-nya adalah **SALAH**.

   1. Untuk menghapus volume, pilih **Hapus** di samping volume yang ingin Anda hapus.

1. (Opsional) Konfigurasikan perangkat sistem lokal yang dapat diakses oleh fungsi Lambda yang terkontainerisasi.

   1. Di bawah **Perangkat**, pilih **Tambahkan perangkat**. 

   1. Untuk setiap perangkat yang Anda tambahkan, tentukan opsi berikut:
      + **Jalur pasang** – Jalur ke perangkat sistem pada perangkat inti.
      + **Izin** – (Opsional) Izin untuk mengakses perangkat sistem dari kontainer. Pilih dari salah satu pilihan berikut:
        + **Hanya-baca** — Fungsi Lambda memiliki akses hanya baca ke perangkat sistem. Ini adalah pilihan default.
        + **Baca-tulis** — Fungsi Lambda memiliki akses baca/tulis ke folder sumber.
      + **Tambahkan pemilik grup** — (Opsional) Apakah akan menambahkan grup sistem yang menjalankan komponen fungsi Lambda sebagai pemilik perangkat sistem atau tidak. Default-nya adalah **SALAH**.

## Langkah 6: Buat komponen fungsi Lambda
<a name="import-lambda-console-create-deploy"></a>

Setelah Anda mengonfigurasi pengaturan untuk komponen fungsi Lambda Anda, pilih **Buat** untuk menyelesaikan pembuatan komponen baru. 

Untuk menjalankan fungsi Lambda pada perangkat inti Anda, Anda dapat kemudian men-deploy komponen baru ke perangkat inti Anda. Lihat informasi yang lebih lengkap di [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).

# Impor fungsi Lambda sebagai komponen (AWS CLI)
<a name="import-lambda-function-cli"></a>

Gunakan [CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html)operasi untuk membuat komponen dari fungsi Lambda. Saat Anda memanggil operasi ini, tentukan `lambdaFunction` untuk mengimpor fungsi Lambda. 

**Topics**
+ [Langkah 1: Tentukan konfigurasi fungsi Lambda](#create-lambda-function-configuration-cli)
+ [Langkah 2: Buat komponen fungsi Lambda](#create-lambda-component-cli)

## Langkah 1: Tentukan konfigurasi fungsi Lambda
<a name="create-lambda-function-configuration-cli"></a>

1. Buat file bernama `lambda-function-component.json`, lalu salin objek JSON berikut ke dalam file. Ganti `lambdaArn` dengan ARN fungsi Lambda yang akan diimpor.

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1"
     }
   }
   ```
**penting**  
Anda harus menentukan ARN yang mencakup versi fungsi yang akan diimpor. Anda tidak dapat menggunakan alias versi seperti `$LATEST`.

1. (Opsional) Tentukan nama (`componentName`) komponen. Jika Anda menghilangkan parameter ini, AWS IoT Greengrass buat komponen dengan nama fungsi Lambda.

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda"
     }
   }
   ```

1. (Opsional) Tentukan versi (`componentVersion`) untuk komponen. Jika Anda menghilangkan parameter ini, AWS IoT Greengrass buat komponen dengan versi fungsi Lambda sebagai versi semantik yang valid. Misalnya, jika versi fungsi Anda adalah `3`, versi komponen akan menjadi `3.0.0`.
**catatan**  
<a name="component-version-uniqueness-para"></a>Setiap versi komponen yang Anda upload harus unik. Pastikan Anda mengunggah versi komponen yang benar, karena Anda tidak dapat mengeditnya setelah mengunggahnya.  
<a name="semver-para"></a>AWS IoT Greengrass menggunakan versi semantik untuk komponen. Versi semantik mengikuti sistem nomor *mayor*.*minor*.*patch*. Sebagai contoh, versi `1.0.0` merupakan rilis mayor pertama untuk sebuah komponen. Untuk informasi lebih lanjut, lihat [spesifikasi versi semantik](https://semver.org/).

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda",
       "componentVersion": "1.0.0"
     }
   }
   ```

1. (Opsional) Tentukan platform yang mendukung fungsi Lambda ini. Setiap platform berisi peta atribut yang menentukan suatu platform. Semua perangkat inti memiliki atribut untuk sistem operasi (`os`) dan arsitektur (`architecture`). Perangkat lunak inti AWS IoT Greengrass dapat menambahkan atribut platform lainnya. Anda dapat menentukan atribut platform kustom untuk perangkat inti ketika Anda men-deploy [komponen inti Greengrass](greengrass-nucleus-component.md) ke perangkat inti. Lakukan hal-hal berikut:

   1. Tambahkan daftar platform (`componentPlatforms`) pada fungsi Lambda di `lambda-function-component.json`.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
          
          ]
        }
      }
      ```

   1. Tambahkan setiap platform yang didukung ke daftar. Setiap platform memiliki `name` yang ramah untuk mengidentifikasinya dan peta atribut. Contoh berikut menetapkan bahwa fungsi ini mendukung perangkat x86 yang menjalankan Linux.

      ```
      {
        "name": "Linux x86",
        "attributes": {
          "os": "linux",
          "architecture": "x86"
        }
      }
      ```

      `lambda-function-component.json` Anda mungkin berisi dokumen yang mirip dengan contoh berikut.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ]
        }
      }
      ```

1. (Opsional) Tentukan dependensi komponen untuk fungsi Lambda Anda. Ketika Anda men-deploy komponen fungsi Lambda, deployment tersebut mencakup dependensi ini yang akan dijalankan oleh fungsi Anda.
**penting**  <a name="import-v1-lambda-note"></a>
Untuk mengimpor fungsi Lambda yang Anda buat untuk dijalankan di AWS IoT Greengrass V1, Anda harus menentukan dependensi komponen individual untuk fitur yang digunakan fungsi Anda, seperti rahasia, bayangan lokal, dan pengelola aliran. Tentukan komponen ini sebagai [dependensi keras](component-recipe-reference.md) sehingga komponen fungsi Lambda Anda akan me-restart jika dependensi tersebut mengubah keadaan. Untuk informasi selengkapnya, lihat [Impor fungsi Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

   Lakukan hal-hal berikut:

   1. Tambahkan peta dependensi komponen (`componentDependencies`) pada fungsi Lambda di `lambda-function-component.json`.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            
          }
        }
      }
      ```

   1. Tambahkan dependensi pada setiap komponen pada peta. Tentukan nama komponen sebagai kunci dan tentukan objek dengan parameter berikut:
      + `versionRequirement` – Kendala versi semantik npm-style yang menentukan versi komponen dependensi yang kompatibel. Anda dapat menentukan versi tunggal atau serangkaian versi. Untuk informasi lebih lanjut tentang kendala versi semantik, lihat [kalkulator semver npm](https://semver.npmjs.com/).
      + `dependencyType` – (Opsional) Jenis dependensi. Pilih dari yang berikut ini:
        + `SOFT` – Komponen fungsi Lambda tidak memulai ulang jika dependensi mengubah keadaan.
        + `HARD` – Komponen fungsi Lambda memulai ulang jika dependensi mengubah keadaan.

        Default-nya adalah `HARD`.

      Contoh berikut menetapkan bahwa fungsi Lambda ini tergantung pada versi apa pun dalam versi utama pertama dari [komponen stream manager](stream-manager-component.md). Komponen fungsi Lambda akan me-restart ketika strean manager melakukan restart atau pembaruan.

      ```
      {
        "aws.greengrass.StreamManager": {
          "versionRequirement": "^1.0.0",
          "dependencyType": "HARD"
        }
      }
      ```

      `lambda-function-component.json` Anda mungkin berisi dokumen yang mirip dengan contoh berikut.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          }
        }
      }
      ```

1. (Opsional) Konfigurasikan parameter fungsi Lambda yang akan digunakan untuk menjalankan fungsi. Anda dapat mengonfigurasi pilihan variabel lingkungan, sumber peristiwa pesan, batas waktu, dan pengaturan kontainer seperti ini. Lakukan hal-hal berikut:

   1. Tambahkan objek parameter Lambda (`componentLambdaParameters`) pada fungsi Lambda di `lambda-function-component.json`.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
          
          }
        }
      }
      ```

   1. (Opsional) Tentukan sumber peristiwa di mana fungsi Lambda berlangganan untuk pesan kerja. Anda dapat menentukan sumber acara untuk berlangganan fungsi ini ke publish/subscribe pesan lokal dan pesan AWS IoT Core MQTT. Fungsi Lambda dipanggil saat menerima pesan dari sumber peristiwa.
**catatan**  
Untuk berlangganan fungsi ini ke pesan dari fungsi atau komponen Lambda lainnya, gunakan komponen [router langganan lama saat Anda menerapkan komponen](legacy-subscription-router-component.md) fungsi Lambda ini. Saat Anda men-deploy komponen router langganan warisan, tentukan langganan yang digunakan oleh fungsi Lambda tersebut.

      Lakukan hal-hal berikut:

      1. Tambahkan daftar sumber peristiwa (`eventSources`) pada parameter fungsi Lambda.

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
               
               ]
             }
           }
         }
         ```

      1. Tambahkan setiap sumber peristiwa pada daftar. Setiap sumber peristiwa memiliki parameter berikut:
         + `topic` — Topik untuk berlangganan pesan.
         + `type` — Jenis sumber peristiwa. Pilih dari salah satu pilihan berikut:
           + `PUB_SUB` – Berlangganan ke pesan terbit/berlangganan lokal.

             Jika Anda menggunakan [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 atau yang lebih baru dan [Lambda](lambda-manager-component.md) manager v2.2.5 atau yang lebih baru, Anda dapat menggunakan wildcard topik MQTT (dan) di saat Anda menentukan jenis ini. `+` `#` `topic`
           + `IOT_CORE`— Berlangganan pesan AWS IoT Core MQTT.

             Anda dapat menggunakan wildcard topik MQTT (`+`dan`#`) di `topic` saat Anda menentukan jenis ini.

           Contoh berikut berlangganan AWS IoT Core MQTT pada topik yang cocok dengan filter topik. `hello/world/+`

           ```
           {
             "topic": "hello/world/+",
             "type": "IOT_CORE"
           }
           ```

           `lambda-function-component.json` Anda mungkin terlihat serupa dengan yang berikut ini.

           ```
           {
             "lambdaFunction": {
               "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
               "componentName": "com.example.HelloWorldLambda",
               "componentVersion": "1.0.0",
               "componentPlatforms": [
                 {
                   "name": "Linux x86",
                   "attributes": {
                     "os": "linux",
                     "architecture": "x86"
                   }
                 }
               ],
               "componentDependencies": {
                 "aws.greengrass.StreamManager": {
                   "versionRequirement": "^1.0.0",
                   "dependencyType": "HARD"
                 }
               },
               "componentLambdaParameters": {
                 "eventSources": [
                   {
                     "topic": "hello/world/+",
                     "type": "IOT_CORE"
                   }
                 ]
               }
             }
           }
           ```

   1. (Opsional) Tentukan salah satu parameter berikut di objek parameter fungsi Lambda:
      + `environmentVariables` — Peta variabel lingkungan yang tersedia untuk fungsi Lambda ketika berjalan.
      + `execArgs` — Daftar argumen yang akan diteruskan ke fungsi Lambda ketika berjalan.
      + `inputPayloadEncodingType` — Jenis muatan yang didukung oleh fungsi Lambda. Pilih dari salah satu pilihan berikut:
        +  `json` 
        +  `binary` 

        Default: `json`
      + `pinned` — Apakah fungsi Lambda akan disematkan atau tidak. Nilai default-nya `true`.<a name="lambda-function-lifecycle-type"></a>
        + Fungsi Lambda yang disematkan (atau berumur panjang) dimulai saat AWS IoT Greengrass dimulai dan terus berjalan di wadahnya sendiri.
        + Fungsi Lambda yang tidak disematkan (atau sesuai permintaan) dimulai hanya ketika menerima item pekerjaan dan keluar setelah tidak berjalan selama waktu tidak berjalan maksimum yang ditentukan. Jika fungsi memiliki beberapa item kerja, perangkat lunak AWS IoT Greengrass Core membuat beberapa instance fungsi.

        Gunakan `maxIdleTimeInSeconds` untuk mengatur waktu diam maksimum untuk fungsi Anda.
      + `timeoutInSeconds` — Jumlah maksimum waktu dalam detik yang dapat dijalankan fungsi Lambda sebelum waktu habis. Default-nya adalah 3 detik.
      + `statusTimeoutInSeconds` — Interval dalam detik di mana komponen fungsi Lambda mengirimkan update status ke komponen manajer Lambda. Parameter ini hanya berlaku pada fungsi yang disematkan. Default-nya adalah 60 detik.
      + `maxIdleTimeInSeconds`— Jumlah waktu maksimum dalam hitungan detik fungsi Lambda yang tidak disematkan dapat menganggur sebelum perangkat lunak AWS IoT Greengrass Core menghentikan prosesnya. Bawaannya adalah 60 detik.
      + `maxInstancesCount` — Jumlah maksimum contoh yang dapat dijalankan oleh fungsi Lambda yang tidak disematkan pada saat yang sama. Default-nya adalah 100 instans.
      + `maxQueueSize` — Ukuran maksimum antrean pesan untuk komponen fungsi Lambda. Perangkat lunak AWS IoT Greengrass Core menyimpan pesan dalam antrian FIFO (first-in-first-out) hingga dapat menjalankan fungsi Lambda untuk mengkonsumsi setiap pesan. Default-nya adalah 1.000 pesan.

      `lambda-function-component.json` Anda mungkin berisi dokumen yang mirip dengan contoh berikut.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
            "eventSources": [
              {
                "topic": "hello/world/+",
                "type": "IOT_CORE"
              }
            ],
            "environmentVariables": {
              "LIMIT": "300"
            },
            "execArgs": [
              "-d"
            ],
            "inputPayloadEncodingType": "json",
            "pinned": true,
            "timeoutInSeconds": 120,
            "statusTimeoutInSeconds": 30,
            "maxIdleTimeInSeconds": 30,
            "maxInstancesCount": 50,
            "maxQueueSize": 500
          }
        }
      }
      ```

   1. (Opsional) Konfigurasikan pengaturan kontainer untuk fungsi Lambda. Secara default, fungsi Lambda berjalan di lingkungan runtime yang terisolasi di dalam perangkat lunak Core. AWS IoT Greengrass Anda juga dapat memilih untuk menjalankan fungsi Lambda sebagai proses tanpa isolasi apa pun. Jika Anda menjalankan fungsi Lambda dalam suatu kontainer, Anda akan mengonfigurasi ukuran memori kontainer dan sumber daya sistem apa yang tersedia untuk fungsi Lambda tersebut. Lakukan hal-hal berikut:

      1. Tambahkan objek parameter proses Linux (`linuxProcessParams`) untuk objek parameter Lambda di `lambda-function-component.json`.

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
                 {
                   "topic": "hello/world/+",
                   "type": "IOT_CORE"
                 }
               ],
               "environmentVariables": {
                 "LIMIT": "300"
               },
               "execArgs": [
                 "-d"
               ],
               "inputPayloadEncodingType": "json",
               "pinned": true,
               "timeoutInSeconds": 120,
               "statusTimeoutInSeconds": 30,
               "maxIdleTimeInSeconds": 30,
               "maxInstancesCount": 50,
               "maxQueueSize": 500,
               "linuxProcessParams": {
               
               }
             }
           }
         }
         ```

      1. (Opsional) Tentukan apakah fungsi Lambda akan berjalan dalam suatu kontainer atau tidak. Tambahkan parameter `isolationMode` pada objek parameter proses, dan pilih dari opsi berikut:
         + `GreengrassContainer` - Fungsi Lambda berjalan dalam sebuah kontainer.
         + `NoContainer` — Fungsi Lambda berjalan sebagai proses tanpa isolasi apa pun.

         Nilai default-nya `GreengrassContainer`.

      1. (Opsional) Jika Anda menjalankan fungsi Lambda dalam kontainer, Anda dapat mengonfigurasi jumlah memori dan sumber daya sistem, seperti volume dan perangkat, agar dapat tersedia untuk kontainer. Lakukan hal-hal berikut:

         1. Tambahkan objek parameter kontainer (`containerParams`) pada objek parameter proses Lambda di `lambda-function-component.json`.

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                    
                    }
                  }
                }
              }
            }
            ```

         1. (Opsional) Tambahkan parameter `memorySizeInKB` untuk menentukan ukuran memori kontainer. Default-nya adalah 16.384 KB (16 MB).

         1. (Opsional) Tambahkan parameter `mountROSysfs` untuk menentukan apakah kontainer tersebut dapat membaca informasi dari folder perangkat `/sys` atau tidak. Nilai default-nya `false`.

         1. (Opsional) Konfigurasikan volume lokal yang dapat diakses oleh fungsi Lambda yang terkontainerisasi. Saat Anda menentukan volume, perangkat lunak AWS IoT Greengrass Core memasang file sumber ke tujuan di dalam wadah. Lakukan hal-hal berikut:

            1. Tambahkan daftar volume (`volumes`) pada parameter kontainer.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. Tambahkan setiap volume ke daftar. Setiap volume memiliki parameter berikut:
               + `sourcePath` – Path ke folder sumber pada perangkat inti.
               + `destinationPath` – Path ke folder tujuan dalam kontainer.
               + `permission` – (Opsional) Izin untuk mengakses folder sumber dari kontainer. Pilih dari salah satu pilihan berikut:
                 + `ro` – Fungsi Lambda memiliki akses hanya-baca ke folder sumber.
                 + `rw` – Fungsi Lambda memiliki akses baca-tulis ke folder sumber.

                 Nilai default-nya `ro`.
               + `addGroupOwner` – (Opsional) Apakah akan menambahkan grup sistem yang akan menjalankan fungsi Lambda sebagai pemilik folder sumber atau tidak. Nilai default-nya `false`.

               `lambda-function-component.json` Anda mungkin berisi dokumen yang mirip dengan contoh berikut.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ]
                       }
                     }
                   }
                 }
               }
               ```

         1. (Opsional) Konfigurasikan perangkat sistem lokal yang dapat diakses oleh fungsi Lambda yang terkontainerisasi. Lakukan hal-hal berikut:

            1. Tambahkan daftar volume (`devices`) pada parameter kontainer.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ],
                         "devices": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. Tambahkan setiap perangkat sistem ke daftar. Setiap perangkat sistem memiliki parameter berikut:
               + `path` – Path ke perangkat sistem pada perangkat inti.
               + `permission` – (Opsional) Izin untuk mengakses perangkat sistem dari kontainer. Pilih dari salah satu pilihan berikut:
                 + `ro` – Fungsi Lambda memiliki akses hanya-baca ke perangkat sistem.
                 + `rw` – Fungsi Lambda memiliki akses baca-tulis ke perangkat sistem.

                 Nilai default-nya `ro`.
               + `addGroupOwner` – (Opsional) Apakah akan menambahkan grup sistem yang akan menjalankan fungsi Lambda sebagai pemilik perangkat sistem atau tidak. Nilai default-nya `false`.

            `lambda-function-component.json` Anda mungkin berisi dokumen yang mirip dengan contoh berikut.

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                      "memorySizeInKB": 32768,
                      "mountROSysfs": true,
                      "volumes": [
                        {
                          "sourcePath": "/var/data/src",
                          "destinationPath": "/var/data/dest",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ],
                      "devices": [
                        {
                          "path": "/dev/sda3",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ]
                    }
                  }
                }
              }
            }
            ```

1. (Opsional) Tambahkan tag (`tags`) untuk komponen tersebut. Untuk informasi selengkapnya, lihat [Tandai AWS IoT Greengrass Version 2 sumber daya Anda](tag-resources.md).

## Langkah 2: Buat komponen fungsi Lambda
<a name="create-lambda-component-cli"></a>

1. Jalankan perintah berikut untuk membuat komponen fungsi Lambda dari `lambda-function-component.json`.

   ```
   aws greengrassv2 create-component-version --cli-input-json file://lambda-function-component.json
   ```

   Respons tersebut serupa dengan contoh berikut ini jika permintaannya berhasil.

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Dec 15 20:56:34 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   Salin `arn` dari output untuk memeriksa keadaan komponen pada langkah berikutnya.

1. Ketika Anda membuat komponen, keadaannya adalah `REQUESTED`. Kemudian, AWS IoT Greengrass memvalidasi bahwa komponen tersebut dapat di-deploy. Anda dapat menjalankan perintah berikut untuk melakukan kueri atas status komponen dan memverifikasi bahwa komponen Anda dapat di-deploy. Ganti `arn` dengan ARN dari langkah sebelumnya.

   ```
   aws greengrassv2 describe-component \
     --arn "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0"
   ```

   Jika komponen tervalidasi, respons akan menunjukkan bahwa keadaan komponen adalah `DEPLOYABLE`.

   ```
   {
     "arn": "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-12-15T20:56:34.376000-08:00",
     "publisher": "AWS Lambda",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "name": "Linux x86",
         "attributes": {
           "architecture": "x86",
           "os": "linux"
         }
       }
     ]
   }
   ```

   Setelah komponen adalah `DEPLOYABLE`, Anda dapat men-deploy fungsi Lambda ke perangkat inti Anda. Lihat informasi yang lebih lengkap di [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).