

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

# 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).