

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

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

# Jalankan fungsi Lambda pada inti AWS IoT Greengrass
<a name="lambda-functions"></a>

AWS IoT Greengrass menyediakan lingkungan runtime Lambda kontainer untuk kode yang ditentukan pengguna yang Anda buat. AWS Lambda Fungsi Lambda yang digunakan untuk menjalankan AWS IoT Greengrass inti di runtime Lambda lokal inti. Fungsi Lambda lokal dapat dipicu oleh peristiwa lokal, pesan dari cloud, dan sumber lain, yang membawa fungsionalitas komputasi lokal ke perangkat klien. Sebagai contoh, Anda dapat menggunakan fungsi Greengrass Lambda untuk memfilter data perangkat sebelum mengirimkan data ke cloud.

Untuk men-deploy fungsi Lambda ke core, Anda menambahkan fungsi ke grup Greengrass (dengan referensi fungsi Lambda yang ada), mengonfigurasi pengaturan khusus grup untuk fungsi, dan kemudian men-deploy grup. [Jika fungsi mengakses AWS layanan, Anda juga harus menambahkan izin yang diperlukan ke peran grup Greengrass.](group-role.md)

Anda dapat mengonfigurasi parameter yang menentukan bagaimana fungsi Lambda berjalan, termasuk izin, isolasi, batas memori, dan banyak lagi. Untuk informasi selengkapnya, lihat [Mengontrol eksekusi fungsi Greengrass Lambda dengan menggunakan konfigurasi grup khusus](lambda-group-config.md).

**catatan**  
Pengaturan ini juga memungkinkan untuk berjalan AWS IoT Greengrass di wadah Docker. Untuk informasi selengkapnya, lihat [Berjalan AWS IoT Greengrass di wadah Docker](run-gg-in-docker-container.md).

Tabel berikut mencantumkan [AWS Lambda runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) yang didukung dan versi perangkat lunak AWS IoT Greengrass Core yang dapat dijalankan.


****  

| Bahasa atau platform | Versi GGC | 
| --- | --- | 
| Python 3.8 | 1.11 | 
| Python 3.7 | 1.9 atau yang lebih baru | 
| Python 2.7 \$1 | 1.0 atau yang lebih baru | 
| Java 8 | 1.1 atau yang lebih baru | 
| Node.js 12.x \$1 | 1.10 atau yang lebih baru | 
| Node.js 8.10 \$1 | 1.9 atau yang lebih baru | 
| Node.js 6.10 \$1 | 1.1 atau yang lebih baru | 
| C, C \$1\$1 | 1.6 atau yang lebih baru | 

\$1 Anda dapat menjalankan fungsi Lambda yang menggunakan runtime ini pada versi yang didukung AWS IoT Greengrass, tetapi Anda tidak dapat membuatnya. AWS Lambda Jika runtime pada perangkat Anda berbeda dari runtime AWS Lambda yang ditentukan untuk fungsi tersebut, Anda dapat memilih runtime sendiri dengan menggunakan in. `FunctionRuntimeOverride` `FunctionDefintionVersion` Untuk informasi selengkapnya, lihat [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html). Untuk informasi selengkapnya tentang runtime yang didukung, lihat [Kebijakan dukungan Runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) di Panduan *AWS Lambda Pengembang*.

## SDKs untuk fungsi Greengrass Lambda
<a name="lambda-sdks"></a>

AWS menyediakan tiga SDKs yang dapat digunakan oleh fungsi Greengrass Lambda yang berjalan pada inti. AWS IoT Greengrass Ini SDKs terkandung dalam paket yang berbeda, sehingga fungsi dapat menggunakannya secara bersamaan. Untuk menggunakan SDK dalam fungsi Greengrass Lambda, memasukkannya ke dalam paket deployment fungsi Lambda yang Anda upload ke AWS Lambda.

**AWS IoT Greengrass SDK inti**  <a name="lambda-sdks-core"></a>
Mengaktifkan fungsi Lambda lokal untuk berinteraksi dengan core untuk:  <a name="gg-core-sdk-functionality"></a>
+ Tukar pesan MQTT dengan. AWS IoT Core
+ Tukar pesan MQTT dengan konektor, perangkat klien, dan fungsi Lambda lainnya di grup Greengrass.
+ Berinteraksi dengan layanan bayangan lokal.
+ Meminta fungsi Lambda lokal lainnya.
+ Akses [Sumber daya rahasia](secrets.md).
+ Berinteraksi dengan [Pengelola aliran](stream-manager.md).
AWS IoT Greengrass menyediakan AWS IoT Greengrass Core SDK dalam bahasa dan platform berikut di GitHub.  <a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass Core SDK for Java](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass Core SDK untuk Node.js](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass Core SDK untuk Python](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass Core SDK untuk C](https://github.com/aws/aws-greengrass-core-sdk-c/)
Untuk menyertakan dependensi AWS IoT Greengrass Core SDK dalam paket penerapan fungsi Lambda:  

1. Unduh bahasa atau platform paket AWS IoT Greengrass Core SDK yang cocok dengan runtime fungsi Lambda Anda.

1. Unzip paket yang diunduh untuk mendapatkan SDK. SDK adalah `greengrasssdk` folder.

1. Sertakan `greengrasssdk` dalam paket deployment fungsi Lambda yang berisi kode fungsi Anda. Ini adalah paket yang Anda unggah AWS Lambda saat Anda membuat fungsi Lambda.
   
 **StreamManagerClient**  
Hanya AWS IoT Greengrass Core berikut yang SDKs dapat digunakan untuk operasi [pengelola aliran](stream-manager.md):  <a name="streammanagerclient-sdk-versions"></a>
+ SDK Java (v1.4.0 atau yang lebih baru)
+ Python SDK (v1.5.0 atau yang lebih baru)
+ Node.js SDK (v1.6.0 atau yang lebih baru)
Untuk menggunakan AWS IoT Greengrass Core SDK untuk Python untuk berinteraksi dengan stream manager, Anda harus menginstal Python 3.7 atau yang lebih baru. Anda juga harus mengmasang dependensi untuk disertakan dalam paket deployment fungsi Python Lambda Anda:  <a name="python-sdk-dependencies-stream-manager"></a>

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

1. Instal dependensi SDK. Misalnya, jalankan perintah berikut `pip` untuk memasangnya di direktori ketika ini:

   ```
   pip install --target . -r requirements.txt
   ```
   
**Instal AWS IoT Greengrass Core SDK untuk Python pada perangkat inti**  
Jika Anda menjalankan fungsi Lambda Python, Anda juga dapat menggunakan [https://pypi.org/project/pip/](https://pypi.org/project/pip/)untuk menginstal Core AWS IoT Greengrass SDK untuk Python pada perangkat inti. Kemudian Anda dapat men-deploy fungsi Anda tanpa memasukkan SDK dalam paket deployment fungsi Lambda. Untuk informasi lebih lanjut, lihat [greengrasssdk](https://pypi.org/project/greengrasssdk/).  
Dukungan ini ditujukan untuk core dengan pengukuran terbatas. Kami merekomendasikan Anda menyertakan SDK dalam paket deployment fungsi Lambda Anda bila memungkinkan.  
 

**AWS IoT Greengrass SDK Machine Learning**  <a name="lambda-sdks-ml"></a>
Mengaktifkan fungsi Lambda lokal untuk mengonsumsi model machine learning (ML) yang di-deploy ke Greengrass core sebagai sumber daya ML. Fungsi Lambda dapat menggunakan SDK untuk memanggil dan berinteraksi dengan layanan kesimpulan lokal yang di-deploy ke core sebagai konektor. fungsi Lambda dan konektor ML juga dapat menggunakan SDK untuk mengirim data ke konektor ML Feedback untuk mengunggah dan menerbitkan. Untuk informasi lebih lanjut, termasuk contoh kode yang menggunakan SDK, lihat [Konektor Klasifikasi Citra ML](image-classification-connector.md), [konektor Deteksi Objek ML](obj-detection-connector.md), dan [Konektor Umpan balik ML](ml-feedback-connector.md).  
Tabel berikut mencantumkan bahasa atau platform yang didukung untuk versi SDK dan versi perangkat lunak AWS IoT Greengrass Core yang dapat dijalankan.    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/greengrass/v1/developerguide/lambda-functions.html)
Untuk informasi unduhan, lihat [AWS IoT Greengrass Perangkat lunak SDK SDK](what-is-gg.md#gg-ml-sdk-download).

**AWS SDKs**  <a name="lambda-sdks-aws"></a>
Mengaktifkan fungsi Lambda lokal untuk melakukan panggilan langsung ke AWS layanan, seperti Amazon S3, AWS IoT DynamoDB, dan. AWS IoT Greengrass Untuk menggunakan sebuah perangkat AWS SDK dalam fungsi Greengrass Lambda, Anda harus memasukkannya dalam paket deployment Anda. Saat Anda menggunakan AWS SDK dalam paket yang sama dengan AWS IoT Greengrass Core SDK, pastikan fungsi Lambda Anda menggunakan ruang nama yang benar. Fungsi Greengrass Lambda tidak dapat berkomunikasi dengan layanan cloud ketika core-nya offline.  
Unduh AWS SDKs dari [Pusat Sumber Daya Memulai](https://aws.amazon.com/getting-started/tools-sdks/).

Untuk informasi lebih lanjut tentang cara membuat paket deployment, lihat [Buat dan paketkan fungsi Lambda](create-lambda.md) dalam tutorial Memulai atau [Membuat paket deployment](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html) dalam *AWS Lambda Panduan Developer*.

### Memigrasi fungsi Lambda berbasis cloud
<a name="lambda-migrate-sdks"></a>

 AWS IoT Greengrass Core SDK mengikuti model pemrograman AWS SDK, yang membuatnya mudah untuk mem-port fungsi Lambda yang dikembangkan untuk cloud ke fungsi Lambda yang berjalan pada inti. AWS IoT Greengrass 

Misalnya, fungsi Lambda Python berikut menggunakan AWS SDK untuk Python (Boto3) untuk mempublikasikan pesan ke topik `some/topic` di cloud:

```
import boto3

iot_client = boto3.client("iot-data")
response = iot_client.publish(
    topic="some/topic", qos=0, payload="Some payload".encode()
)
```

Untuk mem-port fungsi untuk AWS IoT Greengrass inti, dalam `import` pernyataan dan `client` inisialisasi, ubah nama `boto3` modul menjadi`greengrasssdk`, seperti yang ditunjukkan pada contoh berikut:

```
import greengrasssdk

iot_client = greengrasssdk.client("iot-data")
iot_client.publish(topic="some/topic", qos=0, payload="Some payload".encode())
```

**catatan**  
 AWS IoT Greengrass Core SDK mendukung pengiriman pesan MQTT dengan QoS = 0 saja. Untuk informasi selengkapnya, lihat [Kualitas layanan pesan](gg-core.md#message-quality-of-service).

Kesamaan antara model pemrograman juga memungkinkan Anda untuk mengembangkan fungsi Lambda Anda di cloud dan kemudian memigrasikannya AWS IoT Greengrass ke dengan sedikit usaha. [Lambda executable](#lambda-executables) tidak berjalan di cloud, jadi Anda tidak dapat menggunakan AWS SDK untuk mengembangkannya di cloud sebelum penerapan.

## Fungsi Referensi Lambda dengan alias atau versi
<a name="lambda-versions-aliases"></a>

Grup Greengrass dapat referensi 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. Alias menyelesaikan ke nomor versi selama deployment grup. Ketika Anda menggunakan alias, versi yang diselesaikan telah diperbarui ke versi di mana alias menunjuk ke ketika deployment.

AWS IoT Greengrass **tidak mendukung alias Lambda untuk versi \$1LATEST.** **\$1TERBARU** versi tidak terikat untuk tetap, versi fungsi diterbitkan dan dapat diubah setiap ketika, yang bertentangan dengan prinsip AWS IoT Greengrass versi tetap.

Sebuah praktek umum untuk menjaga fungsi Greengrass Lambda Anda diperbarui dengan perubahan kode adalah dengan menggunakan alias bernama **PRODUCTION** dalam grup Greengrass dan langganan Anda. Ketika Anda mempromosikan versi baru dari fungsi Lambda Anda ke dalam produksi, arahkan alias ke versi stabil terbaru dan kemudian redeploy grupnya. Anda juga dapat menggunakan metode ini untuk kembali ke versi sebelumnya.

# Mengontrol eksekusi fungsi Greengrass Lambda dengan menggunakan konfigurasi grup khusus
<a name="lambda-group-config"></a>

AWS IoT Greengrass menyediakan pengelolaan fungsi Lambda Greengrass berbasis cloud. Meskipun kode dan dependensi fungsi Lambda dikelola menggunakan AWS Lambda, Anda dapat mengonfigurasi bagaimana fungsi Lambda berperilaku ketika dijalankan dalam grup Greengrass.

## Pengaturan konfigurasi grup khusus
<a name="lambda-group-config-properties"></a>

AWS IoT Greengrass menyediakan pengaturan konfigurasi khusus grup berikut untuk fungsi Greengrass Lambda.

**Pengguna sistem dan grup**  <a name="lambda-access-identity"></a>
Identitas akses yang digunakan untuk menjalankan fungsi Lambda. Secara default, fungsi Lambda dijalankan sebagai [identitas akses default](#lambda-access-identity-groupsettings). Biasanya, ini adalah standar akun sistem AWS IoT Greengrass (ggc\$1user dan ggc\$1group). Anda dapat mengubah pengaturan dan memilih ID pengguna dan ID grup yang memiliki izin yang diperlukan untuk menjalankan fungsi Lambda. Anda dapat mengganti kedua UID dan GID atau hanya satu jika Anda membiarkan bidang lain kosong. Pengaturan ini memberi Anda kontrol yang lebih terperinci atas akses ke sumber daya perangkat. Kami menyarankan Anda mengonfigurasi perangkat keras Greengrass Anda dengan batas sumber daya yang sesuai, izin file, dan kuota disk untuk pengguna dan grup yang izinnya digunakan untuk menjalankan fungsi Lambda.  
Fitur ini tersedia untuk AWS IoT Greengrass Core v1.7 dan yang lebih baru.  
Kami merekomendasikan Anda menghindari menjalankan fungsi Lambda sebagai root kecuali benar-benar diperlukan. Menjalankan sebagai root meningkatkan risiko berikut:  
+ Risiko perubahan yang tidak diinginkan, seperti secara tidak sengaja menghapus file kritis.
+ Risiko terhadap data dan perangkat Anda dari individu jahat.
+ Risiko kontainer lolos ketika kontainer Docker berjalan dengan `--net=host` dan `UID=EUID=0`.
Jika Anda perlu menjalankan sebagai root, Anda harus memperbarui AWS IoT Greengrass konfigurasi untuk mengaktifkannya. Untuk informasi selengkapnya, lihat [Menjalankan fungsi Lambda sebagai root](#lambda-running-as-root).  
**ID pengguna sistem (nomor)**  
ID pengguna untuk pengguna berizin yang diperlukan untuk menjalankan fungsi Lambda. Pengaturan ini hanya tersedia jika Anda memilih untuk menjalankan sebagai **ID pengguna/ID grup lain**. Anda dapat menggunakan **getent passwd** perintah pada perangkat AWS IoT Greengrass inti Anda untuk mencari ID pengguna yang ingin Anda gunakan untuk menjalankan fungsi Lambda.  
Jika Anda menggunakan UID yang sama untuk menjalankan proses dan fungsi Lambda pada perangkat core Greengrass, peran grup Greengrass Anda dapat memberikan proses kredensial sementara. Proses dapat menggunakan kredensial sementara di Greengrass core deployment.  
**ID grup sistem (nomor)**  
ID grup untuk grup berizin yang diperlukan untuk menjalankan fungsi Lambda. Pengaturan ini hanya tersedia jika Anda memilih untuk menjalankan sebagai ** ID/group ID pengguna lain**. Anda dapat menggunakan **getent group** perintah pada perangkat AWS IoT Greengrass inti Anda untuk mencari ID grup yang ingin Anda gunakan untuk menjalankan fungsi Lambda.

**Kontainerisasi fungsi Lambda**  <a name="lambda-function-containerization"></a>
Pilih apakah fungsi Lambda berjalan dengan kontainerisasi default untuk grup, atau menentukan kontainerisasi yang harus selalu digunakan untuk fungsi Lambda ini.  
Mode kontainerisasi dari sebuah fungsi Lambda menentukan tingkat isolasi.  
+ Fungsi Lambda dalam kontainer dijalankan dalam mode **kontainer Greengrass** ini. Fungsi Lambda berjalan di lingkungan runtime terisolasi (atau namespace) di dalam container. AWS IoT Greengrass 
+ Fungsi Lambda tanpa kontainer berjalan di mode **Tanpa kontainer** ini. Fungsi Lambda berjalan sebagai proses Linux biasa tanpa isolasi apapun.
Fitur ini tersedia untuk AWS IoT Greengrass Core v1.7 dan yang lebih baru.  
Kami menyarankan Anda menjalankan fungsi Lambda dalam kontainer Greengrass kecuali kasus penggunaan Anda mengharuskannya untuk menjalankan tanpa kontainerisasi. Ketika fungsi Lambda Anda berjalan dalam kontainer Greengrass, Anda dapat menggunakan lampiran sumber daya lokal dan perangkat dan mendapatkan manfaat dari isolasi dan peningkatan keamanan. Sebelum Anda mengubah kontainerisasi, lihat [Pertimbangan ketika memilih fungsi Lambda kontainerisasi](#lambda-containerization-considerations).  
Untuk menjalankan tanpa mengaktifkan namespace kernel perangkat dan cgroup, semua fungsi Lambda Anda harus berjalan tanpa kontainerisasi. Anda dapat mudah melakukannya dengan menetapkan kontainerisasi default untuk grup. Untuk informasi, lihat [Pengaturan kontainerisasi default untuk fungsi Lambda dalam grup](#lambda-containerization-groupsettings).

**Batas memori**  
Alokasi memori untuk fungsi. Ukuran default-nya adalah 16 MB.  
Pengaturan batas memori menjadi tidak tersedia ketika Anda mengubah fungsi Lambda untuk menjalankan tanpa kontainerisasi. Fungsi Lambda yang berjalan tanpa kontainerisasi tidak memiliki batas memori. Pengaturan batas memori dibuang ketika Anda mengubah fungsi Lambda atau grup default kontainerisasi pengaturan untuk menjalankan tanpa kontainerisasi.

**Batas waktu**  
Jumlah waktu sebelum fungsi atau permintaan dihentikan. Default-nya adalah 3 detik.

**Disematkan**  
Siklus hidup fungsi Lambda dapat *Sesuai permintaan* atau *berumur panjang*. Default-nya sesuai permintaan.  
Fungsi Lambda sesuai permintaan dimulai dalam kontainer baru atau digunakan kembali ketika dipanggil. Permintaan untuk fungsi mungkin diproses oleh wadah yang tersedia. Fungsi Lambda yang berumur panjang—atau *disematkan* —dimulai secara otomatis setelah AWS IoT Greengrass dimulai dan terus berjalan di wadahnya sendiri (atau kotak pasir). Semua permintaan untuk fungsi diproses oleh kontainer yang sama. Untuk informasi selengkapnya, lihat [Konfigurasi siklus hidup untuk fungsi Greengrass Lambda](lambda-functions.md#lambda-lifecycle).

**Baca akses ke direktori/sys**  
Apakah fungsi dapat mengakses host dari folder /sys. Gunakan ini ketika fungsi harus membaca informasi perangkat dari /sys. Default-nya adalah SALAH.  
Pengaturan ini tidak tersedia ketika Anda menjalankan fungsi Lambda tanpa kontainerisasi. Nilai pengaturan ini dibuang ketika Anda mengubah fungsi Lambda untuk menjalankan tanpa kontainerisasi.

**Jenis pengkodean**  
Jenis encoding yang diharapkan dari muatan input untuk fungsi, baik JSON atau biner. Default-nya adalah JSON.  
Support untuk tipe pengkodean biner tersedia mulai dari AWS IoT Greengrass Core Software v1.5.0 dan AWS IoT Greengrass Core SDK v1.1.0. Menerima data input biner dapat berguna untuk fungsi yang berinteraksi dengan data perangkat, karena keterbatasan kemampuan perangkat keras dari perangkat sering membuat sulit atau tidak mungkin bagi mereka untuk membangun tipe data JSON.  
[Lambda yang dapat dieksekusi](lambda-functions.md#lambda-executables) mendukung jenis pengkodean biner saja, bukan JSON.

**Argumen proses**  
Argumen baris perintah diteruskan ke fungsi Lambda saat dijalankan.

**Variabel lingkungan**  
Pasangan kunci-nilai yang secara dinamis dapat melewati pengaturan untuk fungsi kode dan perpustakaan. Variabel lingkungan lokal bekerja dengan cara yang sama seperti [AWS Lambda variabel lingkungan fungsi](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html), namun tersedia di lingkungan core.

**Kebijakan akses sumber daya**  
Daftar hingga 10 [Sumber Daya Lokal](access-local-resources.md), [Sumber daya rahasia](secrets.md), dan [sumber daya machine learning](ml-inference.md) bahwa fungsi Lambda diizinkan untuk mengakses, dan yang sesuai `read-only` atau izin `read-write` ini. Di konsol, sumber daya *afiliasi* ini tercantum di halaman konfigurasi grup di tab **Sumber Daya**.  
[Mode kontainerisasi](#lambda-function-containerization) mempengaruhi bagaimana fungsi Lambda dapat mengakses perangkat lokal dan sumber daya volume dan sumber daya machine learning.  
+ Fungsi Lambda nonkontainerisasi harus mengakses sumber daya perangkat dan volume lokal secara langsung melalui sistem file pada perangkat core.
+ Untuk memungkinkan fungsi Lambda nonkontainerisasi untuk mengakses sumber daya pembelajaran mesin dalam grup Greengrass, Anda harus mengatur pemilik sumber daya dan properti izin mengakses pada sumber daya machine learning. Untuk informasi selengkapnya, lihat [Mengakses sumber daya machine learning dari fungsi Lambda](access-ml-resources.md).

*Untuk informasi tentang penggunaan AWS IoT Greengrass API untuk menyetel pengaturan konfigurasi khusus grup untuk fungsi Lambda yang ditentukan pengguna, [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)lihat di Referensi *API atau di Referensi AWS IoT Greengrass Version 1 [create-function-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)Perintah*.AWS CLI * Untuk men-deploy fungsi Lambda ke Greengrass core, membuat ve rsi definisi fungsi yang berisi fungsi Anda, membuat versi grup yang mereferensi versi definisi fungsi dan komponen kelompok lainnya, dan kemudian [deploy grup](deployments.md).

## Menjalankan fungsi Lambda sebagai root
<a name="lambda-running-as-root"></a>

Fitur ini tersedia untuk AWS IoT Greengrass Core v1.7 dan yang lebih baru.

Sebelum Anda dapat menjalankan satu atau lebih fungsi Lambda sebagai root, Anda harus terlebih dahulu memperbarui AWS IoT Greengrass konfigurasi untuk mengaktifkan dukungan. Support untuk menjalankan fungsi Lambda sebagai root secara default tidak aktif. Penerapan gagal jika Anda mencoba menerapkan fungsi Lambda dan menjalankannya sebagai root (UID dan GID 0) dan Anda belum memperbarui konfigurasi. AWS IoT Greengrass Kesalahan seperti berikut ini muncul di log runtime (*greengrass\$1root*/ggc/var/log/system/runtime.log):

```
lambda(s)
[list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
```

**penting**  
Kami merekomendasikan Anda menghindari menjalankan fungsi Lambda sebagai root kecuali benar-benar diperlukan. Menjalankan sebagai root meningkatkan risiko berikut:  
Risiko perubahan yang tidak diinginkan, seperti secara tidak sengaja menghapus file kritis.
Risiko terhadap data dan perangkat Anda dari individu jahat.
Risiko kontainer lolos ketika kontainer Docker berjalan dengan `--net=host` dan `UID=EUID=0`.

**Untuk mengizinkan fungsi Lambda dijalankan sebagai root**

1. Di AWS IoT Greengrass perangkat Anda, navigasikan ke folder *greengrass-root* /config.
**catatan**  
Secara default, *greengrass-root* adalah direktori/greengrass.

1. Edit file config.json untuk menambahkan `"allowFunctionsToRunAsRoot" : "yes"` ke bidang `runtime` ini. Contoh:

   ```
   {
     "coreThing" : {
       ...
     },
     "runtime" : {
       ...
       "allowFunctionsToRunAsRoot" : "yes"
     },
     ...
   }
   ```

1. Gunakan perintah berikut untuk memulai ulang AWS IoT Greengrass:

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

   Sekarang Anda dapat melakukan pengaturan ID pengguna dan grup ID (UID/GID) dari fungsi Lambda ke 0 untuk menjalankan fungsi Lambda tersebut sebagai root.

Anda dapat mengubah nilai `"allowFunctionsToRunAsRoot"` ke `"no"` dan memulai ulang AWS IoT Greengrass jika Anda ingin melarang fungsi Lambda berjalan sebagai root.

## Pertimbangan ketika memilih fungsi Lambda kontainerisasi
<a name="lambda-containerization-considerations"></a>

Fitur ini tersedia untuk AWS IoT Greengrass Core v1.7 dan yang lebih baru.

Secara default, fungsi Lambda berjalan di dalam wadah. AWS IoT Greengrass Kontainer yang menyediakan isolasi antara fungsi Anda dan host, yang menawarkan keamanan lebih untuk kedua host dan fungsi dalam kontainer.

Kami menyarankan Anda menjalankan fungsi Lambda dalam kontainer Greengrass kecuali kasus penggunaan Anda mengharuskannya untuk menjalankan tanpa kontainerisasi. Dengan menjalankan fungsi Lambda Anda dalam kontainer Greengrass, Anda memiliki lebih banyak kontrol untuk membatasi akses ke sumber daya.

Berikut adalah beberapa contoh kasus penggunaan untuk menjalankan tanpa kontainerisasi:
+ Anda ingin menjalankan AWS IoT Greengrass pada perangkat yang tidak mendukung mode container (misalnya, karena Anda menggunakan distribusi Linux khusus atau memiliki versi kernel yang terlalu tua).
+ 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 deployment atau jalur yang dapat berubah setelah deployment, seperti perangkat pluggable.
+ Anda memiliki aplikasi warisan yang ditulis sebagai proses dan Anda mengalami masalah ketika menjalankannya sebagai fungsi Lambda terkontainerisasi.


**Perbedaan kontainerisasi**  

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

**catatan**  
Pengaturan kontainerisasi default untuk grup Greengrass tidak berlaku untuk [konektor](connectors.md).

Mengubah kontainerisasi untuk fungsi Lambda dapat menyebabkan masalah ketika Anda men-deploy-nya. Jika Anda telah menetapkan sumber daya lokal untuk fungsi Lambda Anda yang tidak lagi tersedia dengan pengaturan kontainerisasi baru Anda, deployment bisa gagal.
+ Ketika Anda mengubah fungsi Lambda dari berjalan dalam kontainer Greengrass menjadi berjalan tanpa kontainerisasi, batas memori untuk fungsi dibuang. Anda harus mengakses sistem file secara langsung daripada menggunakan sumber daya lokal terlampir. Anda harus menghapus sumber daya terlampir sebelum Anda men-deploy.
+ 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 default 16 MB. Anda dapat mengonfigurasi pengaturan tersebut untuk setiap fungsi Lambda sebelum Anda men-deploy.<a name="change-containerization-lambda"></a>

**Untuk mengubah pengaturan kontainerisasi pada fungsi Lambda**

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

1. <a name="lambda-choose-group"></a>Pilih grup yang berisi fungsi Lambda yang pengaturannya ingin Anda ubah.

1. <a name="lambda-choose-lambdas"></a>Pilih tab **Fungsi Lambda**.

1. <a name="lambda-edit-lambda"></a>Di fungsi Lambda yang ingin Anda ubah, pilih elipsis (**...**) dan kemudian pilih **Edit konfigurasi**.

1. Mengubah pengaturan kontainerisasi. Jika Anda mengonfigurasi fungsi Lambda untuk menjalankan dalam kontainer Greengrass, Anda juga harus mengatur **Batas memori** dan **akses Baca ke direktori /sys**.

1. <a name="lambda-save-changes"></a>Pilih **Simpan** dan kemudian **Konfirmasi** untuk menyimpan perubahan pada fungsi Lambda Anda.

Perubahan berlaku ketika grup di-deploy.

Anda juga dapat menggunakan [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)dan [CreateFunctionDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinitionversion-post.html)di *Referensi AWS IoT Greengrass API*. Jika Anda mengubah pengaturan kontainerisasi, pastikan untuk memperbarui parameter lainnya juga. Sebagai contoh, jika Anda mengubah dari menjalankan fungsi Lambda dalam kontainer Greengrass menjadi berjalan tanpa kontainerisasi, pastikan untuk menghapus parameter `MemorySize` ini.

### Tentukan mode isolasi yang didukung oleh perangkat Greengrass Anda
<a name="dependency-checker-tests-isolation"></a>

Anda dapat menggunakan pemeriksa AWS IoT Greengrass ketergantungan untuk menentukan mode isolasi (wadah Greengrass container/no ) yang didukung oleh perangkat Greengrass Anda.

**Untuk menjalankan pemeriksa AWS IoT Greengrass ketergantungan**

1. [Unduh dan jalankan pemeriksa AWS IoT Greengrass ketergantungan dari repositori. GitHub](https://github.com/aws-samples/aws-greengrass-samples)

   ```
   wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip
   unzip greengrass-dependency-checker-GGCv1.11.x.zip
   cd greengrass-dependency-checker-GGCv1.11.x
   sudo modprobe configs
   sudo ./check_ggc_dependencies | more
   ```

1. Di mana `more` muncul, tekan tombol kunci Spacebar untuk menampilkan halaman teks lainnya.

Untuk informasi tentang perintah **modprobe** ini, jalankan **man modprobe** di terminal. 

## Mengatur identitas akses default untuk fungsi Lambda dalam grup
<a name="lambda-access-identity-groupsettings"></a>

Fitur ini tersedia untuk AWS IoT Greengrass Core v1.8 dan yang lebih baru.

Untuk kontrol lebih lanjut atas akses ke sumber daya perangkat, Anda dapat mengonfigurasi identitas akses default yang digunakan untuk menjalankan fungsi Lambda dalam grup. Pengaturan ini menentukan izin default yang diberikan ke fungsi Lambda Anda ketika mereka berjalan pada perangkat core. Untuk mengesampingkan pengaturan untuk fungsi individu dalam grup, Anda dapat menggunakan fungsi **Jalankan sebagai** properti. Untuk informasi lebih lanjut, lihat [Jalankan sebagai](#lambda-access-identity).

Pengaturan tingkat grup ini juga digunakan untuk menjalankan perangkat lunak AWS IoT Greengrass Core yang mendasarinya. Ini terdiri dari fungsi sistem Lambda yang mengelola operasi, seperti perutean pesan, sinkronisasi bayangan lokal, dan deteksi alamat IP otomatis.

Identitas akses default dapat dikonfigurasi untuk dijalankan sebagai akun AWS IoT Greengrass sistem standar (ggc\$1user dan ggc\$1group) atau menggunakan izin pengguna atau grup lain. Kami merekomendasikan Anda mengonfigurasi perangkat keras Greengrass Anda dengan batas sumber daya, izin file, dan kuota disk yang sesuai untuk setiap pengguna dan grup yang izinnya digunakan untuk menjalankan fungsi Lambda yang ditentukan pengguna atau sistem.

**Untuk mengubah identitas akses default untuk AWS IoT Greengrass grup Anda**

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

1. <a name="group-choose-group"></a>Pilih grup yang pengaturannya ingin Anda ubah.

1. **Pilih tab **fungsi Lambda** dan, di bawah bagian **lingkungan runtime fungsi Lambda Default**, pilih Edit.**

1. Di halaman **Edit lingkungan runtime fungsi Lambda default**, di bawah **Pengguna dan grup sistem default, pilih ID pengguna/ID grup** **lain**.

   Saat Anda memilih opsi ini, kolom **ID pengguna sistem (nomor)** dan **ID grup sistem (angka)** ditampilkan.

1. Masukkan ID pengguna, ID grup, atau keduanya. Jika Anda meninggalkan bidang kosong, akun sistem Greengrass masing-masing (ggc\$1user atau ggc\$1group) digunakan.
   + Untuk **ID pengguna Sistem (nomor)**, masukkan ID pengguna untuk pengguna yang memiliki izin yang ingin Anda gunakan secara default untuk menjalankan fungsi Lambda dalam grup. Anda dapat menggunakan perintah **getent passwd** pada perangkat AWS IoT Greengrass Anda untuk mencari ID pengguna.
   + Untuk **ID grup sistem (angka)**, masukkan ID grup untuk grup yang memiliki izin yang ingin Anda gunakan secara default untuk menjalankan fungsi Lambda dalam grup. Anda dapat menggunakan **getent group** perintah pada perangkat AWS IoT Greengrass Anda untuk mencari ID grup.
**penting**  
Berjalan sebagai pengguna root meningkatkan risiko terhadap data dan perangkat Anda. Jangan jalankan sebagai root (UID/GID = 0) kecuali kasus bisnis Anda memerlukannya. Untuk informasi selengkapnya, lihat [Menjalankan fungsi Lambda sebagai root](#lambda-running-as-root).

Perubahan berlaku ketika grup di-deploy.

## Pengaturan kontainerisasi default untuk fungsi Lambda dalam grup
<a name="lambda-containerization-groupsettings"></a>

Fitur ini tersedia untuk AWS IoT Greengrass Core v1.7 dan yang lebih baru.

Pengaturan kontainerisasi untuk grup Greengrass menentukan kontainerisasi default untuk fungsi Lambda dalam grup.
+ Dalam mode container **Greengrass**, fungsi Lambda berjalan di lingkungan runtime yang terisolasi di dalam container secara default. AWS IoT Greengrass 
+ Dalam mode **Tanpa kontainer** ini, fungsi Lambda dijalankan sebagai proses Linux reguler secara default.

Anda dapat mengubah pengaturan grup untuk menentukan kontainerisasi default untuk fungsi Lambda dalam grup. Anda dapat mengganti pengaturan ini untuk satu atau lebih fungsi Lambda dalam grup jika Anda ingin fungsi Lambda untuk menjalankan dengan kontainerisasi berbeda dari default grup. Sebelum Anda mengubah pengaturan kontainerisasi, lihat [Pertimbangan ketika memilih fungsi Lambda kontainerisasi](#lambda-containerization-considerations).

**penting**  
Jika Anda ingin mengubah kontainerisasi default untuk grup, tetapi memiliki satu atau lebih fungsi yang menggunakan kontainerisasi yang berbeda, mengubah pengaturan untuk fungsi Lambda sebelum Anda mengubah pengaturan grup. Jika Anda mengubah pengaturan kontainerisasi grup pertama, nilai untuk **Batas memori** dan **Baca akses ke direktori /sys** pengaturan akan dibuang.

**Untuk mengubah pengaturan kontainerisasi untuk grup Anda AWS IoT Greengrass**

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

1. <a name="group-choose-group"></a>Pilih grup yang pengaturannya ingin Anda ubah.

1. Pilih tab **Fungsi Lambda**.

1. **Di bawah **lingkungan runtime fungsi Lambda default**, pilih Edit.**

1. Di **lingkungan runtime fungsi Lambda default Edit**, halaman, di bawah kontainerisasi **fungsi Lambda Default, ubah pengaturan containerization**.

1. Pilih **Simpan**.

Perubahan berlaku ketika grup di-deploy.

## Arus komunikasi untuk fungsi Greengrass Lambda
<a name="lambda-communication"></a>

Fungsi Greengrass Lambda mendukung beberapa metode komunikasi dengan anggota grup lainnya, layanan lokal, dan layanan cloud AWS IoT Greengrass (termasuk layanan). AWS 

### Komunikasi menggunakan pesan MQTT
<a name="lambda-messages"></a>

fungsi Lambda dapat mengirim dan menerima pesan MQTT menggunakan pola mempublikasikan-berlangganan yang dikendalikan oleh langganan.

Aliran komunikasi ini memungkinkan fungsi Lambda untuk bertukar pesan dengan entitas berikut:
+ Perangkat klien dalam grup.
+ Konektor dalam grup.
+ Fungsi Lambda lainnya dalam grup.
+ AWS IoT.
+ Layanan Bayangan Perangkat Lokal.

Langganan menentukan sumber pesan, target pesan, dan topik (atau subjek) yang digunakan untuk mengarahkan pesan dari sumber ke target. Pesan yang dipublikasikan ke fungsi Lambda dilewatkan ke handler terdaftar fungsi ini. Langganan memungkinkan lebih banyak keamanan dan memberikan interaksi yang dapat diprediksi. Untuk informasi selengkapnya, lihat [Langganan yang dikelola di dalam alur kerja pesan MQTT](gg-sec.md#gg-msg-workflow).

**catatan**  
Ketika inti sedang offline, fungsi Greengrass Lambda dapat bertukar pesan dengan perangkat klien, konektor, fungsi lain, dan bayangan lokal, tetapi pesan ke antri. AWS IoT Untuk informasi selengkapnya, lihat [Antrean pesan MQTT untuk target cloud](gg-core.md#mqtt-message-queue).

### Arus komunikasi lainnya
<a name="lambda-other-communication"></a>
+ Untuk berinteraksi dengan perangkat lokal dan sumber daya volume dan model machine learning pada perangkat core, fungsi Greengrass Lambda menggunakan antarmuka dari sistem operasi platform spesifik. Misalnya, Anda dapat menggunakan metode `open` pada modul [os](https://docs.python.org/2/library/os.html) dalam fungsi Python. Untuk memungkinkan fungsi dapat mengakses sumber daya, fungsi harus *berafiliasi* dengan sumber daya dan diberikan izin `read-only` atau `read-write` ini. Untuk informasi selengkapnya, termasuk ketersediaan versi AWS IoT Greengrass inti, lihat [Akses sumber daya lokal dengan fungsi dan konektor Lambda](access-local-resources.md) dan[Mengakses sumber daya machine learning dari kode fungsi Lambda](access-ml-resources.md#access-resource-function-code).
**catatan**  
Jika Anda menjalankan fungsi Lambda Anda tanpa kontainerisasi, Anda tidak dapat menggunakan perangkat lokal terlampir dan sumber daya volume dan harus mengakses sumber daya tersebut secara langsung.
+ Fungsi Lambda dapat menggunakan `Lambda` klien di AWS IoT Greengrass Core SDK untuk memanggil fungsi Lambda lainnya di grup Greengrass.
+ Fungsi Lambda dapat menggunakan AWS SDK untuk berkomunikasi dengan layanan. AWS Untuk informasi lebih lanjut, lihat [AWS SDK](#aws-sdk).
+ Fungsi Lambda dapat menggunakan antarmuka pihak ketiga untuk berkomunikasi dengan layanan cloud eksternal, mirip dengan fungsi Lambda berbasis cloud.

**catatan**  
Fungsi Greengrass Lambda tidak dapat berkomunikasi AWS dengan atau layanan cloud lainnya saat intinya offline.

## Mengambil input topik MQTT (atau subjek)
<a name="lambda-get-mqtt-topic"></a>

AWS IoT Greengrass menggunakan langganan untuk mengontrol pertukaran pesan MQTT antara perangkat klien, fungsi Lambda, dan konektor dalam grup, dan dengan AWS IoT atau layanan bayangan lokal. Langganan menentukan sumber pesan, target pesan, dan topik MQTT yang digunakan untuk rute pesan. Ketika target adalah fungsi Lambda, handler fungsi dipanggil ketika sumber menerbitkan pesan. Untuk informasi selengkapnya, lihat [Komunikasi menggunakan pesan MQTT](#lambda-messages).

Contoh berikut menunjukkan bagaimana fungsi Lambda bisa mendapatkan input topik dari `context` yang diteruskan ke handler. Hal ini dilakukan dengan mengakses kunci `subject` dari hierarki konteks (`context.client_context.custom['subject']`). Contoh ini juga mengurai input pesan JSON dan kemudian menerbitkan topik dan pesan yang diurai.

**catatan**  
Di AWS IoT Greengrass API, topik [langganan](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html) diwakili oleh `subject` properti.

```
import greengrasssdk
import logging

client = greengrasssdk.client('iot-data')

OUTPUT_TOPIC = 'test/topic_results'

def get_input_topic(context):
    try:
        topic = context.client_context.custom['subject']
    except Exception as e:
        logging.error('Topic could not be parsed. ' + repr(e))
    return topic
    
def get_input_message(event):
    try:
        message = event['test-key']
    except Exception as e:
        logging.error('Message could not be parsed. ' + repr(e))
    return message

def function_handler(event, context):
    try:
        input_topic = get_input_topic(context)
        input_message = get_input_message(event)
        response = 'Invoked on topic "%s" with message "%s"' % (input_topic, input_message)
        logging.info(response)
    except Exception as e:
        logging.error(e)

    client.publish(topic=OUTPUT_TOPIC, payload=response)

    return
```

Untuk menguji fungsi, tambahkan ke grup Anda menggunakan pengaturan konfigurasi default. Kemudian, tambahkan langganan berikut dan deploy grupnya. Untuk petunjuk, lihat [Modul 3 (bagian 1): Fungsi Lambda aktif AWS IoT Greengrass](module3-I.md).


****  

| Sumber | Target | Filter topik | 
| --- | --- | --- | 
| IoT Cloud | Fungsi ini | test/input\$1message | 
| Fungsi ini | IoT Cloud | test/topic\$1results | 

Setelah deployment selesai, mengaktifkan fungsi.

1. Di AWS IoT konsol, buka halaman klien **pengujian MQTT**.

1. Berlangganan `test/topic_results` topik dengan memilih tab **Berlangganan ke topik**.

1. Publikasikan pesan ke `test/input_message` topik dengan memilih tab **Publikasikan ke topik**. Untuk contoh ini, Anda harus menyertakan properti `test-key` di pesan JSON.

   ```
   {
     "test-key": "Some string value"
   }
   ```

   Jika berhasil, fungsi menerbitkan input topik dan string pesan ke topik `test/topic_results` ini.

## Konfigurasi siklus hidup untuk fungsi Greengrass 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 variabel dan logika preprocessing yang berada di luar fungsi handler dipertahankan.

AWS IoT Greengrass mendukung siklus hidup sesuai permintaan (default) atau berumur panjang:
+ Fungsi **Sesuai permintaan** mulai ketika mereka dipanggil dan berhenti ketika tidak ada tugas yang tersisa untuk dieksekusi. Pemanggilan fungsi membuat kontainer (atau sandbox) terpisah untuk memproses pemanggilan, kecuali jika kontainer yang ada dapat digunakan kembali. Data yang dikirim ke fungsi mungkin ditarik oleh salah satu kontainer.

  Beberapa pemanggilan fungsi sesuai permintaan dapat berjalan secara paralel.

  Variabel dan logika preprocessing yang didefinisikan di luar fungsi handler tidak dipertahankan ketika kontainer baru dibuat.
+ Fungsi **berumur panjang** (atau *disematkan*) dimulai secara otomatis ketika AWS IoT Greengrass inti dimulai dan dijalankan dalam satu wadah. Semua data yang dikirim ke fungsi ditarik oleh kontainer yang sama.

  Beberapa pemanggilan diantrekan hingga pemanggilan sebelumnya dieksekusi.

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

  Fungsi Lambda yang berumur panjang berguna ketika Anda harus mulai melakukan pekerjaan tanpa input awal. Misalnya, fungsi yang berumur panjang dapat memuat dan mulai memproses model ML agar siap ketika fungsi mulai menerima data perangkat.
**catatan**  
Ingat bahwa fungsi yang berumur panjang memiliki timeout yang terkait dengan pemanggilan dari handler-nya. Jika Anda ingin menjalankan kode tanpa batas waktu, Anda harus memulainya di luar handler. Pastikan bahwa tidak ada kode pemblokiran di luar handler yang mungkin mencegah fungsi menyelesaikan inisialisasi.  
 Fungsi-fungsi ini berjalan kecuali core berhenti (misalnya, selama deployment grup atau perangkat reboot) atau fungsi memasuki status error (seperti timeout handler, tidak masuk pengecualian, atau ketika fungsi melebihi batas memori).

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

## Lambda yang dapat dieksekusi
<a name="lambda-executables"></a>

Fitur ini tersedia untuk AWS IoT Greengrass Core v1.6 dan yang lebih baru.

Sebuah Lambda yang dapat dieksekusi adalah jenis fungsi Greengrass Lambda yang dapat Anda gunakan untuk menjalankan kode biner di lingkungan core. Ini memungkinkan Anda menjalankan fungsionalitas khusus perangkat secara asli dan mendapat manfaat dari jejak kode kompilasi yang lebih kecil. Lambda yang dapat dieksekusi dapat dipanggil oleh beberapa peristiwa, memanggil fungsi lainnya, dan mengakses sumber daya lokal.

Lambda yang dapat dieksekusi mendukung jenis encoding biner saja (tidak JSON), tetapi jika tidak, anda dapat mengelola mereka dalam kelompok Greengrass Anda dan menyebarkan mereka seperti fungsi Greengrass Lambda lainnya. Namun, proses menciptakan Lambda yang dapat dieksekusi berbeda dari menciptakan Python, Java, dan Node.js Lambda fungsi:
+ Anda tidak dapat menggunakan AWS Lambda konsol untuk membuat (atau mengelola) Lambda yang dapat dieksekusi. Anda dapat membuat Lambda yang dapat dieksekusi hanya dengan menggunakan API. AWS Lambda 
+ Anda mengunggah kode fungsi AWS Lambda sebagai executable yang dikompilasi yang menyertakan [AWS IoT Greengrass Core SDK](https://github.com/aws/aws-greengrass-core-sdk-c) untuk C.
+ Anda menentukan nama yang dapat dieksekusi sebagai fungsi handler.

Lambda yang dapat dieksekusi harus menerapkan panggilan tertentu dan pola pemrograman dalam kode fungsi mereka. Misalnya, metode `main` harus:
+ Panggilan `gg_global_init` untuk menginisialisasi variabel global internal Greengrass. Fungsi ini harus dipanggil sebelum membuat thread apa pun, dan sebelum memanggil fungsi AWS IoT Greengrass Core SDK lainnya.
+ Panggilan `gg_runtime_start` untuk mendaftarkan fungsi handler dengan waktu aktif Greengrass Lambda. Fungsi ini harus dipanggil selama inisialisasi. Memanggil fungsi ini menyebabkan thread digunakan oleh waktu aktif. Opsional parameter `GG_RT_OPT_ASYNC` memberitahu fungsi ini untuk tidak memblokir, melainkan untuk membuat thread baru untuk waktu aktif. Fungsi ini menggunakan handler `SIGTERM` ini.

Cuplikan berikut adalah `main` metode dari contoh kode [simple\$1handler.c](https://github.com/aws/aws-greengrass-core-sdk-c/blob/master/aws-greengrass-core-sdk-c-example/simple_handler.c) pada. GitHub

```
int main() {
    gg_error err = GGE_SUCCESS;

    err = gg_global_init(0);
    if(err) {
        gg_log(GG_LOG_ERROR, "gg_global_init failed %d", err);
        goto cleanup;
    }

    gg_runtime_start(handler, 0);

cleanup:
    return -1;
}
```

Untuk informasi lebih lanjut tentang persyaratan, kendala, dan rincian implementasi lainnya, lihat [AWS IoT Greengrass Core SDK for C](https://github.com/aws/aws-greengrass-core-sdk-c).

### Buat Lambda yang dapat dieksekusi
<a name="create-lambda-executable"></a>

Setelah mengkompilasi kode beserta SDK, gunakan AWS Lambda API untuk membuat fungsi Lambda dan mengunggah executable yang dikompilasi.

**catatan**  
Fungsi Anda harus dikompilasi dengan compiler C89 yang kompatibel.

Contoh berikut menggunakan perintah CLI [buat fungsi](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) untuk membuat Lambda yang dapat dieksekusi. Perintah menentukan:
+ Nama eksekusi untuk handler. Hal ini harus menjadi nama yang tepat dari kompilasi yang dapat dieksekusi milik Anda.
+ Jalur ke file `.zip` yang berisi kompilasi yang dapat dieksekusi.
+ `arn:aws:greengrass:::runtime/function/executable` untuk waktu aktif. Ini adalah waktu aktif untuk semua Lambda yang dapat dieksekusi.

**catatan**  
Untuk `role`, Anda dapat menentukan ARN dari setiap peran eksekusi Lambda. AWS IoT Greengrass tidak menggunakan peran ini, tetapi parameter diperlukan untuk membuat fungsi. Untuk informasi lebih lanjut tentang peran eksekusi Lambda, lihat [AWS Lambda model izin](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) dalam *AWS Lambda Panduan Developer*.

```
aws lambda create-function \
--region aws-region \
--function-name function-name \
--handler executable-name \
--role role-arn \
--zip-file fileb://file-name.zip \
--runtime arn:aws:greengrass:::runtime/function/executable
```

Selanjutnya, gunakan AWS Lambda API untuk menerbitkan versi dan membuat alias.
+ Gunakan [publikasikan versi](https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-version.html) untuk mempublikasikan versi fungsi.

  ```
  aws lambda publish-version \
  --function-name function-name \
  --region aws-region
  ```
+ Gunakan [Buat alias alias](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-alias.html) untuk membuat alias poin ke versi yang baru saja Anda publikasikan. Kami menyarankan Anda mereferensi fungsi Lambda dengan alias ketika Anda menambahkannya ke grup Greengrass.

  ```
  aws lambda create-alias \
  --function-name function-name \
  --name alias-name \
  --function-version version-number \
  --region aws-region
  ```

**catatan**  
 AWS Lambda Konsol tidak menampilkan executable Lambda. Untuk memperbarui kode fungsi, Anda harus menggunakan AWS Lambda API.

Kemudian, menambahkan Lambda yang dapat dieksekusi untuk grup Greengrass, mengonfigurasinya untuk menerima data input biner dalam pengaturan grup tertentu, dan men-deploy grup. Anda dapat melakukan ini di AWS IoT Greengrass konsol atau dengan menggunakan AWS IoT Greengrass API.

# Berjalan AWS IoT Greengrass di wadah Docker
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass dapat dikonfigurasi untuk dijalankan dalam wadah [Docker](https://www.docker.com/).

Anda dapat mengunduh Dockerfile melalui [Amazon CloudFront yang menginstal](what-is-gg.md#gg-docker-download) perangkat lunak AWS IoT Greengrass Core dan dependensi. Untuk mengubah citra Docker agar berjalan pada arsitektur platform yang berbeda atau mengurangi ukuran citra Docker, lihat file `README` dalam unduhan paket Docker.

Untuk membantu Anda mulai bereksperimen AWS IoT Greengrass, AWS juga menyediakan gambar Docker bawaan yang menginstal perangkat lunak AWS IoT Greengrass Core dan dependensi. Anda dapat mengunduh citra dari [Hub Docker](https://hub.docker.com/r/amazon/aws-iot-greengrass) atau [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR). Gambar bawaan ini menggunakan gambar dasar Amazon Linux 2 (x86\$164) dan Alpine Linux (x86\$164, ARMv7L, atau). AArch64

**penting**  
<a name="docker-images-end-of-maintenance"></a>Pada tanggal 30 Juni 2022, AWS IoT Greengrass mengakhiri pemeliharaan untuk perangkat lunak AWS IoT Greengrass Core v1.x gambar Docker yang diterbitkan ke Amazon Elastic Container Registry (Amazon ECR) Registry ECR) dan Docker Hub. Anda dapat terus mengunduh gambar Docker ini dari Amazon ECR dan Docker Hub hingga 30 Juni 2023, yaitu 1 tahun setelah pemeliharaan berakhir. Namun, gambar AWS IoT Greengrass Core software v1.x Docker tidak lagi menerima tambalan keamanan atau perbaikan bug setelah pemeliharaan berakhir pada 30 Juni 2022. Jika Anda menjalankan beban kerja produksi yang bergantung pada gambar Docker ini, kami sarankan Anda membuat gambar Docker Anda sendiri menggunakan Dockerfiles yang menyediakan. AWS IoT Greengrass  Untuk informasi selengkapnya, lihat [AWS IoT Greengrass Perangkat lunak Docker](what-is-gg.md#gg-docker-download).

Topik ini menjelaskan cara mengunduh gambar AWS IoT Greengrass Docker dari Amazon ECR dan menjalankannya di platform Windows, macOS, atau Linux (x86\$164). Topik ini mengandung langkah-langkah berikut:

1. [Dapatkan gambar AWS IoT Greengrass kontainer dari Amazon ECR](#docker-pull-image)

1. [Membuat dan mengonfigurasi grup Greengrass dan core](#docker-config-gg)

1. [Jalankan AWS IoT Greengrass secara lokal](#docker-run-gg)

1. [Mengonfigurasi kontainerisasi "Tanpa kontainer" untuk grup](#docker-no-container)

1. [Men-deploy fungsi Lambda ke kontainer Docker](#docker-add-lambdas)

1. [(Opsional) Terapkan perangkat klien yang berinteraksi dengan Greengrass di wadah Docker](#docker-add-devices)

Fitur berikut tidak didukung saat Anda menjalankan AWS IoT Greengrass dalam wadah Docker:<a name="docker-image-unsupported-features"></a>
+ [Konektor](connectors.md) yang berjalan di mode **kontainer Greengrass** ini. Untuk menjalankan konektor dalam kontainer Docker, konektor harus berjalan dengan mode **Tanpa kontainer** ini. Untuk menemukan konektor yang mendukung mode **Tanpa kontainer** ini, lihat [AWS-disediakan konektor Greengrass](connectors-list.md). Beberapa konektor ini memiliki parameter mode isolasi yang harus Anda atur ke **Tanpa kontainer**.
+ [Sumber daya perangkat dan volume lokal](access-local-resources.md). Fungsi Lambda yang ditetapkan pengguna milik Anda yang berjalan dalam kontainer Docker harus mengakses perangkat dan volume pada core secara langsung.

Fitur-fitur ini tidak didukung ketika lingkungan runtime Lambda untuk grup Greengrass disetel ke [No container, yang diperlukan untuk dijalankan di container](lambda-group-config.md#no-container-mode) Docker. AWS IoT Greengrass 

## Prasyarat
<a name="docker-image-prerequisites"></a>

Sebelum Anda memulai tutorial ini, Anda harus melakukan hal berikut.<a name="docker-image-prereq-list"></a>
+ Anda harus menginstal perangkat lunak dan versi berikut di komputer host Anda berdasarkan versi AWS Command Line Interface (AWS CLI) yang Anda pilih.

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) versi 18.09 atau yang lebih baru. Versi sebelumnya juga dapat berfungsi, namun kami merekomendasikan 18.09 atau yang lebih baru.
  + AWS CLI versi 2.0.0 atau yang lebih baru.
    + Untuk menginstal AWS CLI versi 2, lihat [Menginstal AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
    + Untuk mengkonfigurasi AWS CLI, lihat [Mengkonfigurasi. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
**catatan**  
Untuk meningkatkan ke AWS CLI versi 2 yang lebih baru di komputer Windows, Anda harus mengulangi proses [instalasi MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html).

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) versi 18.09 atau yang lebih baru. Versi sebelumnya juga dapat berfungsi, namun kami merekomendasikan 18.09 atau yang lebih baru.
  + [Python](https://www.python.org/downloads/) versi 3.6 atau lebih baru.
  + [pip](https://pip.pypa.io/en/stable/installing) versi 18.1 atau yang lebih baru.
  + AWS CLI versi 1.17.10 atau yang lebih baru
    + Untuk menginstal AWS CLI versi 1, lihat [Menginstal AWS CLI versi 1](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html).
    + Untuk mengkonfigurasi AWS CLI, lihat [Mengkonfigurasi. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
    + Untuk meng-upgrade ke versi terbaru dari AWS CLI versi 1, jalankan perintah berikut.

      ```
      pip install awscli --upgrade --user
      ```
**catatan**  
Jika Anda menggunakan [instalasi MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) AWS CLI versi 1 di Windows, perhatikan hal berikut:  
Jika instalasi AWS CLI versi 1 gagal menginstal botocore, coba gunakan instalasi [Python](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) dan pip.
Untuk meningkatkan ke AWS CLI versi 1 yang lebih baru, Anda harus mengulangi proses instalasi MSI.

------
+ Untuk mengakses sumber daya Amazon Elastic Container Registry (Amazon ECR), Anda harus memberikan izin berikut. 
  + Amazon ECR mengharuskan pengguna untuk memberikan `ecr:GetAuthorizationToken` izin melalui kebijakan AWS Identity and Access Management (IAM) sebelum mereka dapat mengautentikasi ke registri dan mendorong atau menarik gambar dari repositori Amazon ECR. Untuk informasi lebih lanjut, lihat [Contoh Kebijakan repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) dan [Mengakses Satu Repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket) dalam *Panduan Pengguna Amazon Elastis Registri Kontainer*.

## Langkah 1: Dapatkan gambar AWS IoT Greengrass kontainer dari Amazon ECR
<a name="docker-pull-image"></a>

AWS menyediakan gambar Docker yang memiliki perangkat lunak AWS IoT Greengrass Core diinstal.

**Awas**  <a name="docker-images-python-2.7-removal"></a>
Dimulai dengan v1.11.6 dari perangkat lunak AWS IoT Greengrass Core, gambar Greengrass Docker tidak lagi menyertakan Python 2.7, karena Python 2.7 mencapai pada tahun 2020 dan tidak lagi menerima pembaruan keamanan. end-of-life Jika Anda memilih untuk memperbarui ke gambar Docker ini, kami sarankan Anda memvalidasi bahwa aplikasi Anda bekerja dengan gambar Docker baru sebelum Anda menyebarkan pembaruan ke perangkat produksi. Jika Anda memerlukan Python 2.7 untuk aplikasi Anda yang menggunakan image Greengrass Docker, Anda dapat memodifikasi Greengrass Dockerfile untuk menyertakan Python 2.7 untuk aplikasi Anda.

Untuk langkah-langkah yang menunjukkan cara menarik `latest` gambar dari Amazon ECR, pilih sistem operasi Anda:

### Tarik citra kontainer (Linux)
<a name="docker-pull-image-linux"></a>

Jalankan perintah berikut di terminal komputer Anda.

1. <a name="docker-get-login"></a>Masuk ke AWS IoT Greengrass registri di Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Jika berhasil, output akan mencetak `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Ambil gambar AWS IoT Greengrass kontainer.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**catatan**  
`latest`Gambar berisi versi stabil terbaru dari perangkat lunak AWS IoT Greengrass Core yang diinstal pada gambar dasar Amazon Linux 2. Anda juga dapat menarik gambar lain dari repositori. Untuk menemukan semua gambar yang tersedia, periksa **Tag** pada halaman [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) atau menggunakan perintah **aws ecr list-images** ini. Contoh:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. Mengaktifkan perlindungan symlink dan hardlink. Jika Anda bereksperimen dengan menjalankan AWS IoT Greengrass dalam wadah, Anda dapat mengaktifkan pengaturan untuk boot saat ini saja.
**catatan**  
Anda mungkin harus menggunakan **sudo** untuk menjalankan perintah ini.
   + Untuk mengaktifkan pengaturan untuk boot ketika ini saja:

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + Untuk mengaktifkan pengaturan untuk bertahan di restart:

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a>Aktifkan penerusan IPv4 jaringan, yang diperlukan untuk penyebaran AWS IoT Greengrass cloud dan komunikasi MQTT untuk bekerja di Linux. Di file `/etc/sysctl.conf` ini, atur `net.ipv4.ip_forward` ke 1, dan kemudian muat ulang `sysctls`.

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**catatan**  
Anda bisa menggunakan editor pilihan Anda dan bukan nano.

### Tarik citra kontainer (macOS)
<a name="docker-pull-image-mac"></a>

Jalankan perintah berikut di terminal komputer Anda.

1. <a name="docker-get-login"></a>Masuk ke AWS IoT Greengrass registri di Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Jika berhasil, output akan mencetak `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Ambil gambar AWS IoT Greengrass kontainer.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**catatan**  
`latest`Gambar berisi versi stabil terbaru dari perangkat lunak AWS IoT Greengrass Core yang diinstal pada gambar dasar Amazon Linux 2. Anda juga dapat menarik gambar lain dari repositori. Untuk menemukan semua gambar yang tersedia, periksa **Tag** pada halaman [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) atau menggunakan perintah **aws ecr list-images** ini. Contoh:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### Tarik citra kontainer (Windows)
<a name="docker-pull-image-windows"></a>

Jalankan perintah berikut di prompt perintah. Sebelum Anda dapat menggunakan perintah Docker pada Windows, Docker Desktop harus berjalan.

1. <a name="docker-get-login"></a>Masuk ke AWS IoT Greengrass registri di Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Jika berhasil, output akan mencetak `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Ambil gambar AWS IoT Greengrass kontainer.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**catatan**  
`latest`Gambar berisi versi stabil terbaru dari perangkat lunak AWS IoT Greengrass Core yang diinstal pada gambar dasar Amazon Linux 2. Anda juga dapat menarik gambar lain dari repositori. Untuk menemukan semua gambar yang tersedia, periksa **Tag** pada halaman [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) atau menggunakan perintah **aws ecr list-images** ini. Contoh:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## Langkah 2: Membuat dan mengonfigurasi grup Greengrass dan core
<a name="docker-config-gg"></a>

Gambar Docker memiliki perangkat lunak AWS IoT Greengrass Core yang diinstal, tetapi Anda harus membuat grup dan inti Greengrass. Ini termasuk mengunduh sertifikat dan file konfigurasi core.
+ Ikuti langkah-langkah dalam [Modul 2: Menginstal perangkat lunak AWS IoT Greengrass Inti](module2.md). Lewati langkah-langkah di mana Anda mengunduh dan menjalankan perangkat lunak AWS IoT Greengrass Core. Perangkat lunak dan dependensi waktu aktif yang sudah diatur dalam citra Docker.

## Langkah 3: Jalankan AWS IoT Greengrass secara lokal
<a name="docker-run-gg"></a>

Setelah grup dikonfigurasi, Anda siap untuk mengonfigurasi dan memulai core. Untuk langkah-langkah yang menunjukkan cara melakukannya, pilih sistem operasi Anda:

### Jalankan Greengrass secara lokal (Linux)
<a name="docker-run-gg-linux"></a>

Jalankan perintah berikut di terminal komputer Anda.

1. <a name="docker-create-certs-folder"></a>Buat folder untuk sumber daya keamanan perangkat, dan pindahkan sertifikat dan kunci ke folder itu. Jalankan perintah berikut. Ganti *path-to-security-files* dengan jalur ke sumber daya keamanan, dan ganti *certificateId* dengan ID sertifikat di nama file.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Buat folder untuk konfigurasi perangkat, dan pindahkan file konfigurasi AWS IoT Greengrass Core ke folder itu. Jalankan perintah berikut. Ganti *path-to-config-file* dengan path ke file konfigurasi.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Mulai AWS IoT Greengrass dan ikat sertifikat dan file konfigurasi di wadah Docker.

   Ganti `/tmp` dengan jalur di mana Anda dekompresi sertifikat dan file konfigurasi.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Output-nya akan terlihat seperti contoh ini:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Jalankan Greengrass secara lokal (macOS)
<a name="docker-run-gg-mac"></a>

Jalankan perintah berikut di terminal komputer Anda.

1. <a name="docker-create-certs-folder"></a>Buat folder untuk sumber daya keamanan perangkat, dan pindahkan sertifikat dan kunci ke folder itu. Jalankan perintah berikut. Ganti *path-to-security-files* dengan jalur ke sumber daya keamanan, dan ganti *certificateId* dengan ID sertifikat di nama file.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Buat folder untuk konfigurasi perangkat, dan pindahkan file konfigurasi AWS IoT Greengrass Core ke folder itu. Jalankan perintah berikut. Ganti *path-to-config-file* dengan path ke file konfigurasi.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Mulai AWS IoT Greengrass dan ikat sertifikat dan file konfigurasi di wadah Docker.

   Ganti `/tmp` dengan jalur di mana Anda dekompresi sertifikat dan file konfigurasi.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Output-nya akan terlihat seperti contoh ini:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Jalankan Greengrass drcsrs lokal (Windows)
<a name="docker-run-gg-windows"></a>

1. Buat folder untuk sumber daya keamanan perangkat, dan pindahkan sertifikat dan kunci ke folder itu. Jalankan perintah berikut di prompt perintah. Ganti *path-to-security-files* dengan jalur ke sumber daya keamanan, dan ganti *certificateId* dengan ID sertifikat di nama file.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. Buat folder untuk konfigurasi perangkat, dan pindahkan file konfigurasi AWS IoT Greengrass Core ke folder itu. Jalankan perintah berikut di prompt perintah. Ganti *path-to-config-file* dengan path ke file konfigurasi.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1. Mulai AWS IoT Greengrass dan ikat sertifikat dan file konfigurasi di wadah Docker. Jalankan perintah berikut di prompt perintah Anda.

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Saat Docker meminta Anda untuk membagikan drive `C:\` dengan daemon Docker, izinkan drive untuk ikat-pasang `C:\` di dalam kontainer Docker. Untuk informasi lebih lanjut, lihat [drive berbagi](https://docs.docker.com/docker-for-windows/#shared-drives) dalam dokumentasi Docker. 

   Output-nya akan terlihat seperti contoh ini:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**catatan**  
Jika kontainer tidak membuka shell dan langsung keluar, Anda dapat men-debug masalah dengan ikat-pasang mencatat waktu aktif Greengrass ketika Anda memulai citra. Untuk informasi selengkapnya, lihat [Untuk dapat bertahan dengan mencatat waktu aktif Greengrass di luar kontainer Docker](#debugging-docker-persist-logs).

## Langkah 4: Mengonfigurasi kontainerisasi "Tanpa kontainer" untuk grup Greengrass
<a name="docker-no-container"></a>

Ketika Anda menjalankan AWS IoT Greengrass dalam wadah Docker, semua fungsi Lambda harus berjalan tanpa containerization. Pada langkah ini, Anda mengatur kontainerisasi default untuk grup **Tanpa kontainer**. Anda harus melakukan ini sebelum Anda men-deploy grup untuk pertama kalinya.

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

1. <a name="group-choose-group"></a>Pilih grup yang pengaturannya ingin Anda ubah.

1. Pilih tab **Fungsi Lambda**.

1. **Di bawah **lingkungan runtime fungsi Lambda default**, pilih Edit.**

1. Di **lingkungan runtime fungsi Lambda default Edit, di bawah containerization fungsi** **Lambda Default, ubah pengaturan containerization**.

1. Pilih **Simpan**.

Perubahan berlaku ketika grup di-deploy.

Untuk informasi selengkapnya, lihat [Pengaturan kontainerisasi default untuk fungsi Lambda dalam grup](lambda-group-config.md#lambda-containerization-groupsettings).

**catatan**  
Secara default, fungsi Lambda menggunakan pengaturan grup kontainerisasi. Jika anda mengesampingkan pengaturan **Tanpa kontainer** untuk setiap fungsi Lambda ketika AWS IoT Greengrass berjalan dalam kontainer Docker, deployment-nya gagal.

## Langkah 5: Menyebarkan fungsi Lambda ke AWS IoT Greengrass wadah Docker
<a name="docker-add-lambdas"></a>

Anda dapat men-deploy fungsi Lambda berumur panjang ke kontainer Greengrass Docker.
+ Ikuti langkah-langkah dalam [Modul 3 (bagian 1): Fungsi Lambda aktif AWS IoT Greengrass](module3-I.md) untuk men-deploy fungsi Hello World Lambda berumur panjang ke kontainer.

## Langkah 6: (Opsional) Menyebarkan perangkat klien yang berinteraksi dengan Greengrass yang berjalan di wadah Docker
<a name="docker-add-devices"></a>

Anda juga dapat menerapkan perangkat klien yang berinteraksi AWS IoT Greengrass saat dijalankan di wadah Docker.
+ Ikuti langkah-langkah [Modul 4: Berinteraksi dengan perangkat klien dalam grup AWS IoT Greengrass](module4.md) untuk menyebarkan perangkat klien yang terhubung ke inti dan mengirim pesan MQTT.

## Menghentikan wadah AWS IoT Greengrass Docker
<a name="docker-stop"></a>

Untuk menghentikan kontainer AWS IoT Greengrass Docker, tekan Ctrl\$1C di terminal atau command prompt Anda. Tindakan ini mengirimkan `SIGTERM` ke proses daemon Greengrass untuk meruntuhkan proses daemon Greengrass dan semua proses Lambda yang dimulai oleh proses daemon. Kontainer Docker diinisialisasi dengan proses `/dev/init` sebagai PID 1, yang membantu untuk menghapus proses zombie sisa. Untuk informasi lebih lanjut, lihat [referensi menjalankan Docker](https://docs.docker.com/engine/reference/commandline/run/#options).

## Pemecahan masalah AWS IoT Greengrass dalam wadah Docker
<a name="troubleshooting-docker-gg"></a>

Gunakan informasi berikut untuk membantu memecahkan masalah dengan berjalan AWS IoT Greengrass di wadah Docker.

### Error: Tidak dapat melakukan login interaktif dari perengakat non TTY.
<a name="docker-troubleshootin-ecr-get-login-password"></a>

**Solusi:** Kesalahan ini dapat terjadi ketika Anda menjalankan perintah `aws ecr get-login-password` ini. Pastikan Anda menginstal AWS CLI versi 2 atau versi 1 yang terbaru. Kami menyarankan Anda menggunakan AWS CLI versi 2. Untuk informasi selengkapnya, lihat [Menginstal AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dalam *Panduan Pengguna AWS Command Line Interface *.

### Kesalahan: Opsi tidak diketahui: -no-include-email.
<a name="docker-troubleshooting-cli-version"></a>

**Solusi:** Kesalahan ini dapat terjadi ketika Anda menjalankan perintah `aws ecr get-login` ini. Pastikan Anda telah menginstal AWS CLI versi terbaru (misalnya, jalankan:`pip install awscli --upgrade --user`). Jika Anda menggunakan Windows dan Anda menginstal CLI menggunakan MSI installer, Anda harus mengulangi proses instalasi. Untuk informasi lebih lanjut, lihat [Menginstal AWS Command Line Interface di Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) dalam *AWS Command Line Interface Panduan Pengguna*.

### Peringatan: IPv4 dinonaktifkan. Jaringan tidak akan bekerja.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**Solusi:** Anda mungkin menerima peringatan ini atau pesan serupa saat berjalan AWS IoT Greengrass di komputer Linux. [Aktifkan penerusan IPv4 jaringan seperti yang dijelaskan dalam langkah ini.](#docker-linux-enable-ipv4) AWS IoT Greengrass penyebaran cloud dan komunikasi MQTT tidak berfungsi saat IPv4 penerusan tidak diaktifkan. Untuk informasi lebih lanjut, lihat [Mengonfigurasi parameter kernel namespace (sysctls) pada ketika waktu aktif](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime) dalam dokumentasi Docker.

### Error: Firewall memblokir file berbagi antara windows dan kontainer.
<a name="docker-troubleshooting-firewall"></a>

**Solusi:** Anda mungkin menerima error ini atau pesan `Firewall Detected` ketika menjalankan Docker di komputer Windows. Hal ini juga dapat terjadi jika Anda masuk pada jaringan pribadi virtual (VPN) dan pengaturan jaringan Anda mencegah drive berbagi untuk dipasang. Dalam situasi itu, matikan VPN dan jalankan kembali kontainer Docker.

### Kesalahan: Terjadi kesalahan (AccessDeniedException) saat memanggil GetAuthorizationToken operasi: User: arn:aws:iam: ::user/ <account-id><user-name>tidak diizinkan untuk melakukan: ecr: on resource: \$1 GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

Anda mungkin menerima kesalahan ini saat menjalankan `aws ecr get-login-password` jika Anda tidak memiliki izin yang memadai untuk mengakses repositori Amazon ECR. Untuk informasi lebih lanjut, lihat: [Contoh Kebijakan Repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) dan [Mengakses Satu Repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) di *Panduan Pengguna Amazon ECR*.

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

### Debugging AWS IoT Greengrass dalam wadah Docker
<a name="debugging-docker-gg"></a>

Untuk debug masalah dengan kontainer Docker, Anda dapat bertahan dengan mencatat waktu aktif Greengrass atau melampirkan shell interaktif untuk kontainer Docker.

#### Untuk dapat bertahan dengan mencatat waktu aktif Greengrass di luar kontainer Docker
<a name="debugging-docker-persist-logs"></a>

Anda dapat menjalankan wadah AWS IoT Greengrass Docker setelah mengikat direktori. `/greengrass/ggc/var/log` Catatan bertahan bahkan setelah kontainer keluar atau dihapus.

**Di Linux atau macOS**  
[Menghentikan kontainer Greengrass Docker](#docker-stop) berjalan pada host, dan kemudian menjalankan perintah berikut di terminal. Ini ikat-pasang Greengrass direktori `log` dan mulai citra Docker.   
Ganti `/tmp` dengan jalur di mana Anda dekompresi sertifikat dan file konfigurasi.  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Anda kemudian dapat memeriksa log Anda di `/tmp/log` pada host Anda untuk melihat apa yang terjadi ketika Greengrass berjalan di dalam kontainer Docker.

**Di Windows**  
[Menghentikan kontainer Greengrass Docker](#docker-stop) berjalan di host, dan kemudian menjalankan perintah berikut di perintah prompt. Ini ikat-pasang Greengrass direktori `log` dan mulai citra Docker.  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Anda kemudian dapat memeriksa log Anda di `C:/Users/%USERNAME%/Downloads/log` pada host Anda untuk melihat apa yang terjadi ketika Greengrass berjalan di dalam kontainer Docker.

#### Untuk melampirkan shell interaktif ke kontainer Docker
<a name="debugging-docker-attach-shell"></a>

Anda dapat melampirkan shell interaktif ke wadah AWS IoT Greengrass Docker yang sedang berjalan. Hal ini dapat membantu Anda menyelidiki keadaan kontainer Greengrass Docker.

**Di Linux atau macOS**  
Sementara kontainer Greengrass Docker berjalan, jalankan perintah berikut di terminal terpisah.  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**Di Windows**  
Sementara kontainer Greengrass Docker berjalan, jalankan perintah berikut di prompt perintah terpisah.  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
Ganti *gg-container-id* dengan `container_id` hasil dari perintah sebelumnya.  

```
docker exec -it gg-container-id /bin/bash
```