

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

# Jalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass dapat dikonfigurasi untuk dijalankan dalam wadah Docker. Docker adalah sebuah platform yang memungkinkan Anda untuk membangun, menjalankan, menguji, dan men-deploy aplikasi yang didasarkan pada kontainer Linux. Saat Anda menjalankan image AWS IoT Greengrass Docker, Anda dapat memilih apakah akan memberikan AWS kredensyal Anda ke wadah Docker dan mengizinkan penginstal perangkat lunak AWS IoT Greengrass Core untuk secara otomatis menyediakan sumber daya AWS yang diperlukan perangkat inti Greengrass untuk beroperasi. Jika Anda tidak ingin memberikan AWS kredensyal, Anda dapat menyediakan AWS sumber daya secara manual dan menjalankan perangkat lunak AWS IoT Greengrass Core di wadah Docker.

**Topics**
+ [Platform dan persyaratan yang didukung](#greengrass-docker-supported-platforms)
+ [Unduhan perangkat lunak](#greengrass-docker-downloads)
+ [Pilih cara menyediakan AWS sumber daya](#greengrass-docker-resource-provisioning)
+ [Bangun AWS IoT Greengrass gambar dari Dockerfile](build-greengrass-dockerfile.md)
+ [Jalankan AWS IoT Greengrass di Docker dengan penyediaan otomatis](run-greengrass-docker-automatic-provisioning.md)
+ [Jalankan AWS IoT Greengrass di Docker dengan penyediaan manual](run-greengrass-docker-manual-provisioning.md)
+ [Pemecahan masalah AWS IoT Greengrass dalam wadah Docker](docker-troubleshooting.md)

## Platform dan persyaratan yang didukung
<a name="greengrass-docker-supported-platforms"></a>

Komputer host harus memenuhi persyaratan minimum berikut untuk menginstal dan menjalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker:
+ <a name="docker-host-reqs"></a>Sistem operasi berbasis Linux dengan koneksi internet.
+ <a name="docker-engine-reqs"></a>[Mesin Docker](https://docs.docker.com/engine/install/) versi 18.09 atau yang lebih baru.
+ <a name="docker-compose-reqs"></a>(Opsional) [Docker Compose](https://docs.docker.com/compose/install/) versi 1.22 atau yang lebih baru. Docker Compose diperlukan hanya jika Anda ingin menggunakan Docker Compose CLI untuk menjalankan gambar Docker Anda.

Untuk menjalankan komponen fungsi Lambda dalam kontainer Docker, Anda harus mengonfigurasi kontainer tersebut untuk memenuhi persyaratan tambahan. Untuk informasi selengkapnya, lihat [Persyaratan fungsi Lambda](setting-up.md#greengrass-v2-lambda-requirements).

### Jalankan komponen dalam mode proses
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass tidak mendukung menjalankan fungsi Lambda atau komponen yang AWS disediakan di lingkungan runtime yang terisolasi di dalam wadah Docker. AWS IoT Greengrass Anda harus menjalankan komponen ini dalam mode proses tanpa isolasi apapun.

Bila Anda mengonfigurasi komponen fungsi Lambda, atur modus isolasi ke **Tidak ada kontainer**. Untuk informasi selengkapnya, lihat [Jalankan AWS Lambda fungsi](run-lambda-functions.md). 

Saat Anda menerapkan salah satu komponen AWS-provided berikut, perbarui konfigurasi untuk setiap komponen untuk menyetel `containerMode` parameternya. `NoContainer` Untuk informasi selengkapnya tentang pembaruan konfigurasi, lihat [Perbarui konfigurasi komponen](update-component-configurations.md).
+ [CloudWatch metrik](cloudwatch-metrics-component.md)
+ [Pembela Perangkat](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Adaptor protokol Modbus-RTU](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass Unduhan perangkat lunak Docker
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass menyediakan Dockerfile untuk membangun image container yang memiliki perangkat lunak AWS IoT Greengrass Core dan dependensi yang diinstal pada image dasar Amazon Linux 2 (x86\$164). Anda dapat memodifikasi gambar dasar di Dockerfile untuk berjalan AWS IoT Greengrass pada arsitektur platform yang berbeda.

Unduh paket Dockerfile dari. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)

Dockerfile menggunakan versi Greengrass yang lebih lama. Anda harus memperbarui file untuk menggunakan versi Greengrass yang Anda inginkan. Untuk informasi tentang membangun image AWS IoT Greengrass kontainer dari Dockerfile, lihat. [Buat gambar AWS IoT Greengrass kontainer dari Dockerfile](build-greengrass-dockerfile.md)

## Pilih cara menyediakan AWS sumber daya
<a name="greengrass-docker-resource-provisioning"></a>

Saat Anda menginstal perangkat lunak AWS IoT Greengrass Core dalam wadah Docker, Anda dapat memilih apakah akan secara otomatis menyediakan AWS sumber daya yang diperlukan perangkat inti Greengrass untuk beroperasi, atau menggunakan sumber daya yang Anda sediakan secara manual.
+ **Penyediaan sumber daya otomatis —Penginstal** menyediakan hal, grup AWS IoT AWS IoT benda, peran IAM, dan AWS IoT alias peran saat Anda menjalankan image AWS IoT Greengrass kontainer untuk pertama kalinya. Installer juga dapat men-deploy alat pengembangan lokal ke perangkat inti, sehingga Anda dapat menggunakan perangkat tersebut untuk mengembangkan dan menguji komponen perangkat lunak kustom. Untuk secara otomatis menyediakan sumber daya ini, Anda harus menyediakan kredensial AWS sebagai variabel lingkungan ke gambar Docker.

  Untuk menggunakan penyediaan otomatis, Anda harus mengatur variabel lingkungan Docker `PROVISION=true` dan memasang file kredensial untuk menyediakan kredensial AWS pada kontainer tersebut.
+ **Penyediaan sumber daya manual** —Jika Anda tidak ingin memberikan AWS kredensyal ke wadah, Anda dapat menyediakan AWS sumber daya secara manual sebelum menjalankan image kontainer. AWS IoT Greengrass Anda harus membuat file konfigurasi untuk memberikan informasi tentang sumber daya ini ke penginstal perangkat lunak AWS IoT Greengrass Core dalam wadah Docker.

  Untuk menggunakan penyediaan manual, Anda harus mengatur variabel lingkungan Docker `PROVISION=false`. Penyediaan manual adalah opsi default.

Lihat informasi yang lebih lengkap di [Buat gambar AWS IoT Greengrass kontainer dari Dockerfile](build-greengrass-dockerfile.md).

# Buat gambar AWS IoT Greengrass kontainer dari Dockerfile
<a name="build-greengrass-dockerfile"></a>

AWS menyediakan Dockerfile yang dapat Anda unduh dan gunakan untuk menjalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker. Dockerfiles berisi kode sumber untuk membangun gambar AWS IoT Greengrass kontainer. 

Sebelum Anda membangun gambar AWS IoT Greengrass kontainer, Anda harus mengkonfigurasi Dockerfile Anda untuk memilih versi perangkat lunak AWS IoT Greengrass Core yang ingin Anda instal. Anda juga dapat mengonfigurasi variabel lingkungan untuk memilih cara penyediaan sumber daya selama instalasi, dan menyesuaikan opsi instalasi lainnya. Bagian ini menjelaskan cara mengkonfigurasi dan membangun image AWS IoT Greengrass Docker dari Dockerfile. 



## Unduh paket Dockerfile
<a name="download-dockerfile-package"></a>

Anda dapat mengunduh paket AWS IoT Greengrass Dockerfile dari: GitHub

[AWS Greengrass Docker Repositori](https://github.com/aws-greengrass/aws-greengrass-docker)

Setelah Anda men-download paket tersebut, ekstraksi kontennya ke `download-directory/aws-greengrass-docker-nucleus-version` di komputer Anda. Dockerfile menggunakan versi Greengrass yang lebih lama. Anda harus memperbarui file untuk menggunakan versi Greengrass yang Anda inginkan.

## Tentukan versi perangkat lunak AWS IoT Greengrass inti
<a name="set-dockerfile-build-argument"></a>

Gunakan argumen build berikut di Dockerfile untuk menentukan versi perangkat lunak AWS IoT Greengrass Core yang ingin Anda gunakan dalam image AWS IoT Greengrass Docker. Secara default, Dockerfile menggunakan versi terbaru dari perangkat lunak AWS IoT Greengrass Core.

`GREENGRASS_RELEASE_VERSION`  
Versi perangkat lunak AWS IoT Greengrass Core. Secara default, Dockerfile mengunduh versi terbaru yang tersedia dari inti Greengrass. Tetapkan nilai ke versi nukleus yang ingin Anda unduh.

## Tetapkan variabel lingkungan
<a name="set-dockerfile-environment-variables"></a>

Variabel lingkungan memungkinkan Anda untuk menyesuaikan bagaimana perangkat lunak AWS IoT Greengrass Core diinstal dalam wadah Docker. Anda dapat mengatur variabel lingkungan untuk image AWS IoT Greengrass Docker Anda dengan berbagai cara. 
+ Untuk menggunakan variabel lingkungan yang sama untuk membuat beberapa gambar, atur variabel lingkungan langsung di Dockerfile.
+ Jika Anda menggunakan `docker run` untuk memulai kontainer Anda, lewati variabel lingkungan sebagai argumen dalam perintah, atau atur variabel lingkungan dalam file variabel lingkungan dan kemudian lewati file tersebut sebagai argumen. Untuk informasi selengkapnya tentang pengaturan variabel lingkungan di Docker, lihat [variabel lingkungan](https://docs.docker.com/engine/reference/commandline/run/#env) dalam dokumentasi Docker.
+ Jika Anda menggunakan `docker-compose up` untuk memulai kontainer Anda, tetapkan file variabel lingkungan dan kemudian lewati file tersebut sebagai argumen. Untuk informasi selengkapnya tentang pengaturan variabel lingkungan di Compose, lihat [Dokumentasi docker](https://docs.docker.com/compose/environment-variables/).

Anda dapat mengonfigurasi variabel lingkungan berikut untuk image AWS IoT Greengrass Docker.

**catatan**  
Jangan memodifikasi variabel `TINI_KILL_PROCESS_GROUP` dalam Dockerfile. Variabel ini memungkinkan penerusan `SIGTERM` ke semua PIDs dalam grup PID sehingga perangkat lunak AWS IoT Greengrass Core dapat dimatikan dengan benar ketika wadah Docker dihentikan.

`GGC_ROOT_PATH`  
(Opsional) Jalur ke folder dalam wadah untuk digunakan sebagai root untuk perangkat lunak AWS IoT Greengrass Core.  
Default: `/greengrass/v2`

`PROVISION`  
(Opsional) Menentukan apakah AWS IoT Greengrass Inti menyediakan AWS sumber daya.   
+ Jika Anda menentukan`true`, perangkat lunak AWS IoT Greengrass Core mendaftarkan gambar kontainer sebagai AWS IoT sesuatu dan menyediakan AWS sumber daya yang dibutuhkan perangkat inti Greengrass. Perangkat lunak AWS IoT Greengrass Core menyediakan AWS IoT sesuatu, (opsional) grup AWS IoT benda, peran IAM, dan alias AWS IoT peran. Untuk informasi selengkapnya, lihat [Jalankan AWS IoT Greengrass dalam wadah Docker dengan penyediaan sumber daya otomatis](run-greengrass-docker-automatic-provisioning.md).
+ Jika Anda menentukan`false`, maka Anda harus membuat file konfigurasi untuk diberikan kepada penginstal AWS IoT Greengrass Core yang menentukan untuk menggunakan AWS sumber daya dan sertifikat yang Anda buat secara manual. Untuk informasi selengkapnya, lihat [Jalankan AWS IoT Greengrass dalam wadah Docker dengan penyediaan sumber daya manual](run-greengrass-docker-manual-provisioning.md).
Default: `false`

`AWS_REGION`  
(Opsional) Wilayah AWS Yang digunakan perangkat lunak AWS IoT Greengrass Core untuk mengambil atau membuat AWS sumber daya yang diperlukan.   
Default: `us-east-1`.

`THING_NAME`  
(Opsional) Nama AWS IoT benda yang Anda daftarkan sebagai perangkat inti ini. Jika benda dengan nama ini tidak ada di Anda Akun AWS, perangkat lunak AWS IoT Greengrass Core membuatnya.   
Anda harus menentukan `PROVISION=true` untuk menerapkan argumen ini.  
Default: `GreengrassV2IotThing_` ditambah UUID acak.

`THING_GROUP_NAME`  
(Opsional) Nama grup AWS IoT benda tempat Anda menambahkan perangkat inti ini AWS IoT Jika penerapan menargetkan grup hal ini, ini dan perangkat inti lainnya dalam grup itu menerima penerapan itu saat terhubung. AWS IoT Greengrass Jika grup benda dengan nama ini tidak ada di Anda Akun AWS, perangkat lunak AWS IoT Greengrass Core membuatnya.  
Anda harus menentukan `PROVISION=true` untuk menerapkan argumen ini.

`TES_ROLE_NAME`  
(Opsional) Nama peran IAM yang akan digunakan untuk memperoleh AWS kredensyal yang memungkinkan perangkat inti Greengrass berinteraksi dengan layanan. AWS Jika peran dengan nama ini tidak ada di Anda Akun AWS, perangkat lunak AWS IoT Greengrass Core membuatnya dengan `GreengrassV2TokenExchangeRoleAccess` kebijakan. Peran ini tidak memiliki akses ke bucket S3 tempat Anda meng-hosting artefak komponen. Jadi, Anda harus menambahkan izin pada bucket S3 dan objek artefak Anda ketika Anda membuat komponen. Untuk informasi selengkapnya, lihat [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md).  
Default: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(Opsional) Nama alias AWS IoT peran yang menunjuk ke peran IAM yang menyediakan AWS kredensyal untuk perangkat inti Greengrass. Jika alias peran dengan nama ini tidak ada di Anda Akun AWS, perangkat lunak AWS IoT Greengrass Core membuatnya dan mengarahkannya ke peran IAM yang Anda tentukan.  
Default: `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(Opsional) Nama atau ID pengguna sistem dan grup yang digunakan perangkat lunak AWS IoT Greengrass Core untuk menjalankan komponen. Tentukan pengguna dan grup, yang dipisahkan dengan titik dua. Grup ini opsional. Misalnya, Anda dapat menentukan **ggc\$1user:ggc\$1group** atau **ggc\$1user**.  
+ Jika Anda berjalan sebagai root, hal ini akan menjadi default untuk pengguna dan grup yang ditentukan oleh file konfigurasi. Jika file konfigurasi tersebut tidak menentukan pengguna dan grup, default-nya menjadi `ggc_user:ggc_group`. Jika `ggc_user` atau `ggc_group` tidak ada, perangkat lunak akan membuatnya.
+ Jika Anda menjalankan sebagai pengguna non-root, perangkat lunak AWS IoT Greengrass Core menggunakan pengguna tersebut untuk menjalankan komponen.
+ Jika Anda tidak menentukan grup, perangkat lunak AWS IoT Greengrass Core menggunakan grup utama pengguna sistem.
Untuk informasi selengkapnya, lihat [Konfigurasikan pengguna yang menjalankan komponen](configure-greengrass-core-v2.md#configure-component-user).

`DEPLOY_DEV_TOOLS`  
Mendefinisikan apakah akan mengunduh dan menyebarkan komponen CLI [Greengrass](greengrass-cli-component.md) dalam gambar kontainer. Anda dapat menggunakan Greengrass CLI untuk mengembangkan dan men-debug komponen lokal.  
 <a name="local-dev-tools-production-environment-warning"></a>Kami menyarankan Anda menggunakan komponen ini hanya di lingkungan pengembangan, bukan lingkungan produksi. Komponen ini menyediakan akses ke informasi dan operasi yang biasanya tidak Anda perlukan di lingkungan produksi. Ikuti prinsip hak istimewa paling sedikit dengan menerapkan komponen ini hanya ke perangkat inti di mana Anda membutuhkannya. 
Default: `false`

`INIT_CONFIG`  
(Opsional) Jalur ke file konfigurasi yang akan digunakan untuk menginstal perangkat lunak AWS IoT Greengrass Core. Anda dapat menggunakan opsi ini untuk mengatur perangkat inti Greengrass baru dengan konfigurasi inti tertentu, atau untuk menentukan sumber daya yang ditetapkan secara manual, misalnya. Anda harus memasang file konfigurasi Anda ke jalur yang Anda tentukan dalam argumen ini. 

`TRUSTED_PLUGIN`  
[Fitur ini tersedia untuk v2.4.0 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md)  
(Opsional) Jalur ke file JAR untuk dimuat sebagai plugin tepercaya. [Gunakan opsi ini untuk menyediakan file JAR plugin penyediaan, seperti menginstal dengan [penyediaan armada atau penyediaan khusus.](fleet-provisioning.md)](custom-provisioning.md) 

`THING_POLICY_NAME`  
[Fitur ini tersedia untuk v2.4.0 dan yang lebih baru dari komponen inti Greengrass.](greengrass-nucleus-component.md)  
(Opsional) Nama AWS IoT kebijakan untuk dilampirkan ke sertifikat AWS IoT benda perangkat inti ini. Jika AWS IoT kebijakan dengan nama ini tidak ada di perangkat lunak AWS IoT Greengrass Core Anda Akun AWS membuatnya.   
Anda harus menentukan `PROVISION=true` untuk menerapkan argumen ini.  
Perangkat lunak AWS IoT Greengrass Core membuat AWS IoT kebijakan permisif secara default. Anda dapat menjelaskan kebijakan ini, atau membuat kebijakan khusus yang membatasi izin untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat [AWS IoT Kebijakan minimal untuk perangkat AWS IoT Greengrass V2 inti](device-auth.md#greengrass-core-minimal-iot-policy). 

## Tentukan dependensi yang akan dipasang
<a name="dockerfile-run-instruction"></a>

Instruksi RUN di AWS IoT Greengrass Dockerfile mempersiapkan lingkungan kontainer untuk menjalankan penginstal perangkat lunak AWS IoT Greengrass Core. Anda dapat menyesuaikan dependensi yang diinstal sebelum penginstal perangkat lunak inti AWS IoT Greengrass berjalan di kontainer Docker. 

## Bangun AWS IoT Greengrass gambar
<a name="build-greengrass-docker-image"></a>

Gunakan AWS IoT Greengrass Dockerfile untuk membangun image AWS IoT Greengrass container. Anda dapat menggunakan CLI Docker atau Docker Compose CLI untuk membangun citra dan memulai kontainer tersebut. Anda juga dapat menggunakan CLI Docker untuk membangun citra dan kemudian menggunakan Docker Compose untuk memulai kontainer Anda dari citra tersebut.

------
#### [ Docker ]

1. Pada mesin host, jalankan perintah berikut untuk beralih ke direktori yang berisi Dockerfile yang dikonfigurasi.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Jalankan perintah berikut untuk membangun image AWS IoT Greengrass container dari Dockerfile.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. Pada mesin host, jalankan perintah berikut untuk beralih ke direktori yang berisi Dockerfile dan file Compose.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Jalankan perintah berikut untuk menggunakan file Compose untuk membangun image AWS IoT Greengrass container.

   ```
   docker-compose -f docker-compose.yml build
   ```

------

Anda telah berhasil membuat gambar AWS IoT Greengrass kontainer. Gambar Docker memiliki perangkat lunak AWS IoT Greengrass Core yang diinstal. Anda sekarang dapat menjalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker.

# Jalankan AWS IoT Greengrass dalam wadah Docker dengan penyediaan sumber daya otomatis
<a name="run-greengrass-docker-automatic-provisioning"></a>

Tutorial ini menunjukkan cara menginstal dan menjalankan perangkat lunak AWS IoT Greengrass Core dalam wadah Docker dengan AWS sumber daya yang disediakan secara otomatis dan alat pengembangan lokal. Anda dapat menggunakan lingkungan pengembangan ini untuk menjelajahi AWS IoT Greengrass fitur dalam wadah Docker. Perangkat lunak ini membutuhkan AWS kredensyal untuk menyediakan sumber daya ini dan menyebarkan alat pengembangan lokal.

Jika Anda tidak dapat memberikan AWS kredensi ke penampung, Anda dapat menyediakan AWS sumber daya yang dibutuhkan perangkat inti untuk beroperasi. Anda juga dapat men-deploy alat pengembangan ke perangkat inti untuk digunakan sebagai perangkat pengembangan. Ini memungkinkan Anda memberikan lebih sedikit izin ke perangkat saat menjalankan penampung. Untuk informasi selengkapnya, lihat [Jalankan AWS IoT Greengrass dalam wadah Docker dengan penyediaan sumber daya manual](run-greengrass-docker-manual-provisioning.md).



## Prasyarat
<a name="docker-automatic-provisioning-prereqs"></a>

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut ini:
+ Sebuah Akun AWS. Jika Anda tidak memilikinya, lihat [Mengatur sebuah Akun AWS](setting-up.md#set-up-aws-account). 
+ Pengguna AWS IAM dengan izin untuk menyediakan sumber daya AWS IoT dan IAM untuk perangkat inti Greengrass. Penginstal perangkat lunak AWS IoT Greengrass Core menggunakan AWS kredensyal Anda untuk menyediakan sumber daya ini secara otomatis. Untuk informasi tentang kebijakan IAM minimal untuk secara otomatis menyediakan sumber daya, lihat[Kebijakan IAM minimal untuk penginstal untuk menyediakan sumber daya](provision-minimal-iam-policy.md).
+ Gambar AWS IoT Greengrass Docker. Anda dapat [membuat gambar dari AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ Komputer host tempat Anda menjalankan wadah Docker harus memenuhi persyaratan berikut:
  + <a name="docker-host-reqs"></a>Sistem operasi berbasis Linux dengan koneksi internet.
  + <a name="docker-engine-reqs"></a>[Mesin Docker](https://docs.docker.com/engine/install/) versi 18.09 atau yang lebih baru.
  + <a name="docker-compose-reqs"></a>(Opsional) [Docker Compose](https://docs.docker.com/compose/install/) versi 1.22 atau yang lebih baru. Docker Compose diperlukan hanya jika Anda ingin menggunakan Docker Compose CLI untuk menjalankan gambar Docker Anda.

## Konfigurasikan AWS kredensyal Anda
<a name="configure-aws-credentials-for-docker"></a>

Pada langkah ini, Anda membuat file kredensial pada komputer host yang berisi kredensial keamanan AWS . Saat Anda menjalankan image AWS IoT Greengrass Docker, Anda harus me-mount folder yang berisi file kredensi ini ke `/root/.aws/` dalam wadah Docker. AWS IoT Greengrass Pemasang menggunakan kredensyal ini untuk menyediakan sumber daya di Anda. Akun AWS Untuk informasi tentang kebijakan IAM minimal yang diperlukan installer untuk secara otomatis menyediakan sumber daya, lihat [Kebijakan IAM minimal untuk penginstal untuk menyediakan sumber daya](provision-minimal-iam-policy.md).

1. Ambil salah satu dari yang berikut ini.
   + Kredensial jangka panjang untuk pengguna IAM. Untuk informasi tentang cara mengambil kredensial jangka panjang, lihat [Mengelola access key untuk pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) di *Panduan Pengguna IAM*.
   + (Disarankan) Kredensial sementara untuk IAM role: Untuk informasi tentang cara mengambil kredensial sementara, lihat [Menggunakan kredensial keamanan sementara dengan AWS CLI](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli) di *Panduan Pengguna IAM*.

1. Buat folder tempat Anda menempatkan file kredensial Anda.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. Gunakan editor teks untuk membuat file konfigurasi bernama `credentials` di folder `./greengrass-v2-credentials`.

   Misalnya, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat file `credentials`. 

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. Tambahkan AWS kredensyal Anda ke `credentials` file dalam format berikut.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   Sertakan `aws_session_token` untuk kredensial sementara saja.

**penting**  
Hapus file kredensyal dari komputer host setelah Anda memulai AWS IoT Greengrass wadah. Jika Anda tidak menghapus file kredensialnya, AWS kredensyal Anda akan tetap terpasang di dalam wadah. Untuk informasi selengkapnya, lihat [Jalankan perangkat lunak AWS IoT Greengrass Core dalam wadah](#run-greengrass-image-automatic-provisioning).

## Buat sebuah file lingkungan.
<a name="create-env-file-automatic-provisioning"></a>

Tutorial ini menggunakan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke installer perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Anda juga dapat menggunakan [argumen `-e` atau `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) di perintah `docker run` Anda untuk mengatur variabel lingkungan dalam kontainer Docker atau Anda dapat mengatur variabel dalam [sebuah blok `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) di file `docker-compose.yml`.

1. Gunakan editor teks untuk membuat file lingkungan bernama `.env`.

   Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat `.env` pada direktori saat ini.

   ```
   nano .env
   ```

1. Salin konten berikut ke dalam file tersebut.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   Anda harus mengganti nilai berikut.
   + `/greengrass/v2`. Folder root Greengrass yang ingin Anda gunakan untuk instalasi. Anda dapat menggunakan variabel lingkungan `GGC_ROOT` untuk menetapkan nilai ini.
   + *region*. Di Wilayah AWS mana Anda menciptakan sumber daya.
   + *MyGreengrassCore*. Nama AWS IoT benda itu. Jika objek tidak ada, installer akan membuatnya. Pemasang mengunduh sertifikat untuk diautentikasi sebagai masalahnya. AWS IoT 
   + *MyGreengrassCoreGroup*. Nama kelompok AWS IoT benda. Jika grup objek tidak ada, installer akan membuatnya dan menambahkan objek padanya. Jika grup objek ada dan memiliki deployment yang aktif, perangkat inti akan men-download dan menjalankan perangkat lunak yang ditetapkan oleh deployment.
   +  *GreengrassV2TokenExchangeRole*. Ganti dengan nama peran pertukaran token IAM yang memungkinkan perangkat inti Greengrass mendapatkan kredenal sementara. AWS Jika peran tidak ada, penginstal akan membuatnya dan membuat serta melampirkan kebijakan bernama *GreengrassV2TokenExchangeRole* Access. Untuk informasi selengkapnya, lihat [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md).
   + *GreengrassCoreTokenExchangeRoleAlias*. Alias peran pertukaran token. Jika alias peran tidak ada, penginstal akan membuatnya dan mengarahkannya ke peran pertukaran token IAM yang Anda tentukan. Untuk informasi selengkapnya, silakan lihat 
**catatan**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Anda dapat mengatur variabel `DEPLOY_DEV_TOOLS` lingkungan `true` untuk menyebarkan komponen [CLI Greengrass](greengrass-cli-component.md), yang memungkinkan Anda mengembangkan komponen khusus di dalam wadah Docker. <a name="local-dev-tools-production-environment-warning"></a>Kami menyarankan Anda menggunakan komponen ini hanya di lingkungan pengembangan, bukan lingkungan produksi. Komponen ini menyediakan akses ke informasi dan operasi yang biasanya tidak Anda perlukan di lingkungan produksi. Ikuti prinsip hak istimewa paling sedikit dengan menerapkan komponen ini hanya ke perangkat inti di mana Anda membutuhkannya. 

## Jalankan perangkat lunak AWS IoT Greengrass Core dalam wadah
<a name="run-greengrass-image-automatic-provisioning"></a>

Tutorial ini menunjukkan cara memulai gambar Docker yang Anda buat di wadah Docker. Anda dapat menggunakan CLI Docker atau CLI Docker Compose untuk AWS IoT Greengrass menjalankan image perangkat lunak Core dalam wadah Docker. 

------
#### [ Docker ]

1. Jalankan perintah berikut untuk memulai kontainer Docker. 

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   Contoh perintah ini menggunakan argumen berikut untuk [docker run](https://docs.docker.com/engine/reference/commandline/run/):
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Membersihkan kontainer saat keluar.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Menggunakan proses init dalam kontainer. 
**catatan**  
`--init`Argumen diperlukan untuk mematikan perangkat lunak AWS IoT Greengrass Core saat Anda menghentikan wadah Docker.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opsional) Menjalankan kontainer Docker di latar depan sebagai proses interaktif. Anda dapat mengganti ini dengan `-d` untuk menjalankan kontainer Docker dalam mode terpisah sebagai gantinya. Untuk informasi lebih lanjut, lihat: [Terpisah vs latar depan](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)dalam dokumentasi Docker.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Menjalankan kontainer bernama `aws-iot-greengrass` 
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Pasang volume ke dalam wadah Docker untuk membuat file konfigurasi dan file sertifikat tersedia untuk AWS IoT Greengrass berjalan di dalam wadah.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opsional) Menentukan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke penginstal perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Argumen ini diperlukan hanya jika Anda membuat [file lingkungan](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) untuk mengatur variabel lingkungan. Jika Anda tidak membuat file lingkungan, Anda dapat menggunakan `--env` argumen untuk mengatur variabel lingkungan secara langsung di perintah run Docker Anda.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opsional) Menerbitkan port kontainer 8883 ke mesin host. Argumen ini diperlukan jika Anda ingin terhubung dan berkomunikasi melalui MQTT karena AWS IoT Greengrass menggunakan port 8883 untuk lalu lintas MQTT. Untuk membuka port lain, gunakan `-p` argumen tambahan.
**catatan**  <a name="docker-run-cap-drop"></a>
Untuk menjalankan kontainer Docker Anda dengan peningkatan keamanan, Anda dapat menggunakan `--cap-drop` dan `--cap-add` untuk secara selektif mengaktifkan kemampuan Linux untuk kontainer Anda. Untuk informasi lebih lanjut, lihat:[Keistimewaan waktu aktif dan kemampuan Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dalam dokumentasi Docker.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Hapus kredensyal dari `./greengrass-v2-credentials` perangkat host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**penting**  
Anda menghapus kredensyal ini, karena mereka memberikan izin luas yang hanya dibutuhkan perangkat inti selama penyiapan. Jika Anda tidak menghapus kredensyal ini, komponen Greengrass dan proses lain yang berjalan di wadah dapat mengaksesnya. Jika Anda perlu memberikan AWS kredensyal ke komponen Greengrass, gunakan layanan pertukaran token. Untuk informasi selengkapnya, lihat [Berinteraksi dengan AWS layanan](interact-with-aws-services.md).

------
#### [ Docker Compose ]

1. Gunakan editor teks untuk membuat file Docker Compose dengan nama `docker-compose.yml`.

   Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat `docker-compose.yml` pada direktori saat ini.

   ```
   nano docker-compose.yml
   ```
**catatan**  
Anda juga dapat mengunduh dan menggunakan versi terbaru dari file Tulis AWS yang disediakan dari. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Tambahkan konten berikut ini ke file Compose. File Anda akan terlihat seperti contoh berikut. Ganti *docker-image* dengan nama image Docker Anda. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Parameter berikut dalam contoh file Compose ini bersifat opsional:
   + `ports`—Menerbitkan port kontainer 8883 ke mesin host. Parameter ini diperlukan jika Anda ingin terhubung dan berkomunikasi melalui MQTT karena AWS IoT Greengrass menggunakan port 8883 untuk lalu lintas MQTT. 
   + `env_file`—Menentukan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke penginstal perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Parameter ini diperlukan hanya jika Anda membuat [file lingkungan](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) untuk mengatur variabel lingkungan. Jika Anda tidak membuat file lingkungan, Anda dapat menggunakan parameter [lingkungan](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) untuk menyetel variabel secara langsung di file Compose Anda.
**catatan**  <a name="docker-compose-cap-drop"></a>
Untuk menjalankan kontainer Docker Anda dengan peningkatan keamanan, Anda dapat menggunakan `cap_drop` dan `cap_add` dalam file Compose Anda untuk secara selektif mengaktifkan kemampuan Linux untuk kontainer Anda. Untuk informasi lebih lanjut, lihat: [Keistimewaan waktu aktif dan kemampuan Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dalam dokumentasi Docker.

1. Jalankan perintah berikut untuk memulai kontainer Docker.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Hapus kredensyal dari `./greengrass-v2-credentials` perangkat host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**penting**  
Anda menghapus kredensyal ini, karena mereka memberikan izin luas yang hanya dibutuhkan perangkat inti selama penyiapan. Jika Anda tidak menghapus kredensyal ini, komponen Greengrass dan proses lain yang berjalan di wadah dapat mengaksesnya. Jika Anda perlu memberikan AWS kredensyal ke komponen Greengrass, gunakan layanan pertukaran token. Untuk informasi selengkapnya, lihat [Berinteraksi dengan AWS layanan](interact-with-aws-services.md).

------

## Langkah selanjutnya
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Perangkat lunak inti sekarang berjalan dalam wadah Docker. Jalankan perintah berikut untuk mengambil ID kontainer untuk kontainer yang sedang berjalan.

```
docker ps
```

Anda kemudian dapat menjalankan perintah berikut untuk mengakses wadah dan menjelajahi perangkat lunak AWS IoT Greengrass Core yang berjalan di dalam wadah.

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

Untuk informasi tentang membuat komponen sederhana, lihat [Langkah 4: Kembangkan dan uji komponen di perangkat Anda](create-first-component.md) di [Tutorial: Memulai dengan AWS IoT Greengrass V2](getting-started.md)

**catatan**  <a name="run-greengrass-commands-in-docker-note"></a>
Saat Anda menggunakan `docker exec` untuk menjalankan perintah di dalam kontainer Docker, perintah tersebut tidak tercatat di log Docker. Untuk mencatat perintah Anda di log Docker, lampirkan shell interaktif ke kontainer Docker. Untuk informasi selengkapnya, lihat [Lampirkan shell interaktif ke kontainer Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

File log AWS IoT Greengrass Core dipanggil `greengrass.log` dan terletak di`/greengrass/v2/logs`. File log komponen juga terletak di direktori yang sama. Untuk menyalin log Greengrass ke direktori sementara pada host, jalankan perintah berikut:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Jika Anda ingin mempertahankan log setelah keluar kontainer atau telah dihapus, kami sarankan Anda hanya melakukan bind-mount pada direktori `/greengrass/v2/logs` ke direktori log sementara pada host dan bukan memasang seluruh direktori Greengrass. Untuk informasi selengkapnya, lihat [Pertahankan log Greengrass di luar kontainer Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Untuk menghentikan kontainer AWS IoT Greengrass Docker yang sedang berjalan, jalankan `docker stop` atau`docker-compose -f docker-compose.yml stop`. Tindakan ini akan mengirimkan `SIGTERM` ke proses Greengrass dan menutup semua proses terkait yang dimulai dalam kontainer tersebut. Kontainer Docker diinisialisasi dengan executable `docker-init` sebagai proses PID 1, yang membantu dalam menghapus proses zombie sisa. Untuk informasi selengkapnya, lihat [Menentukan proses init](https://docs.docker.com/engine/reference/run/#specify-an-init-process) dalam dokumentasi Docker.

<a name="see-docker-troubleshooting"></a>Untuk informasi tentang pemecahan masalah dengan menjalankan AWS IoT Greengrass dalam kontainer Docker, lihat [Pemecahan masalah AWS IoT Greengrass dalam wadah Docker](docker-troubleshooting.md).

# Jalankan AWS IoT Greengrass dalam wadah Docker dengan penyediaan sumber daya manual
<a name="run-greengrass-docker-manual-provisioning"></a>

Tutorial ini menunjukkan cara menginstal dan menjalankan perangkat lunak AWS IoT Greengrass Core di wadah Docker dengan sumber daya yang disediakan AWS secara manual.

**Topics**
+ [Prasyarat](#docker-manual-provisioning-prereqs)
+ [Ambil titik akhir AWS IoT](#retrieve-iot-endpoints)
+ [Ciptakan AWS IoT sesuatu](#create-iot-thing)
+ [Buat sertifikat benda](#create-thing-certificate-mp)
+ [Buat peran pertukaran token](#create-token-exchange-role)
+ [Unduh sertifikat ke perangkat](#download-thing-certificates)
+ [Buat file konfigurasi](#create-docker-install-configuration-file)
+ [Buat sebuah file lingkungan.](#create-env-file-manual-provisioning)
+ [Jalankan perangkat lunak AWS IoT Greengrass Core dalam wadah](#run-greengrass-image-manual-provisioning)
+ [Langkah selanjutnya](#run-greengrass-docker-next-steps)

## Prasyarat
<a name="docker-manual-provisioning-prereqs"></a>

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:
+ Sebuah Akun AWS. Jika Anda tidak memilikinya, lihat [Mengatur sebuah Akun AWS](setting-up.md#set-up-aws-account). 
+ Sebuah gambar AWS IoT Greengrass Docker. Anda dapat [membuat gambar dari AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ Komputer host tempat Anda menjalankan wadah Docker harus memenuhi persyaratan berikut:
  + <a name="docker-host-reqs"></a>Sistem operasi berbasis Linux dengan koneksi internet.
  + <a name="docker-engine-reqs"></a>[Mesin Docker](https://docs.docker.com/engine/install/) versi 18.09 atau yang lebih baru.
  + <a name="docker-compose-reqs"></a>(Opsional) [Docker Compose](https://docs.docker.com/compose/install/) versi 1.22 atau yang lebih baru. Docker Compose diperlukan hanya jika Anda ingin menggunakan Docker Compose CLI untuk menjalankan gambar Docker Anda.

## Ambil titik akhir AWS IoT
<a name="retrieve-iot-endpoints"></a>

Dapatkan AWS IoT titik akhir untuk Anda Akun AWS, dan simpan untuk digunakan nanti. Perangkat Anda menggunakan titik akhir ini untuk tersambung ke AWS IoT. Lakukan hal-hal berikut:

1. Dapatkan titik akhir AWS IoT data untuk Anda Akun AWS.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Dapatkan titik akhir AWS IoT kredensyal untuk Anda. Akun AWS

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## Ciptakan AWS IoT sesuatu
<a name="create-iot-thing"></a>

AWS IoT *hal-hal* mewakili perangkat dan entitas logis yang terhubung ke AWS IoT. Perangkat inti Greengrass adalah benda. AWS IoT Saat Anda mendaftarkan perangkat sebagai AWS IoT sesuatu, perangkat itu dapat menggunakan sertifikat digital untuk mengautentikasi. AWS

Di bagian ini, Anda membuat AWS IoT sesuatu yang mewakili perangkat Anda.

**Untuk menciptakan AWS IoT sesuatu**

1. Buat AWS IoT sesuatu untuk perangkat Anda. Pada komputer pengembangan Anda, jalankan perintah berikut.
   + Ganti *MyGreengrassCore* dengan nama benda yang akan digunakan. Nama ini juga merupakan nama perangkat inti Greengrass Anda.
**catatan**  <a name="install-argument-thing-name-constraint"></a>
Nama objek tidak dapat berisi karakter titik dua (`:`).

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (Opsional) Tambahkan AWS IoT benda ke grup hal baru atau yang sudah ada. Anda menggunakan grup objek untuk mengelola armada perangkat inti Greengrass. Saat menerapkan komponen perangkat lunak ke perangkat, Anda dapat menargetkan perangkat individual atau grup perangkat. Anda dapat menambahkan suatu perangkat ke grup objek dengan deployment Greengrass aktif untuk men-deploy komponen perangkat lunak grup objek tersebut ke perangkat. Lakukan hal-hal berikut:

   1. (Opsional) Buat grup AWS IoT benda.
      + Ganti *MyGreengrassCoreGroup* dengan nama grup benda yang akan dibuat.
**catatan**  <a name="install-argument-thing-group-name-constraint"></a>
Nama grup objek tidak dapat berisi karakter titik dua (`:`).

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Tambahkan AWS IoT benda itu ke grup benda.
      + Ganti *MyGreengrassCore* dengan nama AWS IoT benda Anda.
      + Ganti *MyGreengrassCoreGroup* dengan nama grup benda.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      Perintah tersebut tidak memiliki output apa pun jika permintaan berhasil.

## Buat sertifikat benda
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>Saat Anda mendaftarkan perangkat sebagai AWS IoT sesuatu, perangkat itu dapat menggunakan sertifikat digital untuk mengautentikasi. AWS Sertifikat ini memungkinkan perangkat untuk berkomunikasi dengan AWS IoT dan AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>Di bagian ini, Anda membuat dan mengunduh sertifikat yang dapat digunakan perangkat Anda untuk terhubung AWS.<a name="create-thing-certificate-cloud-steps"></a>

**Untuk membuat sertifikat benda**

1. Buat folder tempat Anda mengunduh sertifikat untuk AWS IoT benda itu.

   ```
   mkdir greengrass-v2-certs
   ```

1. Buat dan unduh sertifikat untuk AWS IoT benda itu.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   Simpan Nama Sumber Daya Amazon (ARN) sertifikat yang akan digunakan untuk mengonfigurasi sertifikat nanti.

Selanjutnya, konfigurasikan sertifikat benda. Untuk informasi selengkapnya, lihat [Konfigurasikan sertifikat benda](manual-installation.md#configure-thing-certificate).

## Buat peran pertukaran token
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Perangkat inti Greengrass menggunakan peran layanan IAM, yang disebut peran *pertukaran token, untuk mengotorisasi* panggilan ke layanan. AWS Perangkat menggunakan penyedia AWS IoT kredensional untuk mendapatkan AWS kredensi sementara untuk peran ini, yang memungkinkan perangkat berinteraksi, mengirim log ke Amazon Log AWS IoT, dan mengunduh CloudWatch artefak komponen khusus dari Amazon S3. Untuk informasi selengkapnya, lihat [Otorisasi perangkat inti untuk berinteraksi dengan layanan AWS](device-service-role.md).

<a name="installation-create-token-exchange-role-alias-intro"></a>Anda menggunakan *alias AWS IoT peran* untuk mengonfigurasi peran pertukaran token untuk perangkat inti Greengrass. Alias peran memungkinkan Anda mengubah peran pertukaran token untuk suatu perangkat tetapi menjaga konfigurasi perangkat tetap sama. 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 *.

Di bagian ini, Anda membuat peran IAM pertukaran token dan alias AWS IoT peran yang menunjuk ke peran tersebut. Jika Anda telah menyiapkan perangkat inti Greengrass, Anda dapat menggunakan peran pertukaran token dan alias peran alih-alih membuat yang baru. Kemudian, Anda mengonfigurasi objek AWS IoT untuk menggunakan peran dan alias itu.

**Buat peran pertukaran token IAM role**

1. <a name="create-token-exchange-role-create-iam-role"></a>Buat peran IAM yang dapat digunakan perangkat Anda sebagai peran pertukaran token. Lakukan hal-hal berikut:

   1. Buat file yang berisi dokumen kebijakan kepercayaan yang memerlukan peran pertukaran token.

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

      ```
      nano device-role-trust-policy.json
      ```

      Salin JSON berikut ke dalam file.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Buat peran pertukaran token dengan dokumen kebijakan kepercayaan.
      + Ganti *GreengrassV2TokenExchangeRole* dengan nama peran IAM yang akan dibuat.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. Buat file yang berisi dokumen kebijakan akses yang diperlukan oleh peran pertukaran token.

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

      ```
      nano device-role-access-policy.json
      ```

      Salin JSON berikut ke dalam file.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**catatan**  
Kebijakan akses ini tidak mengizinkan akses ke artefak komponen dalam bucket S3. Untuk men-deploy komponen kustom yang menentukan artefak di Amazon S3, Anda harus menambahkan izin untuk peran tersebut untuk memungkinkan perangkat inti Anda untuk mengambil artefak komponen. Untuk informasi selengkapnya, lihat [Izinkan akses ke bucket S3 untuk artefak komponen](device-service-role.md#device-service-role-access-s3-bucket).  
Jika Anda belum memiliki bucket S3 untuk artefak komponen, Anda dapat menambahkan izin ini nanti setelah membuat bucket.

   1. Buat kebijakan IAM dari dokumen kebijakan.
      + Ganti *GreengrassV2TokenExchangeRoleAccess* dengan nama kebijakan IAM yang akan dibuat.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. Lampirkan kebijakan IAM untuk peran pertukaran token.
      + Ganti *GreengrassV2TokenExchangeRole* dengan nama peran IAM.
      + Ganti ARN peran dengan ARN dari kebijakan IAM yang Anda buat di langkah sebelumnya.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      Perintah tersebut tidak memiliki output apa pun jika permintaan berhasil.

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>Buat alias AWS IoT peran yang menunjuk ke peran pertukaran token.
   + Ganti *GreengrassCoreTokenExchangeRoleAlias* dengan nama alias peran yang akan dibuat.
   + Ganti ARN peran dengan ARN dari IAM role yang Anda buat di langkah sebelumnya.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**catatan**  
Untuk membuat alias peran, Anda harus memiliki izin untuk melewati IAM role pertukaran token ke AWS IoT. Jika Anda menerima pesan galat saat mencoba membuat alias peran, periksa apakah AWS pengguna Anda memiliki izin ini. Untuk informasi selengkapnya, lihat [Memberikan izin pengguna untuk meneruskan peran ke AWS layanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) di *AWS Identity and Access Management Panduan Pengguna*.

1. Buat dan lampirkan AWS IoT kebijakan yang memungkinkan perangkat inti Greengrass Anda menggunakan alias peran untuk mengambil peran pertukaran token. Jika Anda telah menyiapkan perangkat inti Greengrass sebelumnya, Anda dapat melampirkan kebijakan AWS IoT alias perannya alih-alih membuat yang baru. Lakukan hal-hal berikut:

   1. (Opsional) Buat file yang berisi dokumen AWS IoT kebijakan yang diperlukan alias peran.

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

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      Salin JSON berikut ke dalam file.
      + Ganti ARN sumber daya dengan ARN alias peran Anda.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. Buat AWS IoT kebijakan dari dokumen kebijakan.
      + Ganti *GreengrassCoreTokenExchangeRoleAliasPolicy* dengan nama AWS IoT kebijakan yang akan dibuat.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      Respons tersebut serupa dengan contoh berikut ini, jika permintaannya berhasil.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. Lampirkan AWS IoT kebijakan ke sertifikat AWS IoT benda itu.
      + Ganti *GreengrassCoreTokenExchangeRoleAliasPolicy* dengan nama AWS IoT kebijakan alias peran.
      + Ganti ARN target dengan ARN sertifikat untuk objek AWS IoT Anda.

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      Perintah tersebut tidak memiliki output apa pun jika permintaan berhasil.

## Unduh sertifikat ke perangkat
<a name="download-thing-certificates"></a>

Sebelumnya, Anda mengunduh sertifikat perangkat ke komputer pengembangan Anda. Di bagian ini, Anda mengunduh sertifikat otoritas sertifikat root Amazon (CA). Kemudian, jika Anda berencana untuk menjalankan perangkat lunak AWS IoT Greengrass Core di Docker pada komputer yang berbeda dari komputer pengembangan Anda, Anda menyalin sertifikat ke komputer host itu. Perangkat lunak AWS IoT Greengrass Core menggunakan sertifikat ini untuk terhubung ke layanan AWS IoT cloud.

**Untuk mengunduh sertifikat ke perangkat**

1. Di komputer pengembangan Anda, unduh sertifikat otoritas sertifikat root Amazon (CA). AWS IoT sertifikat dikaitkan dengan sertifikat CA root Amazon secara default.

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

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. Jika Anda berencana untuk menjalankan perangkat lunak AWS IoT Greengrass Core di Docker pada perangkat yang berbeda dari komputer pengembangan Anda, salin sertifikat ke komputer host. Jika SSH dan SCP diaktifkan pada komputer pengembangan dan komputer host, Anda dapat menggunakan `scp` perintah di komputer pengembangan Anda untuk mentransfer sertifikat. Ganti *device-ip-address* dengan alamat IP komputer host Anda.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## Buat file konfigurasi
<a name="create-docker-install-configuration-file"></a>

1. Di komputer host, buat folder tempat Anda menempatkan file konfigurasi Anda.

   ```
   mkdir ./greengrass-v2-config
   ```

1. Gunakan editor teks untuk membuat file konfigurasi bernama `config.yaml` di folder `./greengrass-v2-config`.

   Misalnya, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat `config.yaml`. 

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. Salin konten YAML berikut ke dalam file tersebut. File konfigurasi parsial ini menentukan parameter sistem dan parameter inti Greengrass.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   Kemudian, ganti nilai berikut:
   + */tmp/certs*. Direktori dalam wadah Docker tempat Anda memasang sertifikat yang diunduh saat Anda memulai penampung.
   + `/greengrass/v2`. Folder root Greengrass yang ingin Anda gunakan untuk instalasi. Anda dapat menggunakan variabel lingkungan `GGC_ROOT` untuk menetapkan nilai ini.
   + *MyGreengrassCore*. Nama AWS IoT benda itu.
   + *nucleus-version*. Versi perangkat lunak AWS IoT Greengrass Core untuk diinstal. Nilai ini harus sesuai dengan versi gambar Docker atau Dockerfile yang telah Anda download. Jika Anda telah mengunduh citra Docker Greengrass dengan tanda `latest`, gunakan ****docker inspect *image-id***** untuk melihat versi citra tersebut.
   + *region*. Di Wilayah AWS mana Anda menciptakan AWS IoT sumber daya Anda. Anda juga harus menentukan nilai yang sama untuk variabel lingkungan `AWS_REGION` di [file lingkungan](#create-env-file-manual-provisioning).
   + *GreengrassCoreTokenExchangeRoleAlias*. Alias peran pertukaran token.
   + *device-data-prefix*. Awalan untuk titik akhir AWS IoT data Anda.
   + *device-credentials-prefix*. Awalan untuk titik akhir AWS IoT kredensyal Anda.

## Buat sebuah file lingkungan.
<a name="create-env-file-manual-provisioning"></a>

Tutorial ini menggunakan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke installer perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Anda juga dapat menggunakan [argumen `-e` atau `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) di perintah `docker run` Anda untuk mengatur variabel lingkungan dalam kontainer Docker atau Anda dapat mengatur variabel dalam [sebuah blok `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) di file `docker-compose.yml`.

1. Gunakan editor teks untuk membuat file lingkungan bernama `.env`.

   Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat `.env` pada direktori saat ini.

   ```
   nano .env
   ```

1. Salin konten berikut ke dalam file tersebut.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   Anda harus mengganti nilai berikut.
   + `/greengrass/v2`. Jalur ke folder root yang akan digunakan untuk menginstal perangkat lunak AWS IoT Greengrass Core.
   + *region*. Di Wilayah AWS mana Anda menciptakan AWS IoT sumber daya Anda. Anda harus menentukan nilai yang sama untuk parameter konfigurasi `awsRegion` di [file konfigurasi](#create-docker-install-configuration-file) Anda.
   + */tmp/config/*. Folder tempat Anda memasang file konfigurasi saat Anda memulai wadah Docker.
**catatan**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Anda dapat mengatur variabel `DEPLOY_DEV_TOOLS` lingkungan `true` untuk menyebarkan komponen [CLI Greengrass](greengrass-cli-component.md), yang memungkinkan Anda mengembangkan komponen khusus di dalam wadah Docker. <a name="local-dev-tools-production-environment-warning"></a>Kami menyarankan Anda menggunakan komponen ini hanya di lingkungan pengembangan, bukan lingkungan produksi. Komponen ini menyediakan akses ke informasi dan operasi yang biasanya tidak Anda perlukan di lingkungan produksi. Ikuti prinsip hak istimewa paling sedikit dengan menerapkan komponen ini hanya ke perangkat inti di mana Anda membutuhkannya. 

## Jalankan perangkat lunak AWS IoT Greengrass Core dalam wadah
<a name="run-greengrass-image-manual-provisioning"></a>

Tutorial ini menunjukkan cara memulai image Docker yang Anda bangun dalam wadah Docker. Anda dapat menggunakan CLI Docker atau CLI Docker Compose untuk AWS IoT Greengrass menjalankan image perangkat lunak Core dalam wadah Docker. 

------
#### [ Docker ]
+ Tutorial ini menunjukkan cara memulai gambar Docker yang Anda buat di wadah Docker. 

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  Contoh perintah ini menggunakan argumen berikut untuk [docker run](https://docs.docker.com/engine/reference/commandline/run/):
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Membersihkan kontainer saat keluar.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Menggunakan proses init dalam kontainer. 
**catatan**  
`--init`Argumen diperlukan untuk mematikan perangkat lunak AWS IoT Greengrass Core saat Anda menghentikan wadah Docker.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opsional) Menjalankan kontainer Docker di latar depan sebagai proses interaktif. Anda dapat mengganti ini dengan `-d` untuk menjalankan kontainer Docker dalam mode terpisah sebagai gantinya. Untuk informasi lebih lanjut, lihat: [Terpisah vs latar depan](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)dalam dokumentasi Docker.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Menjalankan kontainer bernama `aws-iot-greengrass` 
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Pasang volume ke dalam wadah Docker untuk membuat file konfigurasi dan file sertifikat tersedia untuk AWS IoT Greengrass berjalan di dalam wadah.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opsional) Menentukan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke penginstal perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Argumen ini diperlukan hanya jika Anda membuat [file lingkungan](#create-env-file-manual-provisioning) untuk mengatur variabel lingkungan. Jika Anda tidak membuat file lingkungan, Anda dapat menggunakan `--env` argumen untuk mengatur variabel lingkungan secara langsung di perintah run Docker Anda.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opsional) Menerbitkan port kontainer 8883 ke mesin host. Argumen ini diperlukan jika Anda ingin terhubung dan berkomunikasi melalui MQTT karena AWS IoT Greengrass menggunakan port 8883 untuk lalu lintas MQTT. Untuk membuka port lain, gunakan `-p` argumen tambahan.
**catatan**  <a name="docker-run-cap-drop"></a>
Untuk menjalankan kontainer Docker Anda dengan peningkatan keamanan, Anda dapat menggunakan `--cap-drop` dan `--cap-add` untuk secara selektif mengaktifkan kemampuan Linux untuk kontainer Anda. Untuk informasi lebih lanjut, lihat: [Keistimewaan waktu aktif dan kemampuan Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dalam dokumentasi Docker.

------
#### [ Docker Compose ]

1. Gunakan editor teks untuk membuat file Docker Compose dengan nama `docker-compose.yml`.

   Sebagai contoh, pada sistem berbasis Linux, Anda dapat menjalankan perintah berikut untuk menggunakan GNU nano untuk membuat `docker-compose.yml` pada direktori saat ini.

   ```
   nano docker-compose.yml
   ```
**catatan**  
Anda juga dapat mengunduh dan menggunakan versi terbaru dari file Tulis AWS yang disediakan dari. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Tambahkan konten berikut ini ke file Compose. File Anda akan terlihat seperti contoh berikut. Ganti *your-container-name:version* dengan nama image Docker Anda. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Parameter berikut dalam contoh file Compose ini bersifat opsional:
   + `ports`—Menerbitkan port kontainer 8883 ke mesin host. Parameter ini diperlukan jika Anda ingin terhubung dan berkomunikasi melalui MQTT karena AWS IoT Greengrass menggunakan port 8883 untuk lalu lintas MQTT. 
   + `env_file`—Menentukan file lingkungan untuk mengatur variabel lingkungan yang akan diteruskan ke penginstal perangkat lunak AWS IoT Greengrass Core di dalam wadah Docker. Parameter ini diperlukan hanya jika Anda membuat [file lingkungan](#create-env-file-manual-provisioning) untuk mengatur variabel lingkungan. Jika Anda tidak membuat file lingkungan, Anda dapat menggunakan parameter [lingkungan](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) untuk menyetel variabel secara langsung di file Compose Anda.
**catatan**  <a name="docker-compose-cap-drop"></a>
Untuk menjalankan kontainer Docker Anda dengan peningkatan keamanan, Anda dapat menggunakan `cap_drop` dan `cap_add` dalam file Compose Anda untuk secara selektif mengaktifkan kemampuan Linux untuk kontainer Anda. Untuk informasi lebih lanjut, lihat: [Keistimewaan waktu aktif dan kemampuan Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dalam dokumentasi Docker.

1. Jalankan perintah berikut untuk memulai kontainer.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## Langkah selanjutnya
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Perangkat lunak inti sekarang berjalan dalam wadah Docker. Jalankan perintah berikut untuk mengambil ID kontainer untuk kontainer yang sedang berjalan.

```
docker ps
```

Anda kemudian dapat menjalankan perintah berikut untuk mengakses wadah dan menjelajahi perangkat lunak AWS IoT Greengrass Core yang berjalan di dalam wadah.

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

Untuk informasi tentang membuat komponen sederhana, lihat [Langkah 4: Kembangkan dan uji komponen di perangkat Anda](create-first-component.md) di [Tutorial: Memulai dengan AWS IoT Greengrass V2](getting-started.md)

**catatan**  <a name="run-greengrass-commands-in-docker-note"></a>
Saat Anda menggunakan `docker exec` untuk menjalankan perintah di dalam kontainer Docker, perintah tersebut tidak tercatat di log Docker. Untuk mencatat perintah Anda di log Docker, lampirkan shell interaktif ke kontainer Docker. Untuk informasi selengkapnya, lihat [Lampirkan shell interaktif ke kontainer Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

File log AWS IoT Greengrass Core dipanggil `greengrass.log` dan terletak di`/greengrass/v2/logs`. File log komponen juga terletak di direktori yang sama. Untuk menyalin log Greengrass ke direktori sementara pada host, jalankan perintah berikut:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Jika Anda ingin mempertahankan log setelah keluar kontainer atau telah dihapus, kami sarankan Anda hanya melakukan bind-mount pada direktori `/greengrass/v2/logs` ke direktori log sementara pada host dan bukan memasang seluruh direktori Greengrass. Untuk informasi selengkapnya, lihat [Pertahankan log Greengrass di luar kontainer Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Untuk menghentikan kontainer AWS IoT Greengrass Docker yang sedang berjalan, jalankan `docker stop` atau`docker-compose -f docker-compose.yml stop`. Tindakan ini akan mengirimkan `SIGTERM` ke proses Greengrass dan menutup semua proses terkait yang dimulai dalam kontainer tersebut. Kontainer Docker diinisialisasi dengan executable `docker-init` sebagai proses PID 1, yang membantu dalam menghapus proses zombie sisa. Untuk informasi selengkapnya, lihat [Menentukan proses init](https://docs.docker.com/engine/reference/run/#specify-an-init-process) dalam dokumentasi Docker.

<a name="see-docker-troubleshooting"></a>Untuk informasi tentang pemecahan masalah dengan menjalankan AWS IoT Greengrass dalam kontainer Docker, lihat [Pemecahan masalah AWS IoT Greengrass dalam wadah Docker](docker-troubleshooting.md).

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

Gunakan informasi berikut untuk membantu Anda memecahkan masalah dengan berjalan AWS IoT Greengrass di wadah Docker dan untuk men-debug masalah AWS IoT Greengrass di wadah Docker.

**Topics**
+ [Memecahkan masalah dengan menjalankan kontainer Docker](#troubleshooting-container-errors)
+ [Debugging AWS IoT Greengrass dalam wadah Docker](#debugging-greengrass-in-docker)

## Memecahkan masalah dengan menjalankan kontainer Docker
<a name="troubleshooting-container-errors"></a>

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

**Topics**
+ [Kesalahan: Tidak dapat melakukan login interaktif dari perangkat non TTY](#docker-troubleshootin-ecr-get-login-password)
+ [Kesalahan: Opsi tidak diketahui: - no-include-email](#docker-troubleshooting-cli-version)
+ [Kesalahan: Firewall memblokir berbagi file antara windows dan kontainer.](#docker-troubleshooting-firewall)
+ [Kesalahan: Terjadi kesalahan (AccessDeniedException) saat memanggil GetAuthorizationToken operasi: User: arn:aws:iam: ::user/ *account-id* <user-name>tidak diizinkan untuk melakukan: ecr: on resource: \$1 GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [Kesalahan: Anda telah mencapai batas kecepatan tarik](#docker-troubleshooting-too-many-requests)

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

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

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

Kesalahan ini dapat terjadi ketika Anda menjalankan perintah `aws ecr get-login`. Pastikan Anda telah menginstal AWS CLI versi terbaru (misalnya, Jalankan:`pip install awscli --upgrade --user`). Untuk informasi selengkapnya, lihat [AWS Command Line Interface Menginstal Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) di *Panduan AWS Command Line Interface Pengguna*.

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

Anda mungkin menerima kesalahan ini atau `Firewall Detected` saat menjalankan Docker di komputer Windows. Hal ini juga dapat terjadi jika Anda masuk pada jaringan pribadi virtual (VPN) dan pengaturan jaringan Anda mencegah dipasangnya drive bersama. Dalam situasi itu, matikan VPN dan jalankan kembali kontainer Docker.

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

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

### Kesalahan: Anda telah mencapai batas kecepatan tarik
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub membatasi jumlah permintaan tarik yang dapat dibuat oleh pengguna anonim dan Free Docker Hub. Jika Anda melebihi batas kecepatan tersebut untuk permintaan tarik pengguna anonim atau gratis, Anda akan menerima salah satu dari kesalahan berikut: 

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

Untuk mengatasi kesalahan ini, Anda dapat menunggu selama beberapa jam sebelum Anda mencoba permintaan tarik lain. Jika Anda berencana untuk secara konsisten mengirimkan sejumlah besar permintaan tarik, lihat [situs web Docker Hub](https://www.docker.com/increase-rate-limits) untuk informasi tentang batas kecepatan, dan opsi untuk mengautentikasi dan meningkatkan akun Docker Anda. 

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

Untuk men-debug masalah dengan kontainer Docker, Anda dapat mempertahankan log waktu aktif Greengrass atau melampirkan shell interaktif pada kontainer Docker.

### Pertahankan log Greengrass di luar kontainer Docker
<a name="debugging-docker-persist-logs"></a>

Setelah Anda menghentikan AWS IoT Greengrass wadah, Anda dapat menggunakan `docker cp ` perintah berikut untuk menyalin log Greengrass dari wadah Docker ke direktori log sementara. 

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Untuk mempertahankan log bahkan setelah wadah keluar atau dihapus, Anda harus menjalankan wadah AWS IoT Greengrass Docker setelah memasang direktori. `/greengrass/v2/logs` 

Untuk mengikat-mount `/greengrass/v2/logs` direktori, lakukan salah satu hal berikut saat Anda menjalankan wadah Docker baru AWS IoT Greengrass .
+ Sertakan `-v /tmp/logs:/greengrass/v2/logs:ro` di perintah `docker run`.

  Ubah blok `volumes` dalam file Compose untuk menyertakan baris berikut sebelum Anda menjalankan perintah `docker-compose up`.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

Anda kemudian dapat memeriksa log Anda `/tmp/logs` di host Anda untuk melihat log Greengrass AWS IoT Greengrass saat berjalan di dalam wadah Docker.

Untuk informasi tentang menjalankan kontainer Docker Greengrass, lihat [Jalankan AWS IoT Greengrass di Docker dengan penyediaan manual](run-greengrass-docker-manual-provisioning.md) dan [Jalankan AWS IoT Greengrass di Docker dengan penyediaan otomatis](run-greengrass-docker-automatic-provisioning.md)

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

Saat Anda menggunakan `docker exec` untuk menjalankan perintah di dalam kontainer Docker, perintah tersebut tidak tertangkap di log Docker. Pencatatan perintah Anda dalam log Docker dapat membantu Anda menyelidiki keadaan kontainer Docker Greengrass. Lakukan salah satu tindakan berikut:
+ Jalankan perintah berikut di terminal terpisah untuk melampirkan standar input, output, dan kesalahan terminal Anda ke kontainer yang sedang berjalan. Hal ini memungkinkan Anda untuk melihat dan mengontrol kontainer Docker dari terminal Anda saat ini.

  ```
  docker attach container-id
  ```
+ Jalankan perintah berikut pada terminal yang terpisah. Hal ini memungkinkan Anda untuk menjalankan perintah Anda dalam mode interaktif, bahkan jika kontainer tidak terlampir.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

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