

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

# Kembangkan AWS IoT Greengrass komponen
<a name="develop-greengrass-components"></a>

Anda dapat mengembangkan dan menguji komponen pada perangkat inti Greengrass Anda. Akibatnya, Anda dapat membuat dan mengulangi AWS IoT Greengrass perangkat lunak Anda tanpa berinteraksi dengan perangkat lunak. AWS Cloud Setelah menyelesaikan versi komponen, Anda dapat mengunggahnya AWS IoT Greengrass di cloud, sehingga Anda dan tim dapat menerapkan komponen tersebut ke perangkat lain di armada Anda. Untuk informasi selengkapnya tentang cara men-deploy komponen, lihat [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).

Setiap komponen terdiri dari *resep* dan *artifact*.
+ <a name="component-recipe-definition"></a>**Resep**

  Setiap komponen berisi file resep, yang mendefinisikan metadata nya. Resep ini juga menentukan parameter konfigurasi komponen, dependensi komponen, siklus hidup, dan kompatibilitas platform. Siklus hidup komponen menentukan perintah yang menginstal, menjalankan, dan menutup komponen. Untuk informasi selengkapnya, lihat [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md).

  Anda bisa menentukan resep dalam format [JSON](https://en.wikipedia.org/wiki/JSON) atau [YAML](https://en.wikipedia.org/wiki/YAML).
+ <a name="component-artifacts-definition"></a>**Artefak**

  Komponen dapat memiliki sejumlah artifact, yang merupakan komponen biner. Artifact dapat mencakup skrip, kode yang dikompilasi, sumber daya statis, dan file lain yang dikonsumsi komponen. Komponen juga dapat mengonsumsi artifact dari dependensi komponen.

AWS IoT Greengrass menyediakan komponen pra-bangun yang dapat Anda gunakan dalam aplikasi Anda dan menyebarkan ke perangkat Anda. Misalnya, Anda dapat menggunakan komponen pengelola aliran untuk mengunggah data ke berbagai AWS layanan, atau Anda dapat menggunakan komponen CloudWatch metrik untuk mempublikasikan metrik kustom ke Amazon. CloudWatch Untuk informasi selengkapnya, lihat [Komponen yang disediakan oleh AWS](public-components.md).

AWS IoT Greengrass mengkurasi indeks komponen Greengrass, yang disebut Greengrass Software Catalog. Katalog ini melacak komponen Greengrass yang dikembangkan oleh komunitas Greengrass. Dari katalog ini, Anda dapat mengunduh, memodifikasi, dan menyebarkan komponen untuk membuat aplikasi Greengrass Anda. Untuk informasi selengkapnya, lihat [Komponen komunitas](greengrass-software-catalog.md).

Perangkat lunak AWS IoT Greengrass Core menjalankan komponen sebagai pengguna dan grup sistem, seperti `ggc_user` dan`ggc_group`, yang Anda konfigurasikan pada perangkat inti. Ini berarti bahwa komponen memiliki izin dari pengguna sistem itu. Jika Anda menggunakan pengguna sistem tanpa direktori home, maka komponen tidak dapat menggunakan perintah atau kode run yang menggunakan direktori home. Ini berarti Anda tidak dapat menggunakan perintah `pip install some-library --user` untuk menginstal paket Python misalnya. Jika Anda mengikuti [Memulai tutorial](getting-started.md) untuk mengatur perangkat inti, maka pengguna sistem Anda tidak memiliki direktori home. Untuk informasi selengkapnya tentang cara mengonfigurasi pengguna dan grup yang menjalankan komponen, lihat [Konfigurasikan pengguna yang menjalankan komponen](configure-greengrass-core-v2.md#configure-component-user).

**catatan**  <a name="semver-note"></a>
<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/).

**Topics**
+ [Siklus hidup komponen](#component-lifecycle)
+ [Jenis komponen](#component-types)
+ [Buat AWS IoT Greengrass komponen](create-components.md)
+ [Uji AWS IoT Greengrass komponen dengan penerapan lokal](test-components.md)
+ [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md)
+ [Berinteraksi dengan AWS layanan](interact-with-aws-services.md)
+ [Jalankan kontainer Docker](run-docker-container.md)
+ [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md)
+ [Referensi variabel lingkungan komponen](component-environment-variables.md)

## Siklus hidup komponen
<a name="component-lifecycle"></a>

*Siklus hidup komponen* mendefinisikan tahapan yang digunakan perangkat lunak AWS IoT Greengrass Core untuk menginstal dan menjalankan komponen. Setiap tahap mendefinisikan skrip dan informasi lain yang menentukan bagaimana komponen berperilaku. Misalnya, ketika Anda menginstal komponen, perangkat lunak AWS IoT Greengrass Core menjalankan skrip `install` siklus hidup untuk komponen tersebut. Komponen pada perangkat inti memiliki status siklus hidup berikut:
+ `NEW` – Resep dan artefak komponen dimuat pada perangkat inti, namun komponennya tidak terpasang. Setelah komponen memasuki status ini, ia menjalankan [skrip instalasinya](component-recipe-reference.md#install-lifecycle-definition).
+ `INSTALLED` – Komponen dipasang pada perangkat inti. Komponen memasuki keadaan ini setelah menjalankan [install scripts](component-recipe-reference.md#install-lifecycle-definition).
+ `STARTING` – Komponen mulai pada perangkat inti. Komponen memasuki keadaan ini ketika menjalankan [install scripts](component-recipe-reference.md#startup-lifecycle-definition). Jika permulaan ini berhasil, komponen akan memasuki keadaan `RUNNING`.
+ `RUNNING` – Komponen mulai pada perangkat inti. Komponen memasuki keadaan ini ketika menjalankan [run script](component-recipe-reference.md#run-lifecycle-definition) atau saat memiliki proses latar belakang aktif dari startup script.
+ `FINISHED`— Komponen berjalan dengan sukses dan menyelesaikan operasinya.
+ `STOPPING` – Komponen berhenti. Komponen memasuki keadaan ini ketika menjalankan [shutdown scripts](component-recipe-reference.md#shutdown-lifecycle-definition).
+ `ERRORED` — Komponen mengalami kesalahan. Ketika komponen memasuki keadaan ini, ia akan menjalankan [skrip pemulihan](component-recipe-reference.md#recover-lifecycle-definition). Kemudian, komponen restart untuk mencoba kembali ke penggunaan normal. Jika komponen memasuki keadaan `ERRORED` tiga kali tanpa berjalan sukses, komponen menjadi `BROKEN`.
+ `BROKEN` — Komponen mengalami kesalahan beberapa kali dan tidak dapat pulih. Anda harus men-deploy komponen lagi untuk memperbaikinya.

## Jenis komponen
<a name="component-types"></a>

*Jenis komponen* menentukan bagaimana perangkat lunak AWS IoT Greengrass Core menjalankan komponen. Komponen dapat memiliki jenis berikut:
+ **Inti** (`aws.greengrass.nucleus`)

  Inti Greengrass adalah komponen yang menyediakan fungsionalitas minimum perangkat lunak Core. AWS IoT Greengrass Untuk informasi selengkapnya, lihat [Inti Greengrass](greengrass-nucleus-component.md).
+ **Plugin** (`aws.greengrass.plugin`)

  Inti Greengrass menjalankan komponen plugin dalam Java Virtual Machine (JVM) yang sama sebagai inti. Nukleus dimulai ulang saat Anda mengubah versi komponen plugin pada perangkat inti. Untuk menginstal dan menjalankan komponen plugin, Anda harus mengonfigurasi inti Greengrass agar berjalan sebagai layanan sistem. Untuk informasi selengkapnya, lihat [Konfigurasikan inti Greengrass sebagai layanan sistem](configure-greengrass-core-v2.md#configure-system-service).

  Beberapa komponen yang disediakan oleh AWS adalah komponen plugin, yang memungkinkan mereka untuk berinteraksi langsung dengan inti Greengrass. Komponen plugin menggunakan file log yang sama seperti inti Greengrass. Untuk informasi selengkapnya, lihat [Memantau AWS IoT Greengrass log](monitor-logs.md).
+ **Generik** (`aws.greengrass.generic`)

  Inti Greengrass menjalankan skrip siklus hidup komponen generik, jika komponen mendefinisikan siklus hidup.

  Jenis ini adalah jenis default untuk komponen kustom.
+ **Lambda (**) `aws.greengrass.lambda`

  Inti Greengrass menjalankan komponen fungsi Lambda menggunakan [Komponen peluncur Lambda](lambda-launcher-component.md).

  Bila Anda membuat komponen dari fungsi Lambda, komponen memiliki jenis ini. Untuk informasi selengkapnya, lihat [Jalankan AWS Lambda fungsi](run-lambda-functions.md).

**catatan**  <a name="recipe-component-type-recommendation"></a>
Kami tidak menyarankan Anda menentukan jenis komponen dalam resep. AWS IoT Greengrass menetapkan tipe untuk Anda saat Anda membuat komponen.

# Buat AWS IoT Greengrass komponen
<a name="create-components"></a>

Anda dapat mengembangkan AWS IoT Greengrass komponen khusus pada komputer pengembangan lokal atau perangkat inti Greengrass. AWS IoT Greengrass [menyediakan [AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI](greengrass-development-kit-cli.md)) untuk membantu Anda membuat, membangun, dan menerbitkan komponen dari template komponen dan komponen komunitas yang telah ditentukan sebelumnya.](greengrass-software-catalog.md) Anda juga dapat menjalankan perintah shell bawaan untuk membuat, membangun, dan menerbitkan komponen. Pilih dari opsi berikut untuk membuat komponen Greengrass kustom:
+ **Gunakan CLI Kit Pengembangan Greengrass**

  Gunakan CLI GDK untuk mengembangkan komponen pada komputer pengembangan lokal. CLI GDK membangun dan mengemas kode sumber komponen menjadi resep dan artefak yang dapat Anda publikasikan sebagai komponen pribadi ke layanan. AWS IoT Greengrass Anda dapat mengonfigurasi CLI GDK untuk memperbarui versi dan URIs artefak komponen secara otomatis saat Anda mempublikasikan komponen, jadi Anda tidak perlu memperbarui resep setiap kali. Untuk mengembangkan komponen menggunakan CLI GDK, Anda dapat memulai dari template atau komponen komunitas dari Katalog Perangkat Lunak [Greengrass](greengrass-software-catalog.md). Untuk informasi selengkapnya, lihat [AWS IoT Greengrass Kit Pengembangan Antarmuka Baris Perintah](greengrass-development-kit-cli.md).
+ **Jalankan perintah shell bawaan**

  Anda dapat menjalankan perintah shell bawaan untuk mengembangkan komponen pada komputer pengembangan lokal atau pada perangkat inti Greengrass. Anda menggunakan perintah shell untuk menyalin atau membangun kode sumber komponen menjadi artefak. Setiap kali Anda membuat versi baru komponen, Anda harus membuat atau memperbarui resep dengan versi komponen baru. Saat memublikasikan komponen ke AWS IoT Greengrass layanan, Anda harus memperbarui URI ke setiap artefak komponen dalam resep.

**Topics**
+ [Buat komponen (GDK CLI)](#create-component-gdk-cli)
+ [Buat komponen (perintah shell)](#create-component-shell-commands)

## Buat komponen (GDK CLI)
<a name="create-component-gdk-cli"></a>

Ikuti petunjuk di bagian ini untuk membuat dan membangun komponen menggunakan CLI GDK.

**Untuk mengembangkan komponen Greengrass (GDK CLI)**

1. Jika Anda belum melakukannya, instal CLI GDK di komputer pengembangan Anda. Untuk informasi selengkapnya, lihat [Instal atau perbarui Antarmuka AWS IoT Greengrass Baris Perintah Kit Pengembangan](install-greengrass-development-kit-cli.md).

1. Ubah ke folder tempat Anda ingin membuat folder komponen.

------
#### [ Linux or Unix ]

   ```
   mkdir ~/greengrassv2
   cd ~/greengrassv2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir %USERPROFILE%\greengrassv2
   cd %USERPROFILE%\greengrassv2
   ```

------
#### [ PowerShell ]

   ```
   mkdir ~/greengrassv2
   cd ~/greengrassv2
   ```

------

1. Pilih template komponen atau komponen komunitas untuk diunduh. CLI GDK mengunduh template atau komponen komunitas, sehingga Anda dapat memulai dari contoh fungsional. Gunakan perintah [daftar komponen](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-list) untuk mengambil daftar template yang tersedia atau komponen komunitas.
   + Untuk daftar template komponen, jalankan perintah berikut. Setiap baris dalam respons mencakup nama template dan bahasa pemrograman.

     ```
     gdk component list --template
     ```
   + Untuk daftar komponen komunitas, jalankan perintah berikut.

     ```
     gdk component list --repository
     ```

1. Buat dan ubah ke folder komponen tempat CLI GDK mengunduh templat atau komponen komunitas. Ganti *HelloWorld* dengan nama komponen, atau nama lain yang membantu Anda mengidentifikasi folder komponen ini.

------
#### [ Linux or Unix ]

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

------
#### [ PowerShell ]

   ```
   mkdir HelloWorld
   cd HelloWorld
   ```

------

1. Unduh template atau komponen komunitas ke folder saat ini. Gunakan perintah [komponen init](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-init).
   + Untuk membuat folder komponen dari template, jalankan perintah berikut. Ganti *HelloWorld* dengan nama template, dan ganti *python* dengan nama bahasa pemrograman.

     ```
     gdk component init --template HelloWorld --language python
     ```
   + Untuk membuat folder komponen dari komponen komunitas, jalankan perintah berikut. Ganti *ComponentName* dengan nama komponen komunitas.

     ```
     gdk component init --repository ComponentName
     ```
**catatan**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>Jika Anda menggunakan GDK CLI v1.0.0, Anda harus menjalankan perintah ini di folder kosong. CLI GDK mengunduh template atau komponen komunitas ke folder saat ini.  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>Jika Anda menggunakan GDK CLI v1.1.0 atau yang lebih baru, Anda dapat menentukan `--name` argumen untuk menentukan folder tempat CLI GDK mengunduh template atau komponen komunitas. Jika Anda menggunakan argumen ini, tentukan folder yang tidak ada. CLI GDK membuat folder untuk Anda. Jika Anda tidak menentukan argumen ini, CLI GDK menggunakan folder saat ini, yang harus kosong.

1. CLI GDK membaca dari file [konfigurasi CLI GDK](gdk-cli-configuration-file.md), `gdk-config.json` bernama, untuk membangun dan menerbitkan komponen. File konfigurasi ini ada di root folder komponen. Langkah sebelumnya membuat file ini untuk Anda. Pada langkah ini, Anda memperbarui `gdk-config.json` dengan informasi tentang komponen Anda. Lakukan hal-hal berikut:

   1. Buka `gdk-config.json` di editor teks.

   1. (Opsional) Ubah nama komponen. Nama komponen adalah kunci dalam `component` objek.

   1. Ubah penulis komponen.

   1. (Opsional) Ubah versi komponen. Tentukan satu dari yang berikut ini:<a name="gdk-cli-configuration-file-component-version-options"></a>
      + `NEXT_PATCH`— Saat Anda memilih opsi ini, CLI GDK menetapkan versi saat Anda mempublikasikan komponen. CLI GDK menanyakan layanan AWS IoT Greengrass untuk mengidentifikasi versi komponen terbaru yang diterbitkan. Kemudian, ia menetapkan versi ke versi patch berikutnya setelah versi itu. Jika Anda belum mempublikasikan komponen sebelumnya, CLI GDK menggunakan versi. `1.0.0`

        Jika Anda memilih opsi ini, Anda tidak dapat menggunakan [CLI Greengrass](greengrass-cli-component.md) untuk menyebarkan dan menguji komponen secara lokal ke komputer pengembangan lokal Anda yang menjalankan perangkat lunak Core. AWS IoT Greengrass Untuk mengaktifkan penerapan lokal, Anda harus menentukan versi semantik sebagai gantinya.
      + Versi semantik, seperti. **1.0.0** *Versi semantik menggunakan mayor.* *kecil*. sistem penomoran *tambalan*. Untuk informasi lebih lanjut, lihat [spesifikasi versi semantik](https://semver.org/).

        Jika Anda mengembangkan komponen pada perangkat inti Greengrass tempat Anda ingin menerapkan dan menguji komponen, pilih opsi ini. [Anda harus membangun komponen dengan versi tertentu untuk membuat penerapan lokal dengan CLI Greengrass.](greengrass-cli-component.md)

   1. (Opsional) Ubah konfigurasi build untuk komponen. Konfigurasi build mendefinisikan bagaimana CLI GDK membangun sumber komponen menjadi artefak. Pilih dari opsi berikut untuk`build_system`:<a name="gdk-cli-configuration-file-component-build-system-options"></a>
      + `zip`— Paket folder komponen ke dalam file ZIP untuk didefinisikan sebagai satu-satunya artefak komponen. Pilih opsi ini untuk jenis komponen berikut:
        + Komponen yang menggunakan bahasa pemrograman yang ditafsirkan, seperti JavaScript Python atau.
        + Komponen yang mengemas file selain kode, seperti model pembelajaran mesin atau sumber daya lainnya.

        CLI GDK meritsleting folder komponen ke dalam file zip dengan nama yang sama dengan folder komponen. Misalnya, jika nama folder komponen adalah`HelloWorld`, CLI GDK membuat file zip bernama. `HelloWorld.zip`
**catatan**  
Jika Anda menggunakan GDK CLI versi 1.0.0 pada perangkat Windows, folder komponen dan nama file zip harus berisi hanya huruf kecil.

        Ketika CLI GDK meritsleting folder komponen ke dalam file zip, ia melewatkan file-file berikut:
        + File `gdk-config.json`
        + File resep (`recipe.json`atau`recipe.yaml`)
        + Membangun folder, seperti `greengrass-build`
      + `maven`— Menjalankan `mvn clean package` perintah untuk membangun sumber komponen menjadi artefak. Pilih opsi ini untuk komponen yang menggunakan [Maven](https://maven.apache.org/), seperti komponen Java.

        Pada perangkat Windows, fitur ini tersedia untuk GDK CLI v1.1.0 dan yang lebih baru.
      + `gradle`— Menjalankan `gradle build` perintah untuk membangun sumber komponen menjadi artefak. Pilih opsi ini untuk komponen yang menggunakan [Gradle](https://gradle.org/). Fitur ini tersedia untuk GDK CLI v1.1.0 dan yang lebih baru.

        Sistem `gradle` build mendukung Kotlin DSL sebagai file build. Fitur ini tersedia untuk GDK CLI v1.2.0 dan yang lebih baru.
      + `gradlew`— Menjalankan `gradlew` perintah untuk membangun sumber komponen menjadi artefak. Pilih opsi ini untuk komponen yang menggunakan [Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html).

        Fitur ini tersedia untuk GDK CLI v1.2.0 dan yang lebih baru.
      + `custom`— Menjalankan perintah khusus untuk membangun sumber komponen menjadi resep dan artefak. Tentukan perintah khusus dalam `custom_build_command` parameter.

   1. Jika Anda menentukan `custom` untuk`build_system`, tambahkan `custom_build_command` ke `build` objek. Dalam`custom_build_command`, tentukan satu string atau daftar string, di mana setiap string adalah kata dalam perintah. Misalnya, untuk menjalankan perintah build kustom untuk komponen C\$1\$1, Anda dapat menentukan**["cmake", "--build", "build", "--config", "Release"]**.

   1. <a name="gdk-cli-s3-bucket-name-formation"></a>Jika Anda menggunakan GDK CLI v1.1.0 atau yang lebih baru, Anda dapat menentukan argumen untuk menentukan `--bucket` bucket S3 tempat CLI GDK mengunggah artefak komponen. <a name="gdk-cli-s3-bucket-name-formation-format"></a>Jika Anda tidak menentukan argumen ini, CLI GDK akan mengunggah ke bucket S3 yang namanya, di *bucket* mana *region* dan `bucket-region-accountId` merupakan nilai yang Anda tentukan, *accountId* dan merupakan ID `gdk-config.json` Anda. Akun AWS  CLI GDK membuat bucket jika tidak ada.

      Ubah konfigurasi publikasi untuk komponen. Lakukan hal-hal berikut:

      1. Tentukan nama bucket S3 yang akan digunakan untuk meng-host artefak komponen.

      1. Tentukan Wilayah AWS tempat CLI GDK menerbitkan komponen.

   Ketika Anda selesai dengan langkah ini, `gdk-config.json` file mungkin terlihat mirip dengan contoh berikut.

   ```
   {
     "component": {
       "com.example.PythonHelloWorld": {
         "author": "Amazon",
         "version": "NEXT_PATCH",
         "build": {
           "build_system" : "zip"
         },
         "publish": {
           "bucket": "greengrass-component-artifacts",
           "region": "us-west-2"
         }
       }
     },
     "gdk_version": "1.0.0"
   }
   ```

1. Perbarui file resep komponen, bernama `recipe.yaml` atau`recipe.json`. Lakukan hal-hal berikut:

   1. Jika Anda mengunduh templat atau komponen komunitas yang menggunakan sistem `zip` build, periksa apakah nama artefak zip cocok dengan nama folder komponen. CLI GDK meritsleting folder komponen ke dalam file zip dengan nama yang sama dengan folder komponen. Resep berisi nama artefak zip dalam daftar artefak komponen dan skrip siklus hidup yang menggunakan file dalam artefak zip. Perbarui `Artifacts` dan `Lifecycle` definisi sedemikian rupa sehingga nama file zip cocok dengan nama folder komponen. Contoh resep parsi berikut menyoroti nama file zip dalam `Lifecycle` definisi `Artifacts` dan.

------
#### [ JSON ]

      ```
      {
        ...
        "Manifests": [
          {
            "Platform": {
              "os": "all"
            },
            "Artifacts": [
              {
                "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip",
                "Unarchive": "ZIP"
              }
            ],
            "Lifecycle": {
              "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
            }
          }
        ]
      }
      ```

------
#### [ YAML ]

      ```
      ---
      ...
      Manifests:
        - Platform:
            os: all
          Artifacts:
            - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
              Unarchive: ZIP
          Lifecycle:
            Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
      ```

------

   1. (Opsional) Perbarui deskripsi komponen, konfigurasi default, artefak, skrip siklus hidup, dan dukungan platform. Untuk informasi selengkapnya, lihat [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md).

   Setelah selesai dengan langkah ini, file resep mungkin terlihat mirip dengan contoh berikut.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "{COMPONENT_NAME}",
     "ComponentVersion": "{COMPONENT_VERSION}",
     "ComponentDescription": "This is a simple Hello World component written in Python.",
     "ComponentPublisher": "{COMPONENT_AUTHOR}",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "World"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "all"
         },
         "Artifacts": [
           {
             "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip",
             "Unarchive": "ZIP"
           }
         ],
         "Lifecycle": {
           "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: "2020-01-25"
   ComponentName: "{COMPONENT_NAME}"
   ComponentVersion: "{COMPONENT_VERSION}"
   ComponentDescription: "This is a simple Hello World component written in Python."
   ComponentPublisher: "{COMPONENT_AUTHOR}"
   ComponentConfiguration:
     DefaultConfiguration:
       Message: "World"
   Manifests:
     - Platform:
         os: all
       Artifacts:
         - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
           Unarchive: ZIP
       Lifecycle:
         Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
   ```

------

1. Kembangkan dan bangun komponen Greengrass. Perintah [build komponen](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build) menghasilkan resep dan artefak di `greengrass-build` folder di folder komponen. Jalankan perintah berikut.

   ```
   gdk component build
   ```

Saat Anda siap untuk menguji komponen Anda, gunakan CLI GDK untuk mempublikasikannya ke AWS IoT Greengrass layanan. Kemudian, Anda dapat menerapkan komponen ke perangkat inti Greengrass. Untuk informasi selengkapnya, lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md).

## Buat komponen (perintah shell)
<a name="create-component-shell-commands"></a>

Ikuti petunjuk di bagian ini untuk membuat folder resep dan artefak yang berisi kode sumber dan artefak untuk beberapa komponen.

**Untuk mengembangkan komponen Greengrass (perintah shell)**

1. <a name="create-component-recipes-artifacts-folder-step"></a>Buat folder untuk komponen Anda dengan subfolder untuk resep dan artefak. Jalankan perintah berikut pada perangkat inti Greengrass Anda untuk membuat folder ini dan mengubah ke folder komponen. Ganti *\$1/greengrassv2* atau *%USERPROFILE%\$1greengrassv2* dengan jalur ke folder yang akan digunakan untuk pengembangan lokal.

------
#### [ Linux or Unix ]

   ```
   mkdir -p ~/greengrassv2/{recipes,artifacts}
   cd ~/greengrassv2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir %USERPROFILE%\greengrassv2\\recipes, %USERPROFILE%\greengrassv2\\artifacts
   cd %USERPROFILE%\greengrassv2
   ```

------
#### [ PowerShell ]

   ```
   mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts
   cd ~/greengrassv2
   ```

------

1. <a name="create-component-recipe-file-step"></a>Gunakan editor teks untuk membuat file resep yang mendefinisikan metadata, parameter, dependensi, siklus hidup, dan kemampuan platform komponen Anda. Sertakan versi komponen dalam nama file resep agar Anda dapat mengidentifikasi resep yang mencerminkan versi komponen. Anda dapat memilih format YAML atau JSON untuk resep Anda.

   <a name="nano-command-intro"></a>Misalnya, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file.

------
#### [ JSON ]

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------
**catatan**  
<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/).

1. Tentukan resep untuk komponen Anda. Untuk informasi selengkapnya, lihat [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md).

   Resep Anda mungkin terlihat serupa dengan contoh resep Hello World berikut.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
     - Platform:
         os: windows
       Lifecycle:
         run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
   ```

------

   Resep ini menjalankan skrip Hello World Python, yang mungkin terlihat mirip dengan contoh skrip berikut.

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. Buat folder untuk versi komponen yang akan dikembangkan. Kami merekomendasikan agar Anda menggunakan folder terpisah untuk setiap versi komponen artefak agar Anda dapat mengidentifikasi artefak untuk setiap versi komponen. Jalankan perintah berikut.

------
#### [ Linux or Unix ]

   ```
   mkdir -p artifacts/com.example.HelloWorld/1.0.0
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir artifacts/com.example.HelloWorld/1.0.0
   ```

------
#### [ PowerShell ]

   ```
   mkdir artifacts/com.example.HelloWorld/1.0.0
   ```

------
**penting**  <a name="local-artifact-folder-name-requirements"></a>
Anda harus menggunakan format berikut untuk jalur folder artefak. Sertakan nama komponen dan versi yang Anda tentukan dalam resep.  

   ```
   artifacts/componentName/componentVersion/
   ```

1. Buat artefak untuk komponen Anda di folder yang Anda buat di langkah sebelumnya. Artefak dapat mencakup perangkat lunak, gambar, dan biner lain yang menggunakan komponen Anda.

   Ketika komponen Anda sudah siap, [uji komponen Anda](test-components.md).

# Uji AWS IoT Greengrass komponen dengan penerapan lokal
<a name="test-components"></a>

Jika Anda mengembangkan komponen Greengrass pada perangkat inti, Anda dapat membuat penerapan lokal untuk menginstal dan mengujinya. Ikuti langkah-langkah di bagian ini untuk membuat penyebaran lokal.

Jika Anda mengembangkan komponen pada komputer yang berbeda, seperti komputer pengembangan lokal, Anda tidak dapat membuat penyebaran lokal. Sebagai gantinya, publikasikan komponen ke AWS IoT Greengrass layanan sehingga Anda dapat menerapkannya ke perangkat inti Greengrass untuk mengujinya. Untuk informasi selengkapnya, silakan lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md) dan [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).

**Untuk menguji komponen pada perangkat inti Greengrass**

1. Perangkat inti mencatat peristiwa seperti pembaruan komponen. Anda dapat melihat file log ini untuk menemukan dan memecahkan masalah kesalahan dengan komponen Anda, seperti resep yang tidak valid. Berkas log ini juga menampilkan pesan bahwa komponen Anda mencetak standard out (stdout). Kami sarankan Anda membuka sesi terminal tambahan pada perangkat inti Anda untuk mengamati pesan log baru secara real time. Buka sesi terminal baru, seperti melalui SSH, dan jalankan perintah berikut untuk melihat log. Ganti `/greengrass/v2` dengan jalur ke folder AWS IoT Greengrass root.

------
#### [ Linux or Unix ]

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

------
#### [ PowerShell ]

   ```
   gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
   ```

------

   Anda juga dapat melihat file log untuk komponen Anda.

------
#### [ Linux or Unix ]

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

------
#### [ PowerShell ]

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

1. Dalam sesi terminal asli Anda, jalankan perintah berikut untuk memperbarui perangkat inti dengan komponen Anda. Ganti `/greengrass/v2` dengan path ke folder AWS IoT Greengrass root, dan ganti *\$1/greengrassv2* dengan path ke folder pengembangan lokal Anda.

------
#### [ Linux or Unix ]

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

------
#### [ PowerShell ]

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------
**catatan**  
Anda juga dapat menggunakan perintah `greengrass-cli deployment create` untuk menetapkan nilai parameter konfigurasi komponen Anda. Untuk informasi selengkapnya, lihat [buat](gg-cli-deployment.md#deployment-create).

1. Gunakan `greengrass-cli deployment status` perintah untuk memantau kemajuan penerapan komponen Anda. 

------
#### [ Unix or Linux ]

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment status \
     -i deployment-id
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment status ^
     -i deployment-id
   ```

------
#### [ PowerShell ]

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment status `
     -i deployment-id
   ```

------

1. Uji komponen Anda begitu ia berjalan pada perangkat inti Greengrass. Saat Anda menyelesaikan versi komponen ini, Anda dapat mengunggahnya ke AWS IoT Greengrass layanan. Kemudian, Anda dapat men-deploy komponen ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md).

# Publikasikan komponen untuk diterapkan ke perangkat inti Anda
<a name="publish-components"></a>

Setelah Anda membangun atau menyelesaikan versi komponen, Anda dapat mempublikasikannya ke AWS IoT Greengrass layanan. Kemudian, Anda dapat menerapkannya ke perangkat inti Greengrass.

Jika Anda menggunakan [Greengrass Development Kit CLI (GDK CLI](greengrass-development-kit-cli.md)[) untuk mengembangkan dan membangun komponen, Anda [dapat menggunakan](#publish-component-gdk-cli) CLI GDK untuk](create-components.md) mempublikasikan komponen ke. AWS Cloud Jika tidak, [gunakan perintah shell bawaan dan AWS CLI](#publish-component-shell-commands) untuk mempublikasikan komponen.

Anda juga dapat menggunakan AWS CloudFormation untuk membuat komponen dan AWS sumber daya lainnya dari template. Untuk informasi lebih lanjut, lihat [Apa itu AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) dan [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html) di *Panduan Pengguna AWS CloudFormation *.

**Topics**
+ [Publikasikan komponen (GDK CLI)](#publish-component-gdk-cli)
+ [Publikasikan komponen (perintah shell)](#publish-component-shell-commands)

## Publikasikan komponen (GDK CLI)
<a name="publish-component-gdk-cli"></a>

Ikuti petunjuk di bagian ini untuk mempublikasikan komponen menggunakan CLI GDK. CLI GDK mengunggah artefak build ke bucket S3, memperbarui URIs artefak dalam resep, dan membuat komponen dari resep. Anda menentukan bucket S3 dan Region yang akan digunakan dalam file konfigurasi [CLI GDK](gdk-cli-configuration-file.md).

<a name="gdk-cli-s3-bucket-name-formation"></a>Jika Anda menggunakan GDK CLI v1.1.0 atau yang lebih baru, Anda dapat menentukan argumen untuk menentukan `--bucket` bucket S3 tempat CLI GDK mengunggah artefak komponen. <a name="gdk-cli-s3-bucket-name-formation-format"></a>Jika Anda tidak menentukan argumen ini, CLI GDK akan mengunggah ke bucket S3 yang namanya, di *bucket* mana *region* dan `bucket-region-accountId` merupakan nilai yang Anda tentukan, *accountId* dan merupakan ID `gdk-config.json` Anda. Akun AWS  CLI GDK membuat bucket jika tidak ada.

**penting**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
Peran perangkat inti tidak mengizinkan akses ke bucket S3 secara default. Jika ini pertama kalinya Anda menggunakan bucket S3, Anda harus menambahkan izin ke peran untuk mengizinkan perangkat inti mengambil artefak komponen dari bucket S3 ini. Untuk informasi selengkapnya, lihat [Izinkan akses ke bucket S3 untuk artefak komponen](device-service-role.md#device-service-role-access-s3-bucket).

**Untuk mempublikasikan komponen Greengrass (GDK CLI)**

1. Buka folder komponen di prompt perintah atau terminal.

1. Jika Anda belum melakukannya, buat komponen Greengrass. Perintah [build komponen](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build) menghasilkan resep dan artefak di `greengrass-build` folder di folder komponen. Jalankan perintah berikut.

   ```
   gdk component build
   ```

1. Publikasikan komponen ke AWS Cloud. Perintah [component publish](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish) mengunggah artefak komponen ke Amazon S3 dan memperbarui resep komponen dengan URI masing-masing artefak. Kemudian, itu menciptakan komponen dalam AWS IoT Greengrass layanan.
**catatan**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass menghitung intisari setiap artefak saat Anda membuat komponen. Ini berarti bahwa Anda tidak dapat memodifikasi file artefak dalam bucket S3 Anda setelah Anda membuat komponen. Jika Anda melakukannya, deployment yang mencakup komponen ini akan gagal, karena file digest tidak cocok. Jika Anda mengubah file artefak, Anda harus membuat versi baru komponen.

   Jika Anda menentukan `NEXT_PATCH` versi komponen dalam file konfigurasi CLI GDK, CLI GDK menggunakan versi tambalan berikutnya yang belum ada di layanan. AWS IoT Greengrass 

   Jalankan perintah berikut.

   ```
   gdk component publish
   ```

   Output memberi tahu Anda versi komponen yang dibuat CLI GDK.

   Setelah mempublikasikan komponen, Anda dapat menerapkan komponen ke perangkat inti. Untuk informasi selengkapnya, lihat [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).

## Publikasikan komponen (perintah shell)
<a name="publish-component-shell-commands"></a>

Gunakan prosedur berikut untuk mempublikasikan komponen menggunakan perintah shell dan AWS Command Line Interface (AWS CLI). Ketika Anda mempublikasikan komponen, Anda melakukan hal berikut:

1. Publikasikan artefak komponen ke bucket S3.

1. Tambahkan setiap URI Amazon S3 artefak ke resep komponen.

1. Buat versi komponen AWS IoT Greengrass dari resep komponen.

**catatan**  <a name="component-version-uniqueness-note"></a>
<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.

Anda dapat mengikuti langkah-langkah ini untuk mempublikasikan komponen dari komputer pengembangan Anda atau perangkat inti Greengrass Anda.

**Untuk mempublikasikan komponen (perintah shell)**

1. Jika komponen menggunakan versi yang ada di AWS IoT Greengrass layanan, maka Anda harus mengubah versi komponen. Buka resep dalam editor teks, naikkan versi, dan simpan file. Pilih versi baru yang mencerminkan perubahan yang Anda buat ke komponen.
**catatan**  <a name="semver-note"></a>
<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/).

1. Jika komponen Anda memiliki artefak, lakukan hal berikut:

   1. Publikasikan artefak komponen ke bucket S3 di file Anda. Akun AWS
**Tip**  <a name="artifact-path-tip"></a>
Kami merekomendasikan agar Anda menyertakan nama komponen dan versi di jalur artefak di bucket S3. Skema penamaan ini dapat membantu Anda mempertahankan artefak yang digunakan oleh versi komponen sebelumnya, sehingga Anda dapat terus mendukung versi komponen sebelumnya.

      Jalankan perintah berikut untuk mempublikasikan file artefak ke bucket S3. Ganti amzn-s3-demo-bucket dengan nama bucket, dan ganti *artifacts/com.example.HelloWorld/1.0.0/artifact.py* dengan path ke file artefak.

      ```
      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```
**penting**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
Peran perangkat inti tidak mengizinkan akses ke bucket S3 secara default. Jika ini pertama kalinya Anda menggunakan bucket S3, Anda harus menambahkan izin ke peran untuk mengizinkan perangkat inti mengambil artefak komponen dari bucket S3 ini. Untuk informasi selengkapnya, lihat [Izinkan akses ke bucket S3 untuk artefak komponen](device-service-role.md#device-service-role-access-s3-bucket).

   1. Tambahkan daftar bernama `Artifacts` ke resep komponen jika tidak ada. Daftar `Artifacts` muncul di setiap manifes, yang mendefinisikan persyaratan komponen pada setiap platform yang didukungnya (atau persyaratan default komponen untuk semua platform).

   1. Tambahkan setiap artefak ke daftar artefak, atau perbarui URI artefak yang ada. URI Amazon S3 terdiri atas nama bucket dan path ke objek artefak dalam bucket. Amazon S3 artefak Anda akan URIs terlihat mirip dengan contoh berikut.

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```

   Setelah Anda menyelesaikan langkah ini, resep Anda harus memiliki daftar `Artifacts` yang terlihat seperti berikut ini.

------
#### [ JSON ]

   ```
   {
     ...
     "Manifests": [
       {
         "Lifecycle": {
           ...
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py",
             "Unarchive": "NONE"
           }
         ]
       }
     ]
   }
   ```

**catatan**  
Anda dapat menambahkan `"Unarchive": "ZIP"` opsi untuk artefak ZIP untuk mengonfigurasi perangkat lunak AWS IoT Greengrass Core untuk membuka zip artefak saat komponen digunakan.

------
#### [ YAML ]

   ```
   ...
   Manifests:
     - Lifecycle:
         ...
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py
           Unarchive: NONE
   ```

**catatan**  
Anda dapat menggunakan `Unarchive: ZIP` opsi untuk mengonfigurasi perangkat lunak AWS IoT Greengrass Core untuk membuka zip artefak ZIP saat komponen digunakan. Untuk informasi selengkapnya tentang cara menggunakan artefak ZIP dalam komponen, lihat variabel resep [Artefacts:decompressedPath](component-recipe-reference.md#component-recipe-artifacts-decompressed-path).

------

   Untuk informasi lebih lanjut tentang resep, lihat [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md).

1. Gunakan AWS IoT Greengrass konsol untuk membuat komponen dari file resep.

   Jalankan perintah berikut untuk membuat komponen dari file resep. Perintah ini membuat komponen dan menerbitkannya sebagai AWS IoT Greengrass komponen pribadi di Anda Akun AWS. Ganti *path/to/recipeFile* dengan path ke file resep.

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://path/to/recipeFile
   ```

   Salin `arn` dari respons untuk memeriksa keadaan komponen pada langkah berikutnya.
**catatan**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass menghitung intisari setiap artefak saat Anda membuat komponen. Ini berarti bahwa Anda tidak dapat memodifikasi file artefak dalam bucket S3 Anda setelah Anda membuat komponen. Jika Anda melakukannya, deployment yang mencakup komponen ini akan gagal, karena file digest tidak cocok. Jika Anda mengubah file artefak, Anda harus membuat versi baru komponen.

1. Setiap komponen dalam AWS IoT Greengrass layanan memiliki status. Jalankan perintah berikut untuk mengonfirmasi status versi komponen yang Anda terbitkan dalam prosedur ini. Ganti *com.example.HelloWorld* dan *1.0.0* dengan versi komponen untuk kueri. Ganti `arn` dengan ARN dari langkah sebelumnya.

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

   Operasi ini mengembalikan respons yang berisi metadata komponen. Metadata berisi objek `status` yang berisi keadaan komponen dan kesalahan apa pun, jika berlaku.

   Ketika keadaan komponen adalah `DEPLOYABLE`, Anda dapat men-deploy komponen ke perangkat. Untuk informasi selengkapnya, lihat [Menyebarkan AWS IoT Greengrass komponen ke perangkat](manage-deployments.md).

# Berinteraksi dengan AWS layanan
<a name="interact-with-aws-services"></a>

Perangkat inti Greengrass menggunakan sertifikat X.509 untuk terhubung menggunakan protokol otentikasi timbal balik TLS. AWS IoT Core Sertifikat ini memungkinkan perangkat berinteraksi AWS IoT tanpa AWS kredensyal, yang biasanya terdiri dari ID kunci akses dan kunci akses rahasia. AWS Layanan lain memerlukan AWS kredensyal alih-alih sertifikat X.509 untuk memanggil operasi API di titik akhir layanan. AWS IoT Core memiliki penyedia kredensyal yang memungkinkan perangkat menggunakan sertifikat X.509 mereka untuk mengautentikasi permintaan. AWS Penyedia AWS IoT kredensyal mengautentikasi perangkat menggunakan sertifikat X.509 dan mengeluarkan AWS kredensyal dalam bentuk token keamanan hak istimewa terbatas sementara. Perangkat dapat menggunakan token ini untuk menandatangani dan mengautentikasi permintaan AWS . Ini menghilangkan kebutuhan untuk menyimpan AWS kredensyal pada perangkat inti Greengrass. Untuk informasi selengkapnya, lihat [Mengotorisasi panggilan langsung ke layanan AWS](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) di *Panduan Developer AWS IoT Core *.

Untuk mengambil kredensyal dari, AWS IoT Greengrass, perangkat inti menggunakan alias peran yang menunjuk ke peran AWS IoT IAM. IAM role ini disebut *peran pertukaran token*. Anda membuat alias peran dan peran pertukaran token saat Anda menginstal perangkat lunak AWS IoT Greengrass Core. Untuk menentukan alias peran yang digunakan perangkat inti, konfigurasikan parameter `iotRoleAlias` pada [Inti Greengrass](greengrass-nucleus-component.md).

Penyedia AWS IoT kredensyal mengasumsikan peran pertukaran token atas nama Anda untuk memberikan AWS kredensyal ke perangkat inti. Anda dapat melampirkan kebijakan IAM yang sesuai ke peran ini untuk memungkinkan perangkat inti Anda mengakses AWS sumber daya Anda, seperti artefak komponen di bucket S3. Untuk informasi lebih lanjut tentang cara mengonfigurasi peran pertukaran token, lihat [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md).

Perangkat inti Greengrass AWS menyimpan kredensyal dalam memori, dan kredensialnya kedaluwarsa setelah satu jam secara default. Jika perangkat lunak AWS IoT Greengrass Core dimulai ulang, ia harus mengambil kredensyal lagi. Anda dapat menggunakan [UpdateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateRoleAlias.html)operasi untuk mengonfigurasi durasi kredensialnya valid.

AWS IoT Greengrass menyediakan komponen publik, komponen layanan pertukaran token, yang dapat Anda definisikan sebagai ketergantungan dalam komponen kustom Anda untuk berinteraksi dengan AWS layanan. Layanan pertukaran token menyediakan komponen Anda dengan variabel lingkungan,`AWS_CONTAINER_CREDENTIALS_FULL_URI`, yang mendefinisikan URI ke server lokal yang menyediakan AWS kredensyal. Saat Anda membuat klien AWS SDK, klien memeriksa variabel lingkungan ini dan terhubung ke server lokal untuk mengambil AWS kredensyal dan menggunakannya untuk menandatangani permintaan API. Ini memungkinkan Anda menggunakan AWS SDKs dan alat lain untuk memanggil AWS layanan di komponen Anda. Untuk informasi selengkapnya, lihat [Layanan pertukaran token](token-exchange-service-component.md).

**penting**  <a name="token-exchange-service-aws-sdk-requirement"></a>
Support untuk memperoleh AWS kredensyal dengan cara ini ditambahkan ke AWS SDKs pada tanggal 13 Juli 2016. Komponen Anda harus menggunakan versi AWS SDK yang dibuat pada atau setelah tanggal tersebut. Untuk informasi selengkapnya, lihat [Menggunakan AWS SDK yang didukung](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#task-iam-roles-minimum-sdk) di *Panduan Pengembang Layanan Amazon Elastic Container*.

Untuk memperoleh AWS kredensi dalam komponen kustom Anda, tentukan `aws.greengrass.TokenExchangeService` sebagai dependensi dalam resep komponen. Contoh resep berikut mendefinisikan komponen yang menginstal [boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) dan menjalankan skrip Python yang menggunakan AWS kredensyal dari layanan pertukaran token untuk mencantumkan bucket Amazon S3.

**catatan**  
Untuk menjalankan komponen contoh ini, perangkat Anda harus memiliki izin `s3:ListAllMyBuckets`. Untuk informasi selengkapnya, lihat [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md).

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.ListS3Buckets",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "A component that uses the token exchange service to list S3 buckets.",
  "ComponentPublisher": "Amazon",
  "ComponentDependencies": {
    "aws.greengrass.TokenExchangeService": {
      "VersionRequirement": "^2.0.0",
      "DependencyType": "HARD"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "install": "pip3 install --user boto3",
        "Run": "python3 -u {artifacts:path}/list_s3_buckets.py"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "install": "pip3 install --user boto3",
        "Run": "py -3 -u {artifacts:path}/list_s3_buckets.py"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.ListS3Buckets
ComponentVersion: '1.0.0'
ComponentDescription: A component that uses the token exchange service to list S3 buckets.
ComponentPublisher: Amazon
ComponentDependencies:
  aws.greengrass.TokenExchangeService:
    VersionRequirement: '^2.0.0'
    DependencyType: HARD
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      install:
        pip3 install --user boto3
      Run: |-
        python3 -u {artifacts:path}/list_s3_buckets.py
  - Platform:
      os: windows
    Lifecycle:
      install:
        pip3 install --user boto3
      Run: |-
        py -3 -u {artifacts:path}/list_s3_buckets.py
```

------

Komponen contoh ini menjalankan skrip Python berikut, `list_s3_buckets.py` yang berisi daftar bucket Amazon S3.

```
import boto3
import os

try:
    print("Creating boto3 S3 client...")
    s3 = boto3.client('s3')
    print("Successfully created boto3 S3 client")
except Exception as e:
    print("Failed to create boto3 s3 client. Error: " + str(e))
    exit(1)

try:
    print("Listing S3 buckets...")
    response = s3.list_buckets()
    for bucket in response['Buckets']:
        print(f'\t{bucket["Name"]}')
    print("Successfully listed S3 buckets")
except Exception as e:
    print("Failed to list S3 buckets. Error: " + str(e))
    exit(1)
```

# Jalankan kontainer Docker
<a name="run-docker-container"></a>

Anda dapat mengonfigurasi AWS IoT Greengrass komponen untuk menjalankan wadah [Docker](https://www.docker.com/) dari gambar yang disimpan di lokasi berikut:
+ Repositori gambar publik dan pribadi di Amazon Elastic Container Registry (Amazon ECR)
+ Repositori Hub Docker publik
+ Registri Terpercaya Docker publik
+ Bucket S3

Dalam komponen kustom Anda, sertakan URI gambar Docker sebagai artefak untuk mengambil gambar dan menjalankannya pada perangkat inti. Untuk gambar Amazon ECR dan Hub Docker, Anda dapat menggunakan komponen [Manajer aplikasi Docker](docker-application-manager-component.md) untuk men-download gambar dan mengelola kredensial untuk repositori Amazon ECR privat.

**Topics**
+ [Persyaratan](#run-docker-container-requirements)
+ [Jalankan kontainer Docker dari gambar publik di Amazon ECR atau Docker Hub](#run-docker-container-public-ecr-dockerhub)
+ [Jalankan kontainer Docker dari gambar privat di Amazon ECR](#run-docker-container-private-ecr)
+ [Jalankan kontainer Docker dari gambar di Amazon S3](#run-docker-container-s3)
+ [Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)
+ [Gunakan AWS kredensil dalam komponen wadah Docker (Linux)](#docker-container-token-exchange-service)
+ [Gunakan pengelola aliran di komponen wadah Docker (Linux)](#docker-container-stream-manager)

## Persyaratan
<a name="run-docker-container-requirements"></a>

Untuk menjalankan kontainer Docker dalam komponen, Anda memerlukan hal berikut:
+ Sebuah perangkat inti Greengrass. Jika Anda tidak memilikinya, lihat [Tutorial: Memulai dengan AWS IoT Greengrass V2](getting-started.md).
+ <a name="docker-engine-requirement"></a>[Docker Engine](https://docs.docker.com/engine/) 1.9.1 atau yang lebih baru diinstal pada perangkat inti Greengrass. Versi 20.10 adalah versi terbaru yang diverifikasi untuk bekerja dengan perangkat lunak AWS IoT Greengrass Core. Anda harus menginstal Docker langsung pada perangkat inti sebelum Anda menyebarkan komponen yang menjalankan kontainer Docker.
**Tip**  
Anda juga dapat mengonfigurasi perangkat inti untuk menginstal Docker Engine saat komponen diinstal. Sebagai contoh, script install berikut menginstal Docker Engine sebelum memuat gambar Docker. Skrip install ini bekerja pada distribusi Linux berbasis Debian, seperti Ubuntu. Jika Anda mengonfigurasi komponen untuk menginstal Docker Engine dengan perintah ini, Anda mungkin perlu mengatur `RequiresPrivilege` ke `true` dalam skrip siklus hidup untuk menjalankan instalasi dan perintah. `docker` Untuk informasi selengkapnya, lihat [AWS IoT Greengrass referensi resep komponen](component-recipe-reference.md).  

  ```
  apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/hello-world.tar
  ```
+ <a name="docker-user-permissions-requirement"></a>Pengguna sistem yang menjalankan komponen kontainer Docker harus memiliki izin root atau administrator, atau Anda harus mengonfigurasi Docker untuk menjalankannya sebagai pengguna non-root atau non-admistrator.
  + Pada perangkat Linux, Anda dapat menambahkan pengguna ke `docker` grup untuk memanggil `docker` perintah tanpa`sudo`.
  + Pada perangkat Windows, Anda dapat menambahkan pengguna ke `docker-users` grup untuk memanggil `docker` perintah tanpa hak istimewa adminstrator.

------
#### [ Linux or Unix ]

  Untuk menambahkan`ggc_user`, atau pengguna non-root yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke `docker` grup, jalankan perintah berikut.

  ```
  sudo usermod -aG docker ggc_user
  ```

  Untuk informasi selengkapnya, lihat [Mengelola Docker sebagai pengguna non-root](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).

------
#### [ Windows Command Prompt (CMD) ]

  Untuk menambahkan`ggc_user`, atau pengguna yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke `docker-users` grup, jalankan perintah berikut sebagai administrator.

  ```
  net localgroup docker-users ggc_user /add
  ```

------
#### [ Windows PowerShell ]

  Untuk menambahkan`ggc_user`, atau pengguna yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke `docker-users` grup, jalankan perintah berikut sebagai administrator.

  ```
  Add-LocalGroupMember -Group docker-users -Member ggc_user
  ```

------
+ File diakses oleh komponen kontainer Docker [yang dipasang sebagai volume](https://docs.docker.com/storage/volumes/) dalam kontainer Docker.
+ <a name="docker-proxy-requirement"></a>Jika Anda [mengkonfigurasi perangkat lunak AWS IoT Greengrass Core untuk menggunakan proxy jaringan](configure-greengrass-core-v2.md#configure-alpn-network-proxy), Anda harus [mengkonfigurasi Docker untuk menggunakan server proxy yang sama](https://docs.docker.com/network/proxy/).

Selain persyaratan ini, Anda juga harus memenuhi persyaratan berikut jika hal itu berlaku pada lingkungan Anda:
+ Untuk menggunakan [Docker Compose](https://docs.docker.com/compose/) untuk membuat dan memulai kontainer Docker Anda, instal Docker Compose pada perangkat inti Greengrass Anda, dan upload file Docker Compose ke bucket S3. Anda harus menyimpan file Compose Anda dalam bucket S3 yang sama Akun AWS dan Wilayah AWS sebagai komponen. Untuk contoh yang menggunakan perintah `docker-compose up` dalam komponen kustom, lihat [Jalankan kontainer Docker dari gambar publik di Amazon ECR atau Docker Hub](#run-docker-container-public-ecr-dockerhub).
+ [Jika Anda menjalankan AWS IoT Greengrass di belakang proxy jaringan, konfigurasikan daemon Docker untuk menggunakan server proxy.](https://docs.docker.com/network/proxy/) 
+ Jika gambar Docker Anda disimpan di Amazon ECR atau Docker Hub, sertakan komponen [manajer komponen Docker](docker-application-manager-component.md) sebagai dependensi dalam komponen kontainer Docker Anda. Anda harus memulai daemon Docker pada perangkat inti sebelum Anda men-deploy komponen Anda. 

  Juga, sertakan gambar URIs sebagai artefak komponen. Gambar URIs harus dalam format `docker:registry/image[:tag|@digest]` seperti yang ditunjukkan pada contoh berikut:<a name="docker-image-artifact-uri"></a>
  + Gambar Amazon ECR privat: `docker:account-id.dkr.ecr.region.amazonaws.com/repository/image[:tag|@digest]`
  + Citra Amazon ECR publik: `docker:public.ecr.aws/repository/image[:tag|@digest]`
  + Citra Hub Docker publik: `docker:name[:tag|@digest]`

  Untuk informasi selengkapnya tentang menjalankan kontainer Docker dari gambar yang disimpan di repositori publik, lihat. [Jalankan kontainer Docker dari gambar publik di Amazon ECR atau Docker Hub](#run-docker-container-public-ecr-dockerhub)
+ Jika gambar Docker Anda disimpan dalam repositori privat Amazon ECR, maka Anda harus menyertakan komponen layanan pertukaran token sebagai dependensi dalam komponen kontainer Docker. Juga, [Peran perangkat Greengrass](device-service-role.md) harus mengizinkan tindakan `ecr:GetAuthorizationToken`, `ecr:BatchGetImage`, dan `ecr:GetDownloadUrlForLayer`, seperti yang ditunjukkan dalam contoh kebijakan IAM berikut. 

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": [
          "ecr:GetAuthorizationToken",
          "ecr:BatchGetImage",
          "ecr:GetDownloadUrlForLayer"
        ],
        "Resource": [
          "*"
        ],
        "Effect": "Allow"
      }
    ]
  }
  ```

------

  Untuk informasi tentang cara menjalankan kontainer Docker dari gambar yang disimpan dalam repositori privat Amazon ECR, lihat [Jalankan kontainer Docker dari gambar privat di Amazon ECR](#run-docker-container-private-ecr).
+ Untuk menggunakan gambar Docker yang disimpan dalam repositori pribadi Amazon ECR, repositori pribadi harus sama dengan perangkat inti. Wilayah AWS 
+ Jika citra Docker atau file Compose disimpan dalam bucket S3, [peran perangkat Greengrass](device-service-role.md) harus memungkinkan izin `s3:GetObject` untuk memungkinkan perangkat inti mengunduh citra tersebut sebagai artefak komponen, seperti yang ditunjukkan dalam kebijakan IAM contoh berikut. 

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": [
          "s3:GetObject"
        ],
        "Resource": [
          "*"
        ],
        "Effect": "Allow"
      }
    ]
  }
  ```

------

  Untuk informasi tentang cara menjalankan kontainer Docker dari gambar yang disimpan dalam Amazon S3, lihat [Jalankan kontainer Docker dari gambar di Amazon S3](#run-docker-container-s3).
+ <a name="docker-greengrass-features-requirements"></a>Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager di komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:<a name="docker-greengrass-features-requirements-links"></a>
  + [Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)
  + [Gunakan AWS kredensil dalam komponen wadah Docker (Linux)](#docker-container-token-exchange-service)
  + [Gunakan pengelola aliran di komponen wadah Docker (Linux)](#docker-container-stream-manager)

## Jalankan kontainer Docker dari gambar publik di Amazon ECR atau Docker Hub
<a name="run-docker-container-public-ecr-dockerhub"></a>

Bagian ini menjelaskan bagaimana Anda dapat membuat komponen kustom yang menggunakan Docker Compose untuk menjalankan kontainer Docker dari gambar Docker yang disimpan di Amazon ECR dan Docker Hub.

**Untuk menjalankan kontainer Docker menggunakan Docker Compose**

1. Buat dan unggah file Docker Compose ke bucket Amazon S3. Pastikan bahwa [peran perangkat Greengrass](device-service-role.md) memungkinkan izin `s3:GetObject` untuk mengaktifkan perangkat untuk mengakses file Compose. Contoh file Compose yang ditampilkan dalam contoh berikut mencakup image Amazon CloudWatch Agent dari Amazon ECR dan image MySQL dari Docker Hub.

   ```
   version: "3"
   services:
     cloudwatchagent:
       image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"
     mysql:
       image: "mysql:8.0"
   ```

1. [Buat komponen khusus](create-components.md) di perangkat AWS IoT Greengrass inti Anda. Contoh resep yang ditunjukkan dalam contoh berikut memiliki sifat berikut:
   + Komponen manajer aplikasi Docker sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengunduh gambar dari repositori Amazon ECR dan Docker Hub publik.
   + Artefak komponen yang menentukan gambar Docker dalam repositori Amazon ECR publik.
   + Artefak komponen yang menentukan gambar Docker dalam repositori Docker Hub publik.
   + Komponen artefak yang menentukan file Docker Compose yang mencakup kontainer untuk gambar Docker yang ingin Anda jalankan. 
   + Skrip lifecycle run yang menggunakan [docker-compose up](https://docs.docker.com/compose/reference/up/) untuk membuat dan memulai sebuah kontainer dari citra yang ditentukan.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.MyDockerComposeComponent",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "A component that uses Docker Compose to run images from public Amazon ECR and Docker Hub.",
     "ComponentPublisher": "Amazon",
     "ComponentDependencies": {
       "aws.greengrass.DockerApplicationManager": {
         "VersionRequirement": "~2.0.0"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "all"
         },
         "Lifecycle": {
           "Run": "docker-compose -f {artifacts:path}/docker-compose.yaml up"
         },
         "Artifacts": [
           {
             "URI": "docker:public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"
           },
           {
             "URI": "docker:mysql:8.0"
           },
           {
             "URI": "s3://amzn-s3-demo-bucket/folder/docker-compose.yaml"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.MyDockerComposeComponent
   ComponentVersion: '1.0.0'
   ComponentDescription: 'A component that uses Docker Compose to run images from public Amazon ECR and Docker Hub.'
   ComponentPublisher: Amazon
   ComponentDependencies:
     aws.greengrass.DockerApplicationManager:
       VersionRequirement: ~2.0.0
   Manifests:
     - Platform:
         os: all
       Lifecycle:
           Run: docker-compose -f {artifacts:path}/docker-compose.yaml up
       Artifacts:
         - URI: "docker:public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"
         - URI: "docker:mysql:8.0"
         - URI: "s3://amzn-s3-demo-bucket/folder/docker-compose.yaml"
   ```

------
**catatan**  
<a name="docker-greengrass-features-requirements"></a>Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager di komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:  
[Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)
[Gunakan AWS kredensil dalam komponen wadah Docker (Linux)](#docker-container-token-exchange-service)
[Gunakan pengelola aliran di komponen wadah Docker (Linux)](#docker-container-stream-manager)

1. [Uji komponen](test-components.md) untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.
**penting**  
Anda harus memulai daemon Docker sebelum Anda men-deploy komponen.

   Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah [kontainer docker ls](https://docs.docker.com/engine/reference/commandline/container_ls/) untuk memverifikasi bahwa kontainer Anda berjalan.

   ```
   docker container ls
   ```

1. Saat komponen sudah siap, unggah komponen untuk digunakan AWS IoT Greengrass ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md).

## Jalankan kontainer Docker dari gambar privat di Amazon ECR
<a name="run-docker-container-private-ecr"></a>

Bagian ini menjelaskan bagaimana Anda dapat membuat komponen kustom yang menjalankan kontainer Docker dari gambar Docker yang disimpan dalam repositori privat di Amazon ECR.

**Untuk menjalankan kontainer Docker**

1. [Buat komponen khusus](create-components.md) di perangkat AWS IoT Greengrass inti Anda. Gunakan contoh berikut resep, yang memiliki properti berikut:
   + Komponen manajer aplikasi Docker sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengelola kredensial untuk mengunduh gambar dari repositori privat.
   + Komponen layanan pertukaran token sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengambil AWS kredensil untuk berinteraksi dengan Amazon ECR.
   + Artefak komponen yang menentukan gambar Docker dalam repositori Amazon ECR privat.
   + Skrip lifecycle run yang menggunakan [docker run](https://docs.docker.com/engine/reference/commandline/run/) untuk membuat dan memulai sebuah kontainer dari gambar.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.MyPrivateDockerComponent",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "A component that runs a Docker container from a private Amazon ECR image.",
     "ComponentPublisher": "Amazon",
     "ComponentDependencies": {
       "aws.greengrass.DockerApplicationManager": {
         "VersionRequirement": "~2.0.0"
       },
       "aws.greengrass.TokenExchangeService": {
         "VersionRequirement": "~2.0.0"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "all"
         },
         "Lifecycle": {
           "Run": "docker run account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]"
         },
         "Artifacts": [
           {
             "URI": "docker:account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.MyPrivateDockerComponent
   ComponentVersion: '1.0.0'
   ComponentDescription: 'A component that runs a Docker container from a private Amazon ECR image.'
   ComponentPublisher: Amazon
   ComponentDependencies:
     aws.greengrass.DockerApplicationManager:
       VersionRequirement: ~2.0.0
     aws.greengrass.TokenExchangeService:
       VersionRequirement: ~2.0.0
   Manifests:
     - Platform:
         os: all
       Lifecycle:
           Run: docker run account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]
       Artifacts:
         - URI: "docker:account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]"
   ```

------
**catatan**  
<a name="docker-greengrass-features-requirements"></a>Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager di komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:  
[Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)
[Gunakan AWS kredensil dalam komponen wadah Docker (Linux)](#docker-container-token-exchange-service)
[Gunakan pengelola aliran di komponen wadah Docker (Linux)](#docker-container-stream-manager)

1. [Uji komponen](test-components.md) untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.
**penting**  
Anda harus memulai daemon Docker sebelum Anda men-deploy komponen.

   Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah [kontainer docker ls](https://docs.docker.com/engine/reference/commandline/container_ls/) untuk memverifikasi bahwa kontainer Anda berjalan.

   ```
   docker container ls
   ```

1. Unggah komponen AWS IoT Greengrass untuk disebarkan ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md).

## Jalankan kontainer Docker dari gambar di Amazon S3
<a name="run-docker-container-s3"></a>

Bagian ini menjelaskan bagaimana Anda dapat menjalankan kontainer Docker dalam komponen dari gambar Docker yang disimpan di Amazon S3.

**Jalankan kontainer Docker dalam komponen dari gambar di Amazon S3**

1. Jalankan perintah [docker save](https://docs.docker.com/engine/reference/commandline/save/) untuk membuat cadangan kontainer Docker. Anda menyediakan cadangan ini sebagai artefak komponen untuk menjalankan kontainer pada AWS IoT Greengrass. Ganti *hello-world* dengan nama gambar, dan ganti *hello-world.tar* dengan nama file arsip yang akan dibuat.

   ```
   docker save hello-world > artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
   ```

1. [Buat komponen khusus](create-components.md) di perangkat AWS IoT Greengrass inti Anda. Gunakan contoh resep berikut, yang memiliki properti berikut:
   + Skrip lifecycle install yang menggunakan [docker load](https://docs.docker.com/engine/reference/commandline/load/) untuk memuat gambar Docker dari arsip.
   + Skrip lifecycle run yang menggunakan [docker run](https://docs.docker.com/engine/reference/commandline/run/) untuk membuat dan memulai sebuah kontainer dari gambar. Opsi `--rm` membersihkan kontainer ketika keluar.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.MyS3DockerComponent",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "A component that runs a Docker container from an image in an S3 bucket.",
     "ComponentPublisher": "Amazon",
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "install": {
             "Script": "docker load -i {artifacts:path}/hello-world.tar"
           },
           "Run": {
             "Script": "docker run --rm hello-world"
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.MyS3DockerComponent
   ComponentVersion: '1.0.0'
   ComponentDescription: 'A component that runs a Docker container from an image in an S3 bucket.'
   ComponentPublisher: Amazon
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         install:
           Script: docker load -i {artifacts:path}/hello-world.tar
         Run:
           Script: docker run --rm hello-world
   ```

------
**catatan**  
<a name="docker-greengrass-features-requirements"></a>Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager di komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:  
[Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)
[Gunakan AWS kredensil dalam komponen wadah Docker (Linux)](#docker-container-token-exchange-service)
[Gunakan pengelola aliran di komponen wadah Docker (Linux)](#docker-container-stream-manager)

1. [Uji komponen](test-components.md) untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.

   Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah [kontainer docker ls](https://docs.docker.com/engine/reference/commandline/container_ls/) untuk memverifikasi bahwa kontainer Anda berjalan.

   ```
   docker container ls
   ```

1. Ketika komponen sudah siap, unggah arsip gambar Docker ke bucket S3, dan tambahkan URI ke resep komponen. Kemudian, Anda dapat mengunggah komponen AWS IoT Greengrass untuk menyebarkan ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat [Publikasikan komponen untuk diterapkan ke perangkat inti Anda](publish-components.md).

   Setelah selesai, resep komponen akan terlihat seperti contoh berikut.

------
#### [ JSON ]

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.MyS3DockerComponent",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "A component that runs a Docker container from an image in an S3 bucket.",
     "ComponentPublisher": "Amazon",
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "install": {
             "Script": "docker load -i {artifacts:path}/hello-world.tar"
           },
           "Run": {
             "Script": "docker run --rm hello-world"
           }
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.MyS3DockerComponent
   ComponentVersion: '1.0.0'
   ComponentDescription: 'A component that runs a Docker container from an image in an S3 bucket.'
   ComponentPublisher: Amazon
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         install:
           Script: docker load -i {artifacts:path}/hello-world.tar
         Run:
           Script: docker run --rm hello-world
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
   ```

------

## Gunakan interprocess communication dalam komponen kontainer Docker
<a name="docker-container-ipc"></a>

Anda dapat menggunakan perpustakaan Greengrass interprocess communication (IPC) AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen Greengrass lainnya, dan. AWS IoT Core Untuk informasi selengkapnya, lihat [Gunakan AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT CoreBerkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT Core](interprocess-communication.md).

Untuk menggunakan IPC dalam komponen kontainer Docker, Anda harus menjalankan wadah Docker dengan parameter berikut:
+ Pasang soket IPC di wadah. Inti Greengrass menyediakan jalur file soket IPC dalam variabel lingkungan. `AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT`
+ Atur variabel `SVCUID` dan `AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT` lingkungan ke nilai yang disediakan oleh inti Greengrass ke komponen. Komponen Anda menggunakan variabel lingkungan ini untuk mengautentikasi koneksi ke inti Greengrass.

**Example Contoh resep: Publikasikan pesan MQTT ke (Python) AWS IoT Core**  
Resep berikut mendefinisikan contoh komponen kontainer Docker yang menerbitkan pesan MQTT ke. AWS IoT Core Resep ini memiliki sifat sebagai berikut:  
+ Kebijakan otorisasi (`accessControl`) yang memungkinkan komponen untuk mempublikasikan pesan MQTT pada semua topik. AWS IoT Core Untuk informasi lebih lanjut, lihat [Otorisasi komponen untuk melakukan operasi IPC](interprocess-communication.md#ipc-authorization-policies) dan otorisasi [AWS IoT Core MQTT IPC](ipc-iot-core-mqtt.md#ipc-iot-core-mqtt-authorization).
+ Artefak komponen yang menentukan image Docker sebagai arsip TAR di Amazon S3.
+ Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip TAR.
+ Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah [Docker run](https://docs.docker.com/engine/reference/run/) memiliki argumen berikut:
  + `-v`Argumen memasang soket Greengrass IPC di wadah.
  + Dua `-e` argumen pertama mengatur variabel lingkungan yang diperlukan dalam wadah Docker.
  + `-e`Argumen tambahan mengatur variabel lingkungan yang digunakan oleh contoh ini.
  + `--rm`Argumen membersihkan wadah saat keluar.

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.python.docker.PublishToIoTCore",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Uses interprocess communication to publish an MQTT message to IoT Core.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "topic": "test/topic/java",
      "message": "Hello, World!",
      "qos": "1",
      "accessControl": {
        "aws.greengrass.ipc.mqttproxy": {
          "com.example.python.docker.PublishToIoTCore:pubsub:1": {
            "policyDescription": "Allows access to publish to IoT Core on all topics.",
            "operations": [
              "aws.greengrass#PublishToIoTCore"
            ],
            "resources": [
              "*"
            ]
          }
        }
      }
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "all"
      },
      "Lifecycle": {
        "install": "docker load -i {artifacts:path}/publish-to-iot-core.tar",
        "Run": "docker run -v $AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT:$AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT -e SVCUID -e AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT -e MQTT_TOPIC=\"{configuration:/topic}\" -e MQTT_MESSAGE=\"{configuration:/message}\" -e MQTT_QOS=\"{configuration:/qos}\" --rm publish-to-iot-core"
      },
      "Artifacts": [
        {
          "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar"
        }
      ]
    }
  ]
}
```

```
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.python.docker.PublishToIoTCore
ComponentVersion: 1.0.0
ComponentDescription: Uses interprocess communication to publish an MQTT message to IoT Core.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    topic: 'test/topic/java'
    message: 'Hello, World!'
    qos: '1'
    accessControl:
      aws.greengrass.ipc.mqttproxy:
        'com.example.python.docker.PublishToIoTCore:pubsub:1':
          policyDescription: Allows access to publish to IoT Core on all topics.
          operations:
            - 'aws.greengrass#PublishToIoTCore'
          resources:
            - '*'
Manifests:
  - Platform:
      os: all
    Lifecycle:
      install: 'docker load -i {artifacts:path}/publish-to-iot-core.tar'
      Run: |
        docker run \
          -v $AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT:$AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT \
          -e SVCUID \
          -e AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT \
          -e MQTT_TOPIC="{configuration:/topic}" \
          -e MQTT_MESSAGE="{configuration:/message}" \
          -e MQTT_QOS="{configuration:/qos}" \
          --rm publish-to-iot-core
    Artifacts:
      - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar
```

## Gunakan AWS kredensil dalam komponen wadah Docker (Linux)
<a name="docker-container-token-exchange-service"></a>

Anda dapat menggunakan [komponen layanan pertukaran token untuk berinteraksi dengan AWS layanan di komponen](token-exchange-service-component.md) Greengrass. Komponen ini menyediakan AWS kredensyal dari [peran pertukaran token](device-service-role.md) perangkat inti menggunakan server kontainer lokal. Untuk informasi selengkapnya, lihat [Berinteraksi dengan AWS layanan](interact-with-aws-services.md).

**catatan**  
Contoh di bagian ini hanya berfungsi pada perangkat inti Linux.

Untuk menggunakan AWS kredensyal dari layanan pertukaran token dalam komponen kontainer Docker, Anda harus menjalankan container Docker dengan parameter berikut:
+ Berikan akses ke jaringan host menggunakan `--network=host` argumen. Opsi ini memungkinkan kontainer Docker untuk terhubung ke layanan pertukaran token lokal untuk mengambil kredensyal AWS . Argumen ini hanya berfungsi pada Docker untuk Linux.
**Awas**  <a name="docker-network-host-security-warning"></a>
Opsi ini memberikan akses kontainer ke semua antarmuka jaringan lokal pada host, jadi opsi ini kurang aman daripada jika Anda menjalankan kontainer Docker tanpa akses ini ke jaringan host. Pertimbangkan ini saat Anda mengembangkan dan menjalankan komponen kontainer Docker yang menggunakan opsi ini. Untuk informasi selengkapnya, lihat [Jaringan: host](https://docs.docker.com/engine/reference/run/#network-host) di *Dokumentasi Docker*.
+ Atur variabel `AWS_CONTAINER_CREDENTIALS_FULL_URI` dan `AWS_CONTAINER_AUTHORIZATION_TOKEN` lingkungan ke nilai yang disediakan oleh inti Greengrass ke komponen. AWS SDKs gunakan variabel lingkungan ini untuk mengambil AWS kredensil.

**Example Contoh resep: Daftar bucket S3 dalam komponen wadah Docker (Python)**  
Resep berikut mendefinisikan contoh komponen kontainer Docker yang mencantumkan bucket S3 di bucket Anda. Akun AWS Resep ini memiliki sifat sebagai berikut:  
+ Komponen layanan pertukaran token sebagai dependensi. Ketergantungan ini memungkinkan komponen untuk mengambil AWS kredensi untuk berinteraksi dengan layanan lain. AWS 
+ Artefak komponen yang menentukan image Docker sebagai arsip tar di Amazon S3.
+ Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip TAR.
+ Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah [Docker run](https://docs.docker.com/engine/reference/run/) memiliki argumen berikut:
  + `--network=host`Argumen menyediakan akses kontainer ke jaringan host, sehingga wadah dapat terhubung ke layanan pertukaran token.
  + `-e`Argumen menetapkan variabel lingkungan yang diperlukan dalam wadah Docker.
  + `--rm`Argumen membersihkan wadah saat keluar.

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.python.docker.ListS3Buckets",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Uses the token exchange service to lists your S3 buckets.",
  "ComponentPublisher": "Amazon",
  "ComponentDependencies": {
    "aws.greengrass.TokenExchangeService": {
      "VersionRequirement": "^2.0.0",
      "DependencyType": "HARD"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "install": "docker load -i {artifacts:path}/list-s3-buckets.tar",
        "Run": "docker run --network=host -e AWS_CONTAINER_AUTHORIZATION_TOKEN -e AWS_CONTAINER_CREDENTIALS_FULL_URI --rm list-s3-buckets"
      },
      "Artifacts": [
        {
          "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar"
        }
      ]
    }
  ]
}
```

```
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.python.docker.ListS3Buckets
ComponentVersion: 1.0.0
ComponentDescription: Uses the token exchange service to lists your S3 buckets.
ComponentPublisher: Amazon
ComponentDependencies:
  aws.greengrass.TokenExchangeService:
    VersionRequirement: ^2.0.0
    DependencyType: HARD
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      install: 'docker load -i {artifacts:path}/list-s3-buckets.tar'
      Run: |
        docker run \
          --network=host \
          -e AWS_CONTAINER_AUTHORIZATION_TOKEN \
          -e AWS_CONTAINER_CREDENTIALS_FULL_URI \
          --rm list-s3-buckets
    Artifacts:
      - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar
```

## Gunakan pengelola aliran di komponen wadah Docker (Linux)
<a name="docker-container-stream-manager"></a>

Anda dapat menggunakan [komponen pengelola aliran](stream-manager-component.md) untuk mengelola aliran data di komponen Greengrass. Komponen ini memungkinkan Anda untuk memproses aliran data dan mentransfer data IoT volume tinggi ke file. AWS Cloud AWS IoT Greengrass menyediakan SDK manajer aliran yang Anda gunakan untuk berinteraksi dengan komponen pengelola aliran. Untuk informasi selengkapnya, lihat [Kelola aliran data di perangkat inti Greengrass](manage-data-streams.md).

**catatan**  
Contoh di bagian ini hanya berfungsi pada perangkat inti Linux.

Untuk menggunakan SDK manajer aliran dalam komponen kontainer Docker, Anda harus menjalankan container Docker dengan parameter berikut:
+ Berikan akses ke jaringan host menggunakan `--network=host` argumen. Opsi ini memungkinkan wadah Docker untuk berinteraksi dengan komponen pengelola aliran melalui koneksi TLS lokal. Argumen ini hanya berfungsi pada Docker untuk Linux
**Awas**  <a name="docker-network-host-security-warning"></a>
Opsi ini memberikan akses kontainer ke semua antarmuka jaringan lokal pada host, jadi opsi ini kurang aman daripada jika Anda menjalankan kontainer Docker tanpa akses ini ke jaringan host. Pertimbangkan ini saat Anda mengembangkan dan menjalankan komponen kontainer Docker yang menggunakan opsi ini. Untuk informasi selengkapnya, lihat [Jaringan: host](https://docs.docker.com/engine/reference/run/#network-host) di *Dokumentasi Docker*.
+ Jika Anda mengonfigurasi komponen pengelola aliran agar memerlukan otentikasi, yang merupakan perilaku default, setel variabel `AWS_CONTAINER_CREDENTIALS_FULL_URI` lingkungan ke nilai yang disediakan inti Greengrass ke komponen. Untuk informasi selengkapnya, lihat [konfigurasi manajer aliran](stream-manager-component.md#stream-manager-component-configuration).
+ Jika Anda mengonfigurasi komponen pengelola aliran untuk menggunakan port non-default, gunakan [komunikasi antarproses (IPC)](interprocess-communication.md) untuk mendapatkan port dari konfigurasi komponen manajer aliran. Anda harus menjalankan wadah Docker dengan opsi tambahan untuk menggunakan IPC. Untuk informasi selengkapnya, lihat berikut ini:
  + [Hubungkan ke manajer pengaliran dalam kode aplikasi](use-stream-manager-in-custom-components.md#connect-to-stream-manager)
  + [Gunakan interprocess communication dalam komponen kontainer Docker](#docker-container-ipc)

**Example Contoh resep: Streaming file ke bucket S3 dalam komponen wadah Docker (Python)**  
Resep berikut mendefinisikan contoh komponen kontainer Docker yang membuat file dan mengalirkannya ke bucket S3. Resep ini memiliki sifat sebagai berikut:  
+ Komponen stream manager sebagai dependensi. Ketergantungan ini memungkinkan komponen menggunakan SDK manajer aliran untuk berinteraksi dengan komponen pengelola aliran.
+ Artefak komponen yang menentukan image Docker sebagai arsip TAR di Amazon S3.
+ Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip TAR.
+ Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah [Docker run](https://docs.docker.com/engine/reference/run/) memiliki argumen berikut:
  + `--network=host`Argumen menyediakan akses kontainer ke jaringan host, sehingga kontainer dapat terhubung ke komponen manajer aliran.
  + `-e`Argumen pertama menetapkan variabel `AWS_CONTAINER_AUTHORIZATION_TOKEN` lingkungan yang diperlukan dalam wadah Docker.
  + `-e`Argumen tambahan mengatur variabel lingkungan yang digunakan oleh contoh ini.
  + `-v`Argumen memasang [folder kerja](component-recipe-reference.md#component-recipe-work-path) komponen di wadah. Contoh ini membuat file di folder kerja untuk mengunggah file itu ke Amazon S3 menggunakan pengelola aliran.
  + `--rm`Argumen membersihkan wadah saat keluar.

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.python.docker.StreamFileToS3",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Creates a text file and uses stream manager to stream the file to S3.",
  "ComponentPublisher": "Amazon",
  "ComponentDependencies": {
    "aws.greengrass.StreamManager": {
      "VersionRequirement": "^2.0.0",
      "DependencyType": "HARD"
    }
  },
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "bucketName": ""
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "install": "docker load -i {artifacts:path}/stream-file-to-s3.tar",
        "Run": "docker run --network=host -e AWS_CONTAINER_AUTHORIZATION_TOKEN -e BUCKET_NAME=\"{configuration:/bucketName}\" -e WORK_PATH=\"{work:path}\" -v {work:path}:{work:path} --rm stream-file-to-s3"
      },
      "Artifacts": [
        {
          "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar"
        }
      ]
    }
  ]
}
```

```
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.python.docker.StreamFileToS3
ComponentVersion: 1.0.0
ComponentDescription: Creates a text file and uses stream manager to stream the file to S3.
ComponentPublisher: Amazon
ComponentDependencies:
  aws.greengrass.StreamManager:
    VersionRequirement: ^2.0.0
    DependencyType: HARD
ComponentConfiguration:
  DefaultConfiguration:
    bucketName: ''
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      install: 'docker load -i {artifacts:path}/stream-file-to-s3.tar'
      Run: |
        docker run \
          --network=host \
          -e AWS_CONTAINER_AUTHORIZATION_TOKEN \
          -e BUCKET_NAME="{configuration:/bucketName}" \
          -e WORK_PATH="{work:path}" \
          -v {work:path}:{work:path} \
          --rm stream-file-to-s3
    Artifacts:
      - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar
```

# AWS IoT Greengrass referensi resep komponen
<a name="component-recipe-reference"></a>

Komponen resep adalah file yang mendefinisikan komponen detail, dependensi, artefak, dan siklus hidup. *Siklus aktif* komponen menentukan perintah yang akan dijalankan untuk menginstal, menjalankan, dan menutup komponen, misalnya. AWS IoT Greengrass Inti menggunakan siklus hidup yang Anda tentukan dalam resep untuk menginstal dan menjalankan komponen. AWS IoT Greengrass Layanan menggunakan resep untuk mengidentifikasi dependensi dan artefak untuk diterapkan ke perangkat inti Anda saat Anda menerapkan komponen.

Dalam resep itu, Anda dapat menentukan dependensi dan siklus hidup yang unik untuk setiap platform yang didukung komponen. Anda dapat menggunakan kemampuan ini untuk men-deploy komponen ke perangkat dengan beberapa platform yang memiliki persyaratan yang berbeda. Anda juga dapat menggunakan ini untuk AWS IoT Greengrass mencegah menginstal komponen pada perangkat yang tidak mendukungnya.

Setiap resep berisi daftar *manifes*. Setiap manifes menentukan seperangkat persyaratan platform dan siklus hidup dan artefak yang akan digunakan untuk perangkat inti yang platformnya memenuhi persyaratan tersebut. Perangkat inti menggunakan manifes pertama dengan persyaratan platform yang dipenuhi oleh perangkat. Tentukan manifes tanpa persyaratan platform apa pun agar cocok dengan setiap perangkat inti.

Anda juga dapat menentukan siklus hidup global yang tidak ada dalam manifes. Dalam siklus hidup global, Anda dapat menggunakan *tombol pilihan* yang mengidentifikasi sub-bagian dari siklus hidup. Kemudian, Anda dapat menentukan kunci pilihan ini dalam manifes untuk menggunakan bagian dari siklus hidup global selain siklus hidup manifes. Perangkat inti hanya menggunakan tombol pemilihan manifes jika manifes tidak menentukan siklus hidup. Anda dapat menggunakan pilihan `all` dalam manifes untuk mencocokkan bagian siklus hidup global tanpa kunci seleksi.

Setelah perangkat lunak AWS IoT Greengrass Core memilih manifes yang cocok dengan perangkat inti, perangkat tersebut melakukan hal berikut untuk mengidentifikasi langkah-langkah siklus hidup yang akan digunakan:
+ Jika manifes yang dipilih menentukan siklus hidup, perangkat inti akan menggunakan siklus hidup tersebut.
+ Jika manifes yang dipilih tidak menentukan siklus hidup, perangkat inti akan menggunakan siklus hidup global. Perangkat inti melakukan hal berikut untuk mengidentifikasi bagian siklus hidup global mana yang akan digunakan:
  + Jika manifes mendefinisikan kunci pilihan, perangkat inti akan menggunakan bagian siklus hidup global yang berisi kunci pilihan manifes.
  + Jika manifes tidak mendefinisikan kunci pilihan, perangkat inti akan menggunakan bagian siklus hidup global yang tidak memiliki kunci pilihan. Perilaku ini setara dengan manifes yang menentukan pilihan `all`.

**penting**  <a name="recipe-core-device-manifest-requirement"></a>
Sebuah perangkat inti harus cocok setidaknya dengan satu persyaratan platform manifes untuk menginstal komponen. Jika tidak ada manifes yang cocok dengan perangkat AWS IoT Greengrass inti, maka perangkat lunak Core tidak menginstal komponen dan penerapan gagal.

Anda bisa menentukan resep dalam format [JSON](https://en.wikipedia.org/wiki/JSON) atau [YAML](https://en.wikipedia.org/wiki/YAML). Bagian contoh resep mencakup resep dalam setiap format.

**Topics**
+ [Validasi resep](#recipe-validation)
+ [Format resep](#recipe-format)
+ [Variabel resep](#recipe-variables)
+ [Contoh resep](#recipe-examples)

## Validasi resep
<a name="recipe-validation"></a>

Greengrass memvalidasi resep komponen JSON atau YAMAL saat membuat versi komponen. Validasi resep ini memeriksa resep komponen JSON atau YAMG Anda untuk kesalahan umum untuk mencegah potensi masalah penerapan. Validasi memeriksa resep untuk kesalahan umum (misalnya, koma, tanda kurung gigi, dan bidang yang hilang) dan untuk memastikan resepnya terbentuk dengan baik.

Jika Anda menerima pesan kesalahan validasi resep, periksa resep Anda apakah ada koma, tanda kurung gigi, atau bidang yang hilang. Verifikasi bahwa Anda tidak melewatkan bidang apa pun dengan melihat [format resep](#recipe-format).

## Format resep
<a name="recipe-format"></a>

Bila Anda menentukan resep untuk komponen, Anda menentukan informasi berikut dalam dokumen resep. Struktur yang sama berlaku untuk resep dalam format YAML dan JSON.

`RecipeFormatVersion`  
Versi templat untuk resep itu. Pilih opsi berikut:  
+ `2020-01-25`

`ComponentName`  
Nama komponen yang ditentukan oleh resep ini. Nama komponen harus unik di Anda Akun AWS di setiap Wilayah.  
**Kiat**  
+ Gunakan format nama domain terbalik untuk menghindari tabrakan nama dalam perusahaan Anda. Misalnya, jika perusahaan Anda memiliki `example.com` dan Anda mengerjakan proyek energi matahari, Anda dapat menamai komponen Hello World Anda `com.example.solar.HelloWorld`. Hal ini membantu menghindari tabrakan nama komponen dalam perusahaan Anda.
+ Hindari awalan `aws.greengrass` dalam nama komponen Anda. AWS IoT Greengrass menggunakan awalan ini untuk [Komponen publik](public-components.md) yang disediakannya. Jika Anda memilih nama yang sama sebagai komponen publik, komponen Anda menggantikan komponen tersebut. Kemudian, AWS IoT Greengrass sediakan komponen Anda alih-alih komponen publik saat menyebarkan komponen dengan ketergantungan pada komponen publik tersebut. Fitur ini memungkinkan Anda untuk menimpa perilaku komponen publik, tetapi juga dapat merusak komponen lain jika Anda tidak berniat untuk menimpa komponen publik.

`ComponentVersion`  
Versi komponen. Nilai maksimum untuk nilai mayor, minor, dan patch adalah 999999.  
<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/).

`ComponentDescription`  
(Opsional) Deskripsi komponen.

`ComponentPublisher`  
Penerbit atau penulis komponen.

`ComponentConfiguration`  
(Opsional) Sebuah objek yang menentukan konfigurasi atau parameter untuk komponen. Anda menentukan konfigurasi default, dan kemudian ketika Anda men-deploy komponen, Anda dapat menentukan objek konfigurasi yang akan disediakan ke komponen. Konfigurasi komponen mendukung parameter bersusun dan struktur. Objek ini berisi informasi berikut:    
`DefaultConfiguration`  
Objek yang menentukan konfigurasi default untuk komponen. Anda menentukan struktur objek ini.  
<a name="configuration-value-type-note"></a>AWS IoT Greengrass menggunakan JSON untuk nilai konfigurasi. JSON menentukan jenis nomor tetapi tidak membedakan antara bilangan bulat dan float. Akibatnya, nilai konfigurasi mungkin berubah menjadi float di AWS IoT Greengrass. Untuk memastikan bahwa komponen Anda menggunakan jenis data yang benar, kami sarankan Anda menentukan nilai konfigurasi numerik sebagai string. Kemudian, buat komponen Anda mengurainya sebagai bilangan bulat atau float. Hal ini memastikan bahwa nilai konfigurasi Anda memiliki tipe yang sama dalam konfigurasi dan pada perangkat inti Anda.

`ComponentDependencies`  <a name="recipe-reference-component-dependencies"></a>
(Opsional) Sebuah kamus objek yang masing-masing mendefinisikan dependensi komponen untuk komponen tersebut. Kunci untuk setiap objek mengidentifikasi nama ketergantungan komponen. AWS IoT Greengrass menginstal dependensi komponen saat komponen diinstal. AWS IoT Greengrass menunggu dependensi dimulai sebelum memulai komponen. Setiap objek berisi informasi berikut.    
`VersionRequirement`  
Kendala versi semantik npm-style yang menentukan versi komponen yang kompatibel untuk dependensi ini. Anda dapat menentukan versi atau rentang versi. Untuk informasi lebih lanjut, lihat [kalkulator versi semantik npm](https://semver.npmjs.com/).  
`DependencyType`  
(Opsional) Jenis dependensi ini. Pilih salah satu dari opsi berikut:  
+ `SOFT` — Komponen tidak me-restart jika dependensi mengubah keadaan.
+ `HARD` — Komponen me-restart jika dependensi mengubah keadaan.
Default ke `HARD`.

`ComponentType`  
(Opsional) Jenis komponen.  
Kami tidak menyarankan Anda menentukan jenis komponen dalam resep. AWS IoT Greengrass menetapkan tipe untuk Anda saat Anda membuat komponen.
Jenis ini dapat berupa salah satu dari jenis-jenis berikut:  
+ `aws.greengrass.generic` — Komponen menjalankan perintah atau menyediakan artefak.
+ `aws.greengrass.lambda` – Komponen menjalankan fungsi Lambda menggunakan [Komponen peluncur Lambda](lambda-launcher-component.md). Parameter `ComponentSource` menentukan ARN fungsi Lambda yang dijalankan oleh komponen ini.

  Kami tidak menyarankan Anda menggunakan opsi ini, karena opsi ini diatur oleh AWS IoT Greengrass saat Anda membuat komponen dari fungsi Lambda. Untuk informasi selengkapnya, lihat [Jalankan AWS Lambda fungsi](run-lambda-functions.md).
+ `aws.greengrass.plugin` – Komponen ini berjalan pada komponen plugin dalam Java Virtual Machine (JVM) yang sama seperti inti Greengrass. Jika Anda men-deploy atau me-restart komponen plugin, inti Greengrass akan me-restart.

  Komponen plugin menggunakan file log yang sama seperti inti Greengrass. Untuk informasi selengkapnya, lihat [Memantau AWS IoT Greengrass log](monitor-logs.md).

  Kami tidak menyarankan Anda menggunakan opsi ini dalam resep komponen, karena ini ditujukan untuk komponen yang AWS disediakan yang ditulis di Java yang secara langsung berinteraksi dengan inti Greengrass. Untuk informasi lebih lanjut tentang komponen publik mana yang merupakan plugin, lihat [Komponen yang disediakan oleh AWS](public-components.md).
+ `aws.greengrass.nucleus` — Komponen nukleus. Untuk informasi selengkapnya, lihat [Inti Greengrass](greengrass-nucleus-component.md).

  Kami tidak menyarankan Anda menggunakan opsi ini dalam resep komponen. Opsi ini ditujukan untuk komponen inti Greengrass, yang menyediakan fungsionalitas minimum perangkat lunak inti AWS IoT Greengrass .
Default-nya adalah `aws.greengrass.generic` saat Anda membuat komponen dari resep, atau `aws.greengrass.lambda` saat Anda membuat komponen dari fungsi Lambda.  
Untuk informasi selengkapnya, lihat [Jenis komponen](develop-greengrass-components.md#component-types).

`ComponentSource`  
(Opsional) ARN fungsi Lambda yang dijalankan komponen.  
Kami tidak menyarankan Anda menentukan sumber komponen dalam resep. AWS IoT Greengrass menetapkan parameter ini untuk Anda saat Anda membuat komponen dari fungsi Lambda. Untuk informasi selengkapnya, lihat [Jalankan AWS Lambda fungsi](run-lambda-functions.md).

  `Manifests`   
Daftar objek yang masing-masing menentukan siklus hidup, parameter, dan persyaratan komponen untuk platform. Jika perangkat inti cocok dengan persyaratan platform beberapa manifes, AWS IoT Greengrass gunakan manifes pertama yang cocok dengan perangkat inti. Untuk memastikan bahwa perangkat inti menggunakan manifes yang benar, tentukan manifes dengan persyaratan platform ketat terlebih dahulu. Manifes yang berlaku untuk semua platform harus menjadi manifes terakhir dalam daftar.  
Sebuah perangkat inti harus cocok setidaknya dengan satu persyaratan platform manifes untuk menginstal komponen. Jika tidak ada manifes yang cocok dengan perangkat AWS IoT Greengrass inti, maka perangkat lunak Core tidak menginstal komponen dan penerapan gagal.
Setiap objek berisi informasi berikut:    
`Name`  
(Opsional) Nama yang bersahabat untuk platform yang ditentukan leh manifes ini.  
Jika Anda menghilangkan parameter ini, AWS IoT Greengrass buat nama dari platform `os` dan`architecture`.  
  `Platform`   
(Opsional) Sebuah objek yang menentukan platform yang padanya manifes ini berlaku. Hilangkan parameter ini untuk menentukan manifes yang berlaku untuk semua platform.  
Objek ini menentukan pasangan kunci-nilai tentang platform di mana perangkat inti berjalan. Saat Anda menerapkan komponen ini, perangkat lunak AWS IoT Greengrass Core membandingkan pasangan nilai kunci ini dengan atribut platform pada perangkat inti. Perangkat lunak AWS IoT Greengrass Core selalu mendefinisikan `os` dan`architecture`, dan mungkin mendefinisikan atribut tambahan. Anda dapat menentukan atribut platform kustom untuk perangkat inti ketika Anda men-deploy komponen inti Greengrass. 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).  
Untuk setiap pasangan kunci-nilai, Anda dapat menentukan salah satu nilai berikut:  
+ Nilai yang tepat, seperti `linux` atau`windows`. Nilai yang tepat harus dimulai dengan huruf atau angka.
+ `*`, yang cocok dengan nilai apa pun. Hal ini juga cocok ketika nilai tidak ada.
+ Sebuah ekspresi reguler gaya Java, seperti `/windows|linux/`. Ekspresi reguler harus dimulai dan diakhiri dengan karakter garis miring (`/`). Misalnya, ekspresi reguler `/.+/` cocok dengan nilai non-kosong.
Objek ini berisi informasi berikut:    
`runtime`  
Runtime [inti Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/how-it-works.html#concept-overview) untuk platform yang didukung manifes ini. Saat mendefinisikan beberapa manifes dengan platform`runtime`, Nilai runtime yang didukung dalam resep adalah `aws_nucleus_lite` dan `*` hanya. Untuk menargetkan perangkat klasik, bidang runtime TIDAK HARUS ditentukan dalam resep. Runtime Greengrass Nucleus yang didukung mencakup nilai-nilai berikut:  
+ `*`
+ `aws_nucleus_lite`  
`os`  
(Opsional) Nama sistem operasi untuk platform yang didukung oleh manifes ini. Platform umum mencakup nilai-nilai berikut:  
+ `linux`
+ `windows`
+ `darwin` (macOS)  
`architecture`  
(Opsional) Arsitektur prosesor untuk platform yang didukung oleh manifes ini. Arsitektur umum mencakup nilai-nilai berikut:  
+ `amd64`
+ `arm`
+ `aarch64`
+ `x86`  
`architecture.detail`  
(Opsional) Detail arsitektur prosesor untuk platform yang didukung manifes ini. Rincian arsitektur umum mencakup nilai-nilai berikut:  
+ `arm61`
+ `arm71`
+ `arm81`  
`key`  
(Opsional) Atribut platform yang Anda tetapkan untuk manifes ini. Ganti *Key* dengan nama atribut platform. Perangkat lunak AWS IoT Greengrass Core mencocokkan atribut platform ini dengan pasangan kunci-nilai yang Anda tentukan dalam konfigurasi komponen inti Greengrass. 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).  
Gunakan format nama domain terbalik untuk menghindari tabrakan nama dalam perusahaan Anda. Misalnya, jika perusahaan Anda memiliki `example.com` dan Anda mengerjakan proyek radio, Anda dapat memberi nama atribut platform kustom `com.example.radio.RadioModule`. Hal ini membantu menghindari tabrakan nama atribut platform dalam perusahaan Anda.
Misalnya, Anda dapat menentukan atribut platform, `com.example.radio.RadioModule`, untuk menentukan manifes yang berbeda berdasarkan modul radio yang tersedia pada perangkat inti. Setiap manifes dapat mencakup artefak yang berbeda yang berlaku pada konfigurasi perangkat keras yang berbeda, agar Anda men-deploy serangkaian perangkat lunak minimal ke perangkat inti.  
  `Lifecycle`   
Objek atau string yang mendefinisikan cara menginstal dan menjalankan komponen pada platform yang didefinisikan oleh manifes ini. Anda juga dapat menentukan [siklus hidup global](#global-lifecycle-definition) yang berlaku untuk semua platform. Perangkat inti hanya menggunakan siklus hidup global jika manifes yang akan digunakan tidak menentukan siklus hidup.  
Anda mendefinisikan siklus hidup ini dalam manifes. Langkah-langkah siklus hidup yang Anda tentukan di sini hanya berlaku untuk platform yang ditentukan oleh manifes ini. Anda juga dapat menentukan [siklus hidup global](#global-lifecycle-definition) yang berlaku untuk semua platform.
Objek atau string ini berisi informasi berikut:    
  `Setenv`   
(Opsional) Kamus variabel lingkungan untuk menyediakan semua skrip siklus hidup. Anda dapat mengganti variabel lingkungan ini dengan `Setenv` dalam setiap skrip siklus hidup.  
  `install`   
(Opsional) Objek atau string yang mendefinisikan skrip untuk dijalankan ketika komponen diinstal. Perangkat lunak AWS IoT Greengrass Core juga menjalankan langkah siklus hidup ini setiap kali perangkat lunak diluncurkan.  
Jika skrip `install` keluar dengan kode sukses, komponen tersebut akan memasuki keadaan `INSTALLED`.  
Objek atau string ini berisi informasi berikut:    
`Script`  <a name="recipe-lifecycle-script"></a>
Skrip yang akan dijalankan.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(Opsional) Periksa untuk menentukan apakah akan menjalankan skrip atau tidak. Anda dapat menentukan untuk memeriksa apakah executable berada di jalur atau apakah file ada. Jika outputnya benar, maka perangkat lunak AWS IoT Greengrass Core melewatkan langkahnya. Pilih salah satu cek berikut:  
+ `onpath runnable` — Periksa apakah runnable berada di jalur sistem. Misalnya, gunakan **onpath python3** untuk melewati langkah siklus hidup ini jika Python 3 tersedia.
+ `exists file` — Periksa apakah file ada. Misalnya, gunakan **exists /tmp/my-configuration.db** untuk melewati langkah siklus hidup ini jika `/tmp/my-configuration.db` ada.  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(Opsional) Jumlah maksimum waktu dalam detik yang dapat dijalankan skrip sebelum perangkat lunak inti AWS IoT Greengrass mengakhiri proses.  
Default: 120 detik.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `run`   
(Opsional) Objek atau string yang mendefinisikan skrip untuk dijalankan ketika komponen dimulai.  
Komponen memasuki keadaan `RUNNING` saat langkah siklus hidup ini berjalan. Jika skrip `run` keluar dengan kode sukses, komponen tersebut akan memasuki keadaan `STOPPING`. Jika `shutdown` skrip ditentukan, itu berjalan; jika tidak komponen memasuki `FINISHED` status.  
Komponen yang bergantung pada komponen ini dimulai saat langkah siklus hidup ini berjalan. Untuk menjalankan proses latar belakang, seperti layanan yang digunakan komponen dependen, gunakan langkah siklus hidup `startup` sebagai gantinya.  
Saat Anda menerapkan komponen dengan `run` siklus hidup, perangkat inti dapat melaporkan penerapan selengkap segera setelah skrip siklus hidup ini berjalan. Akibatnya, penerapan dapat selesai dan berhasil bahkan jika skrip `run` siklus hidup gagal segera setelah dijalankan. Jika Anda ingin status penerapan bergantung pada hasil skrip awal komponen, gunakan langkah `startup` siklus hidup sebagai gantinya.  
Anda dapat menentukan hanya satu `startup` atau `run` siklus hidup.
Objek atau string ini berisi informasi berikut:    
`Script`  <a name="recipe-lifecycle-script"></a>
Skrip yang akan dijalankan.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(Opsional) Periksa untuk menentukan apakah akan menjalankan skrip atau tidak. Anda dapat menentukan untuk memeriksa apakah executable berada di jalur atau apakah file ada. Jika output benar, maka Perangkat lunak inti AWS IoT Greengrass melewati langkah itu. Pilih salah satu cek berikut:  
+ `onpath runnable` — Periksa apakah runnable berada di jalur sistem. Misalnya, gunakan **onpath python3** untuk melewati langkah siklus hidup ini jika Python 3 tersedia.
+ `exists file` — Periksa apakah file ada. Misalnya, gunakan **exists /tmp/my-configuration.db** untuk melewati langkah siklus hidup ini jika `/tmp/my-configuration.db` ada.  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(Opsional) Jumlah waktu maksimum dalam hitungan detik skrip dapat dijalankan sebelum perangkat lunak AWS IoT Greengrass Inti menghentikan proses.  
Langkah siklus hidup ini tidak berbatas waktu secara default. Jika Anda menghilangkan batas waktu ini, skrip `run` akan berjalan sampai skrip tersebut keluar.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `startup`   
(Opsional) Objek atau string yang mendefinisikan proses latar belakang untuk dijalankan ketika komponen dimulai.  
Gunakan `startup` untuk menjalankan perintah yang harus keluar dengan sukses atau memperbarui status komponen `RUNNING` sebelum komponen dependen dapat dimulai. Gunakan operasi [UpdateState](ipc-component-lifecycle.md#ipc-operation-updatestate)IPC untuk mengatur status komponen ke `RUNNING` atau `ERRORED` ketika komponen memulai skrip yang tidak keluar. Misalnya, Anda dapat menentukan langkah `startup` yang memulai proses MySQL dengan `/etc/init.d/mysqld start`.  
Komponen memasuki keadaan `STARTING` saat langkah siklus hidup ini berjalan. Jika skrip `startup` keluar dengan kode sukses, komponen tersebut akan memasuki keadaan `RUNNING`. Kemudian, komponen dependen bisa dimulai.  
Saat Anda menerapkan komponen dengan `startup` siklus hidup, perangkat inti dapat melaporkan penerapan sebagai selesai setelah skrip siklus hidup ini keluar atau melaporkan statusnya. Dengan kata lain, status penerapan adalah `IN_PROGRESS` sampai semua skrip startup komponen keluar atau melaporkan status.  
Anda dapat menentukan hanya satu `startup` atau `run` siklus hidup.
Objek atau string ini berisi informasi berikut:    
`Script`  <a name="recipe-lifecycle-script"></a>
Skrip yang akan dijalankan.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(Opsional) Periksa untuk menentukan apakah akan menjalankan skrip atau tidak. Anda dapat menentukan untuk memeriksa apakah executable berada di jalur atau apakah file ada. Jika output benar, maka Perangkat lunak inti AWS IoT Greengrass melewati langkah itu. Pilih salah satu cek berikut:  
+ `onpath runnable` — Periksa apakah runnable berada di jalur sistem. Misalnya, gunakan **onpath python3** untuk melewati langkah siklus hidup ini jika Python 3 tersedia.
+ `exists file` — Periksa apakah file ada. Misalnya, gunakan **exists /tmp/my-configuration.db** untuk melewati langkah siklus hidup ini jika `/tmp/my-configuration.db` ada.  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(Opsional) Jumlah maksimum waktu dalam detik yang dapat dijalankan skrip sebelum perangkat lunak inti AWS IoT Greengrass mengakhiri proses.  
Default: 120 detik.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `shutdown`   
(Opsional) Objek atau string yang mendefinisikan skrip untuk dijalankan ketika komponen dimatikan. Gunakan siklus hidup shutdown untuk mengeksekusi kode yang ingin Anda jalankan saat komponen dalam status. `STOPPING` Siklus hidup shutdown dapat digunakan untuk menghentikan proses yang dimulai oleh skrip atau. `startup` `run`  
Jika Anda memulai proses latar belakang di `startup`, gunakan langkah `shutdown` untuk menghentikan proses itu ketika komponen dimatikan. Misalnya, Anda dapat menentukan langkah `shutdown` yang menghentikan proses MySQL dengan `/etc/init.d/mysqld stop`.  
`shutdown`Skrip berjalan setelah komponen memasuki `STOPPING` status. Jika skrip berhasil diselesaikan, komponen memasuki `FINISHED` status.  
Objek atau string ini berisi informasi berikut:    
`Script`  <a name="recipe-lifecycle-script"></a>
Skrip yang akan dijalankan.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(Opsional) Periksa untuk menentukan apakah akan menjalankan skrip atau tidak. Anda dapat menentukan untuk memeriksa apakah executable berada di jalur atau apakah file ada. Jika output benar, maka Perangkat lunak inti AWS IoT Greengrass melewati langkah itu. Pilih salah satu cek berikut:  
+ `onpath runnable` — Periksa apakah runnable berada di jalur sistem. Misalnya, gunakan **onpath python3** untuk melewati langkah siklus hidup ini jika Python 3 tersedia.
+ `exists file` — Periksa apakah file ada. Misalnya, gunakan **exists /tmp/my-configuration.db** untuk melewati langkah siklus hidup ini jika `/tmp/my-configuration.db` ada.  
`Timeout`  
(Opsional) Jumlah waktu maksimum dalam hitungan detik skrip dapat dijalankan sebelum perangkat lunak AWS IoT Greengrass Inti menghentikan proses.  
Default: 15 detik.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `recover`   
(Opsional) Objek atau string yang mendefinisikan skrip untuk dijalankan ketika komponen mengalami kesalahan.  
Langkah ini berjalan ketika komponen memasuki keadaan `ERRORED`. Jika komponen tersebut memasuki keadaan `ERRORED` tiga kali tanpa berhasil pulih, komponen tersebut akan berubah ke keadaan `BROKEN`. Untuk memperbaiki komponen `BROKEN`, Anda harus men-deploy komponen itu lagi.  
Objek atau string ini berisi informasi berikut:    
`Script`  <a name="recipe-lifecycle-script"></a>
Skrip yang akan dijalankan.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Skipif`  <a name="recipe-lifecycle-skipif"></a>
(Opsional) Periksa untuk menentukan apakah akan menjalankan skrip atau tidak. Anda dapat menentukan untuk memeriksa apakah executable berada di jalur atau apakah file ada. Jika output benar, maka Perangkat lunak inti AWS IoT Greengrass melewati langkah itu. Pilih salah satu cek berikut:  
+ `onpath runnable` — Periksa apakah runnable berada di jalur sistem. Misalnya, gunakan **onpath python3** untuk melewati langkah siklus hidup ini jika Python 3 tersedia.
+ `exists file` — Periksa apakah file ada. Misalnya, gunakan **exists /tmp/my-configuration.db** untuk melewati langkah siklus hidup ini jika `/tmp/my-configuration.db` ada.  
`Timeout`  
(Opsional) Jumlah waktu maksimum dalam hitungan detik skrip dapat dijalankan sebelum perangkat lunak AWS IoT Greengrass Inti menghentikan proses.  
Default: 60 detik.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `bootstrap`   
(Opsional) Objek atau string yang mendefinisikan skrip yang memerlukan perangkat lunak AWS IoT Greengrass inti atau perangkat inti untuk memulai ulang. Hal ini memungkinkan Anda mengembangkan komponen yang melakukan restart setelah menginstal pembaruan sistem operasi atau pembaruan waktu aktif, misalnya.  
Untuk menginstal pembaruan atau dependensi yang tidak memerlukan perangkat lunak atau perangkat AWS IoT Greengrass inti untuk memulai ulang, gunakan siklus hidup [penginstalan](#install-lifecycle-definition).
Langkah siklus hidup ini berjalan sebelum langkah siklus hidup penginstalan dalam kasus berikut ketika perangkat lunak AWS IoT Greengrass Core menyebarkan komponen:  
+ Komponen men-deploy ke perangkat inti untuk pertama kalinya.
+ Versi komponen berubah.
+ Bootstrap script berubah sebagai hasil dari pembaruan konfigurasi komponen.
Setelah perangkat lunak AWS IoT Greengrass Core menyelesaikan langkah bootstrap untuk semua komponen yang memiliki langkah bootstrap dalam penerapan, perangkat lunak dimulai ulang.  
Anda harus mengkonfigurasi perangkat lunak AWS IoT Greengrass Core sebagai layanan sistem untuk memulai ulang perangkat lunak AWS IoT Greengrass Core atau perangkat inti. Jika Anda tidak mengonfigurasi perangkat lunak AWS IoT Greengrass Core sebagai layanan sistem, perangkat lunak tidak akan dimulai ulang. Untuk informasi selengkapnya, lihat [Konfigurasikan inti Greengrass sebagai layanan sistem](configure-greengrass-core-v2.md#configure-system-service).
Objek atau string ini berisi informasi berikut:    
`BootstrapOnRollback`  
Ketika fitur ini diaktifkan, hanya `BootstrapOnRollback` akan berjalan untuk komponen yang telah menyelesaikan atau mencoba menjalankan langkah-langkah siklus hidup bootstrap sebagai bagian dari penerapan target yang gagal. Fitur ini tersedia untuk Greengrass nucleus versi 2.12.0 dan yang lebih baru.
(Opsional) Anda dapat menjalankan langkah-langkah siklus hidup bootstrap sebagai bagian dari penerapan rollback. Jika Anda menyetel opsi ini`true`, langkah-langkah siklus hidup bootstrap yang ditentukan dalam penerapan rollback akan berjalan. Ketika penerapan gagal, versi sebelumnya dari siklus hidup bootstrap komponen akan berjalan lagi selama penerapan rollback.  
Default ke `false`.  
`Script`  
Skrip yang akan dijalankan. Kode keluar dari skrip ini mendefinisikan instruksi restart. Gunakan kode keluar berikut:  
+ `0`— Jangan me-restart perangkat lunak AWS IoT Greengrass Core atau perangkat inti. Perangkat lunak AWS IoT Greengrass Core masih restart setelah semua komponen bootstrap.
+ `100`— Permintaan untuk me-restart perangkat lunak AWS IoT Greengrass Core.
+ `101` — Permintaan untuk me-restart perangkat inti.
Kode keluar 100 sampai 199 dicadangkan untuk perilaku khusus. Kode keluar lainnya mewakili kesalahan skrip.  
`RequiresPrivilege`  <a name="recipe-lifecycle-requiresprivilege"></a>
(Opsional) Anda dapat menjalankan skrip dengan hak istimewa root. Jika Anda menyetel opsi ini`true`, maka perangkat lunak AWS IoT Greengrass Core menjalankan skrip siklus hidup ini sebagai root, bukan sebagai pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini. Default ke `false`.  
`Timeout`  <a name="recipe-lifecycle-timeout"></a>
(Opsional) Jumlah maksimum waktu dalam detik yang dapat dijalankan skrip sebelum perangkat lunak inti AWS IoT Greengrass mengakhiri proses.  
Default: 120 detik.  
`Setenv`  <a name="recipe-lifecycle-environment"></a>
(Opsional) Kamus variabel lingkungan untuk menyediakan skrip. Variabel lingkungan ini menimpa variabel yang Anda berikan di `Lifecycle.Setenv`.  
  `Selections`   
(Opsional) Daftar kunci pilihan yang menentukan bagian [Siklus hidup global](#global-lifecycle-definition) yang akan dijalankan untuk manifes ini. Dalam siklus hidup global, Anda dapat menentukan langkah-langkah siklus hidup dengan kunci pilihan pada tingkat mana pun untuk memilih sub-bagian dari siklus hidup. Kemudian, perangkat inti menggunakan bagian-bagian yang cocok dengan kunci pilihan dalam manifes ini. Untuk informasi lebih lanjut, lihat bagian [contoh siklus hidup global](#global-lifecycle-definition).  
Perangkat inti hanya menggunakan siklus hidup global hanya jika manifes ini tidak menentukan siklus hidup.
Anda dapat menentukan kunci pilihan `all` untuk menjalankan bagian dari siklus hidup global yang tidak memiliki kunci pilihan.  
  `Artifacts`   
(Opsional) Daftar objek yang masing-masing menentukan artefak biner untuk komponen pada platform yang ditentukan oleh manifes ini. Misalnya, Anda dapat menentukan kode atau citra sebagai artefak.  
Saat komponen digunakan, perangkat lunak AWS IoT Greengrass Core mengunduh artefak ke folder pada perangkat inti. Anda juga dapat menentukan artefak sebagai file arsip yang diekstraki oleh perangkat lunak setelah mengunduhnya.  
Anda dapat menggunakan [variabel resep](#recipe-variables) untuk mendapatkan jalur ke folder tempat artefak menginstal pada perangkat inti.  
+ File normal — Gunakan [variabel resep artifacts:path](#component-recipe-artifacts-path) untuk mendapatkan jalur ke folder yang berisi artefak. Sebagai contoh, tentukan `{artifacts:path}/my_script.py` dalam resep untuk mendapatkan jalur ke artefak yang memiliki URI `s3://amzn-s3-demo-bucket/path/to/my_script.py`.
+ Arsip yang diekstraksi — Gunakan [variabel resep artifacts:decompressedPath](#component-recipe-artifacts-decompressed-path) untuk mendapatkan jalur ke folder yang berisi artefak arsip yang diekstraksi. Perangkat lunak AWS IoT Greengrass Core mengekstrak setiap arsip ke folder dengan nama yang sama dengan arsip. Sebagai contoh, tentukan `{artifacts:decompressedPath}/my_archive/my_script.py` dalam resep untuk mendapatkan jalur ke artefak arsip `my_script.py` yang memiliki URI `s3://amzn-s3-demo-bucket/path/to/my_archive.zip`.
Ketika Anda mengembangkan komponen dengan artefak arsip pada perangkat inti lokal, Anda mungkin tidak memiliki URI untuk artefak itu. Untuk menguji komponen Anda dengan `Unarchive` yang mengekstraksi artefak, tentukan URI tempat nama file cocok dengan nama file artefak arsip Anda. Anda dapat menentukan URI di mana Anda mengharapkan untuk mengunggah artefak arsip, atau Anda dapat menentukan URI placeholder yang baru. Misalnya, untuk mengekstraksi artefak `my_archive.zip` selama deployment lokal, Anda dapat menentukan `s3://amzn-s3-demo-bucket/my_archive.zip`.
Setiap objek berisi informasi berikut:    
`Uri`  
URI artefak dalam bucket S3. Perangkat lunak AWS IoT Greengrass Core mengambil artefak dari URI ini saat komponen diinstal, kecuali artefak sudah ada di perangkat. Setiap artefak harus memiliki nama file yang unik dalam setiap manifes.  
`Unarchive`  
(Opsional) Jenis arsip yang akan dibongkar. Pilih dari salah satu pilihan berikut:  
+ `NONE` – File ini bukanlah arsip yang akan dibongkar. Perangkat lunak inti AWS IoT Greengrass menginstal artefak ke folder pada perangkat inti. Anda dapat menggunakan [variabel resep artifacts:path](#component-recipe-artifacts-path) untuk mendapatkan jalur ke folder ini.
+ `ZIP` – File ini adalah arsip ZIP. Perangkat lunak AWS IoT Greengrass Core mengekstrak arsip ke folder dengan nama yang sama dengan arsip. Anda dapat menggunakan [variabel resep artifacts:decompressedPath](#component-recipe-artifacts-decompressed-path) untuk mendapatkan jalur ke folder ini.
Default ke `NONE`.  
  `Permission`   
(Opsional) Sebuah objek yang mendefinisikan izin akses yang akan ditentukan untuk file artefak ini. Anda dapat mengatur izin membaca dan izin mengeksekusi.  
Anda tidak dapat mengatur izin tulis, karena perangkat lunak AWS IoT Greengrass Core tidak mengizinkan komponen untuk mengedit file artefak di folder artefak. Untuk mengedit file artefak dalam komponen, salin ke lokasi lain atau publikasikan dan deploy file artefak yang baru.
Jika Anda mendefinisikan artefak sebagai arsip untuk dibongkar, maka perangkat lunak AWS IoT Greengrass Core menetapkan izin akses ini pada file yang dibongkar dari arsip. Perangkat lunak AWS IoT Greengrass Core menetapkan izin akses folder `ALL` untuk `Read` dan`Execute`. Hal ini memungkinkan komponen untuk melihat file yang dibongkar dalam folder. Untuk mengatur izin pada masing-masing file dari arsip, Anda dapat mengatur izin di [skrip install lifecycle](#install-lifecycle-definition).  
Objek ini berisi informasi berikut:    
`Read`  
(Opsional) Izin baca yang akan ditetapkan untuk file artefak ini. Untuk mengizinkan komponen lain untuk mengakses artefak ini, seperti komponen yang bergantung pada komponen ini, tentukan `ALL`. Pilih dari salah satu pilihan berikut:  
+ `NONE` – File ini tidak dapat dibaca.
+ `OWNER` – File ini dapat dibaca oleh pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini.
+ `ALL` – File ini dapat dibaca oleh semua pengguna.
Default ke `OWNER`.  
`Execute`  
(Opsional) Izin run yang akan ditetapkan untuk file artefak ini. Izin `Execute` menyiratkan izin `Read`. Misalnya, jika Anda menentukan `ALL` untuk `Execute`, maka semua pengguna dapat membaca dan menjalankan file artefak ini.  
Pilih dari salah satu pilihan berikut:  
+ `NONE` – File ini tidak dapat dijalankan.
+ `OWNER` – File ini dapat dibaca oleh pengguna sistem yang Anda konfigurasikan untuk menjalankan komponen ini.
+ `ALL` – File ini dapat dijalankan oleh semua pengguna.
Default ke `NONE`.  
`Digest`  
(Hanya baca) Cryptographic digest hash dari artefak. Saat Anda membuat komponen, AWS IoT Greengrass gunakan algoritma hash untuk menghitung hash dari file artefak. Kemudian, ketika Anda men-deploy komponen, inti Greengrass menghitung hash dari artefak terunduh dan membandingkan hash dengan digest ini untuk memverifikasi artefak sebelum instalasi. Jika hash tidak cocok dengan digest, deployment gagal.  
Jika Anda menyetel parameter ini, AWS IoT Greengrass ganti nilai yang Anda tetapkan saat membuat komponen.  
`Algorithm`  
(Read-only) Algoritma hash yang AWS IoT Greengrass digunakan untuk menghitung hash intisari artefak.  
Jika Anda menyetel parameter ini, AWS IoT Greengrass ganti nilai yang Anda tetapkan saat membuat komponen.

  `Lifecycle`   
Objek yang mendefinisikan cara menginstal dan menjalankan komponen. Perangkat inti hanya menggunakan siklus hidup global hanya jika [manifes](#manifest-definition) yang akan digunakan tidak menentukan siklus hidup.  
Anda mendefinisikan siklus hidup ini di luar manifes. Anda juga dapat menentukan [manifest siklus hidup](#manifest-lifecycle-definition) yang berlaku untuk platform yang sesuai dengan manifes itu.
Dalam siklus hidup global, Anda dapat menentukan siklus hidup yang berjalan untuk [kunci pilihan](#manifest-selections-definition) tertentu yang Anda tentukan di setiap manifes. Kunci pilihan adalah string yang mengidentifikasi bagian dari siklus hidup global yang akan dijalankan untuk setiap manifes.  
Kunci pilihan `all` adalah default pada setiap bagian tanpa kunci seleksi. Artinya Anda dapat menggunakan pilihan `all` dalam manifes untuk menjalankan bagian siklus hidup global tanpa kunci seleksi. Anda tidak perlu menentukan opsi kunci pilihan `all` dalam siklus hidup global.  
Jika manifes tidak menentukan siklus hidup atau kunci pilihan, default perangkat inti akan menggunakan pilihan `all`. Ini berarti bahwa dalam kasus ini, perangkat inti menggunakan bagian siklus hidup global yang tidak menggunakan kunci pilihan.  
Objek ini berisi informasi yang sama seperti [manifes siklus hidup](#manifest-lifecycle-definition), namun Anda dapat menentukan kunci pilihan pada tingkat mana pun untuk memilih sub-bagian dari siklus hidup.  
Kami menyarankan Anda menggunakan hanya huruf kecil untuk setiap kunci pilihan untuk menghindari pertentangan antara kunci pilihan dan kunci siklus hidup. Kunci siklus hidup dimulai dengan huruf kapital.

**Example Contoh siklus hidup global dengan kunci pilihan tingkat atas**  

```
Lifecycle:
  key1:
    install:
      SkipIf: either onpath executable or exists file
      Script: command1
  key2:
    install:
      Script: command2
  all:
    install:
      Script: command3
```

**Example Contoh siklus hidup global dengan kunci pilihan tingkat bawah**  

```
Lifecycle:
  install:
    Script:
      key1: command1
      key2: command2
      all: command3
```

**Example Contoh siklus hidup global dengan berbagai tingkatan kunci pilihan**  

```
Lifecycle:
  key1:
    install:
      SkipIf: either onpath executable or exists file
      Script: command1
  key2:
    install:
      Script: command2
  all:
    install:
      Script:
        key3: command3
        key4: command4
        all: command5
```

## Variabel resep
<a name="recipe-variables"></a>

Variabel resep mengekspos informasi dari komponen saat ini dan inti yang dapat Anda gunakan dalam resep Anda. Misalnya, Anda dapat menggunakan variabel resep untuk meneruskan parameter konfigurasi komponen ke aplikasi yang Anda jalankan dalam skrip siklus hidup.

Anda dapat menggunakan variabel resep di bagian resep komponen berikut:
+ Definisi siklus hidup.
+ Definisi konfigurasi komponen, jika Anda menggunakan [Greengrass](greengrass-nucleus-component.md) nucleus v2.6.0 atau yang lebih baru dan mengatur opsi konfigurasi ke. [interpolateComponentConfiguration](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-interpolate-component-configuration)`true` Anda juga dapat menggunakan variabel resep saat [menerapkan pembaruan konfigurasi komponen](update-component-configurations.md#merge-configuration-update-recipe-variables).

Variabel resep menggunakan sintaks `{recipe_variable}`. Kawat lengkung menunjukkan variabel resep.

AWS IoT Greengrass mendukung variabel resep berikut:

`component_dependency_name:configuration:json_pointer`  
Nilai parameter konfigurasi untuk komponen yang didefinisikan oleh resep ini atau untuk komponen yang komponen ini tergantung padanya.  
Anda dapat menggunakan variabel ini untuk memberikan parameter pada skrip yang Anda jalankan dalam siklus hidup komponen.  
AWS IoT Greengrass mendukung variabel resep ini hanya dalam definisi siklus hidup komponen.
Variabel resep ini memiliki masukan berikut:  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` — (Opsional) Nama dependensi komponen pada kueri. Hilangkan segmen ini untuk melakukan kueri atas komponen yang menentukan resep ini. Anda hanya dapat menentukan dependensi langsung.
+ `json_pointer` - Pointer JSON pada nilai konfigurasi yang akan dievaluasi. JSON pointer dimulai dengan garis miring `/`. Untuk mengidentifikasi nilai dalam konfigurasi komponen bersusun, gunakan garis miring ke depan (`/`) untuk memisahkan kunci-kunci untuk setiap tingkat dalam konfigurasi. Anda dapat menggunakan nomor sebagai kunci untuk menentukan indeks dalam daftar. Untuk informasi selengkapnya, lihat [spesifikasi pointer JSON](https://tools.ietf.org/html/rfc6901).

  AWS IoT Greengrass Core menggunakan pointer JSON untuk resep dalam format YAMAL.
Pointer JSON dapat mereferensikan jenis node berikut:  
+ Sebuah simpul nilai. AWS IoT Greengrass Core menggantikan variabel resep dengan representasi string dari nilai. Nilai kosong berubah ke `null` sebagai string.
+ Sebuah simpul objek. AWS IoT Greengrass Core menggantikan variabel resep dengan representasi string JSON serial dari objek itu.
+ Tidak ada simpul. AWS IoT Greengrass Core tidak menggantikan variabel resep.
Misalnya, variabel resep `{configuration:/Message}` mengambil nilai kunci `Message` dalam konfigurasi komponen tersebut. Variabel resep `{com.example.MyComponentDependency:configuration:/server/port}` mengambil nilai `port` di konfigurasi objek `server` dari dependensi komponen.

  `component_dependency_name:artifacts:path`   
Jalur akar artefak untuk komponen yang didefinisikan oleh resep ini atau untuk komponen yang komponen ini tergantung padanya.  
Saat komponen diinstal, salin AWS IoT Greengrass artefak komponen ke folder yang diekspos variabel ini. Anda dapat menggunakan variabel ini untuk mengidentifikasi lokasi skrip yang akan dijalankan dalam siklus hidup komponen, misalnya.  
<a name="recipe-variable-artifact-folder-permissions"></a>Folder di jalur ini bersifat hanya-baca. Untuk mengubah file artefak, salin file ke lokasi lain, seperti direktori kerja saat ini (`$PWD` atau `.`). Kemudian, ubah file di sana.  
<a name="recipe-variable-component-dependency-artifact-file-permissions"></a>Untuk membaca atau menjalankan artefak dari dependensi komponen, izin `Read` atau `Execute` artefak itu harus `ALL`. Untuk informasi lebih lanjut, lihat [izin artefak](#component-artifact-permission) yang Anda tentukan dalam resep komponen.  
Variabel resep ini memiliki masukan berikut:  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` — (Opsional) Nama dependensi komponen pada kueri. Hilangkan segmen ini untuk melakukan kueri atas komponen yang menentukan resep ini. Anda hanya dapat menentukan dependensi langsung.

  `component_dependency_name:artifacts:decompressedPath`   
Jalur akar artefak dari artefak arsip yang terdekompresi untuk komponen yang didefinisikan oleh resep ini atau untuk komponen yang komponen ini tergantung padanya.  
Saat komponen diinstal, AWS IoT Greengrass buka artefak arsip komponen ke folder yang diekspos variabel ini. Anda dapat menggunakan variabel ini untuk mengidentifikasi lokasi skrip yang akan dijalankan dalam siklus hidup komponen, misalnya.  
Setiap artefak di-unzip ke folder dalam jalur dekompresi, di mana folder itu memiliki nama yang sama dengan artefak dikurangi ekstensinya. Sebagai contoh, sebuah artefak ZIP bernama `models.zip` dibongkar ke folder `{artifacts:decompressedPath}/models`.  
<a name="recipe-variable-artifact-folder-permissions"></a>Folder di jalur ini bersifat hanya-baca. Untuk mengubah file artefak, salin file ke lokasi lain, seperti direktori kerja saat ini (`$PWD` atau `.`). Kemudian, ubah file di sana.  
<a name="recipe-variable-component-dependency-artifact-file-permissions"></a>Untuk membaca atau menjalankan artefak dari dependensi komponen, izin `Read` atau `Execute` artefak itu harus `ALL`. Untuk informasi lebih lanjut, lihat [izin artefak](#component-artifact-permission) yang Anda tentukan dalam resep komponen.  
Variabel resep ini memiliki masukan berikut:  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` — (Opsional) Nama dependensi komponen pada kueri. Hilangkan segmen ini untuk melakukan kueri atas komponen yang menentukan resep ini. Anda hanya dapat menentukan dependensi langsung.

  `component_dependency_name:work:path`   
Fitur ini tersedia untuk v2.0.4 dan versi yang lebih baru dari [komponen inti Greengrass](greengrass-nucleus-component.md).  
Jalur akar artefak untuk komponen yang didefinisikan oleh resep ini atau untuk komponen yang komponen ini tergantung padanya. Nilai variabel resep ini setara dengan output dari variabel lingkungan `$PWD` dan perintah [pwd](https://en.wikipedia.org/wiki/Pwd) ketika dijalankan dari konteks komponen.  
Anda dapat menggunakan variabel resep ini untuk berbagi file antara komponen dan dependensi.  
Folder di jalur ini dapat dibaca dan ditulis oleh komponen yang didefinisikan oleh resep ini dan oleh komponen lain yang dijalankan sebagai pengguna dan kelompok yang sama.  
Variabel resep ini memiliki masukan berikut:  
+ <a name="recipe-variable-component-dependency-name"></a>`component_dependency_name` — (Opsional) Nama dependensi komponen pada kueri. Hilangkan segmen ini untuk melakukan kueri atas komponen yang menentukan resep ini. Anda hanya dapat menentukan dependensi langsung.

`kernel:rootPath`  
Jalur akar AWS IoT Greengrass inti.

`iot:thingName`  
Fitur ini tersedia untuk v2.3.0 dan versi kemudian dari [komponen inti Greengrass](greengrass-nucleus-component.md).  
Nama AWS IoT benda perangkat inti.

## Contoh resep
<a name="recipe-examples"></a>

Anda dapat mereferensikan contoh resep berikut untuk membantu Anda membuat resep untuk komponen Anda.

AWS IoT Greengrass mengkurasi indeks komponen Greengrass, yang disebut Greengrass Software Catalog. Katalog ini melacak komponen Greengrass yang dikembangkan oleh komunitas Greengrass. Dari katalog ini, Anda dapat mengunduh, memodifikasi, dan menyebarkan komponen untuk membuat aplikasi Greengrass Anda. Untuk informasi selengkapnya, lihat [Komponen komunitas](greengrass-software-catalog.md).

**Topics**
+ [Resep komponen Hello World](#recipe-example-hello-world)
+ [Contoh komponen waktu aktif Python](#recipe-example-python-runtime)
+ [Komponen resep yang menentukan beberapa kolom](#recipe-example-all-fields)

### Resep komponen Hello World
<a name="recipe-example-hello-world"></a>

Resep berikut menjelaskan komponen Hello World yang menjalankan skrip Python. Komponen ini mendukung semua platform dan menerima `Message` parameter yang AWS IoT Greengrass diteruskan sebagai argumen ke skrip Python. Ini adalah resep untuk komponen Hello World di [Memulai tutorial](getting-started.md).

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.HelloWorld",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "My first AWS IoT Greengrass component.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "Message": "world"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.HelloWorld
ComponentVersion: '1.0.0'
ComponentDescription: My first AWS IoT Greengrass component.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    Message: world
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      run: |
        python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
  - Platform:
      os: windows
    Lifecycle:
      run: |
        py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
```

------

### Contoh komponen waktu aktif Python
<a name="recipe-example-python-runtime"></a>

Resep berikut menjelaskan komponen yang menginstal Python. Komponen ini mendukung perangkat Linux 64-bit.

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.PythonRuntime",
  "ComponentDescription": "Installs Python 3.7",
  "ComponentPublisher": "Amazon",
  "ComponentVersion": "3.7.0",
  "Manifests": [
    {
      "Platform": {
        "os": "linux",
        "architecture": "amd64"
      },
      "Lifecycle": {
        "install": "apt-get update\napt-get install python3.7"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.PythonRuntime
ComponentDescription: Installs Python 3.7
ComponentPublisher: Amazon
ComponentVersion: '3.7.0'
Manifests:
  - Platform:
      os: linux
      architecture: amd64
    Lifecycle:
      install: |
        apt-get update
        apt-get install python3.7
```

------

### Komponen resep yang menentukan beberapa kolom
<a name="recipe-example-all-fields"></a>

Resep komponen berikut menggunakan beberapa kolom resep.

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.FooService",
  "ComponentDescription": "Complete recipe for AWS IoT Greengrass components",
  "ComponentPublisher": "Amazon",
  "ComponentVersion": "1.0.0",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "TestParam": "TestValue"
    }
  },
  "ComponentDependencies": {
    "BarService": {
      "VersionRequirement": "^1.1.0",
      "DependencyType": "SOFT"
    },
    "BazService": {
      "VersionRequirement": "^2.0.0"
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux",
        "architecture": "amd64"
      },
      "Lifecycle": {
        "install": {
          "Skipif": "onpath git",
          "Script": "sudo apt-get install git"
        },
        "Setenv": {
          "environment_variable1": "variable_value1",
          "environment_variable2": "variable_value2"
        }
      },
      "Artifacts": [
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world.zip",
          "Unarchive": "ZIP"
        },
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world_linux.py"
        }
      ]
    },
    {
      "Lifecycle": {
        "install": {
          "Skipif": "onpath git",
          "Script": "sudo apt-get install git",
          "RequiresPrivilege": "true"
        }
      },
      "Artifacts": [
        {
          "Uri": "s3://amzn-s3-demo-bucket/hello_world.py"
        }
      ]
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.FooService
ComponentDescription: Complete recipe for AWS IoT Greengrass components
ComponentPublisher: Amazon
ComponentVersion: 1.0.0
ComponentConfiguration:
  DefaultConfiguration:
    TestParam: TestValue
ComponentDependencies:
  BarService:
    VersionRequirement: ^1.1.0
    DependencyType: SOFT
  BazService:
    VersionRequirement: ^2.0.0
Manifests:
  - Platform:
      os: linux
      architecture: amd64
    Lifecycle:
      install:
        SkipIf: onpath git
        Script: sudo apt-get install git
      SetEnv:
        environment_variable1: variable_value1
        environment_variable2: variable_value2
    Artifacts:
      - Uri: 's3://amzn-s3-demo-bucket/hello_world.zip'
        Unarchive: ZIP
      - Uri: 's3://amzn-s3-demo-bucket/hello_world_linux.py'
  - Lifecycle:
      install:
        SkipIf: onpath git
        Script: sudo apt-get install git
        RequiresPrivilege: 'true'
    Artifacts:
      - Uri: 's3://amzn-s3-demo-bucket/hello_world.py'
```

------

# Referensi variabel lingkungan komponen
<a name="component-environment-variables"></a>

Perangkat lunak AWS IoT Greengrass Core menetapkan variabel lingkungan saat menjalankan skrip siklus hidup untuk komponen. Anda bisa mendapatkan variabel lingkungan ini di komponen Anda untuk mendapatkan nama benda, Wilayah AWS, dan versi inti Greengrass. Perangkat lunak ini juga menetapkan variabel lingkungan yang diperlukan komponen Anda untuk menggunakan [SDK komunikasi antar proses](interprocess-communication.md) dan untuk [berinteraksi dengan layanan AWS](interact-with-aws-services.md).

Anda juga dapat mengatur variabel lingkungan kustom untuk skrip siklus hidup komponen Anda. Untuk informasi lebih lanjut, lihat [Setenv](component-recipe-reference.md#lifecycle-setenv-definition)

Perangkat lunak AWS IoT Greengrass Core menetapkan variabel lingkungan berikut:

`AWS_IOT_THING_NAME`  
Nama AWS IoT benda yang mewakili perangkat inti Greengrass ini.

`AWS_REGION`  
 Wilayah AWS Tempat perangkat inti Greengrass ini beroperasi.  
 AWS SDKs Gunakan variabel lingkungan ini untuk mengidentifikasi Wilayah default yang akan digunakan. Variabel ini setara dengan `AWS_DEFAULT_REGION`.

`AWS_DEFAULT_REGION`  
 Wilayah AWS Tempat perangkat inti Greengrass ini beroperasi.  
 AWS CLI Menggunakan variabel lingkungan ini untuk mengidentifikasi Wilayah default untuk digunakan. Variabel ini setara dengan `AWS_REGION`.

`GGC_VERSION`  
Versi [komponen inti Greengrass](greengrass-nucleus-component.md) yang berjalan pada perangkat inti Greengrass ini.

`GG_ROOT_CA_PATH`  
[Fitur ini tersedia untuk v2.5.5 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md)  
Jalur menuju sertifikat root certificate authority (CA) yang digunakan oleh inti Greengrass.

`AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT`  
Jalur ke soket IPC yang digunakan komponen untuk berkomunikasi dengan perangkat lunak AWS IoT Greengrass Core. Untuk informasi selengkapnya, lihat [Gunakan AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT CoreBerkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT Core](interprocess-communication.md).

`SVCUID`  
Token rahasia yang digunakan komponen untuk terhubung ke soket IPC dan berkomunikasi dengan perangkat lunak AWS IoT Greengrass Core. Untuk informasi selengkapnya, lihat [Gunakan AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT CoreBerkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT Core](interprocess-communication.md).

`AWS_CONTAINER_AUTHORIZATION_TOKEN`  
Token rahasia yang digunakan komponen untuk mengambil kredensial dari [komponen layanan pertukaran token](token-exchange-service-component.md).

`AWS_CONTAINER_CREDENTIALS_FULL_URI`  
Token rahasia yang diminta komponen untuk mengambil kredensial dari [komponen layanan pertukaran token](token-exchange-service-component.md).