

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

# Mengkonfigurasi file DockerRun.aws.json v2
<a name="create_deploy_docker_v2config"></a>

`Dockerrun.aws.json v2`adalah file konfigurasi Elastic Beanstalk yang menjelaskan cara menerapkan satu set wadah Docker yang dihosting di cluster ECS di lingkungan Elastic Beanstalk. *Platform Elastic Beanstalk menciptakan definisi tugas ECS, *yang mencakup definisi wadah ECS*.* Definisi ini dijelaskan dalam file `Dockerrun.aws.json` konfigurasi.

Definisi kontainer dalam `Dockerrun.aws.json` file menjelaskan kontainer yang akan diterapkan ke setiap instans Amazon EC2 di cluster ECS. Dalam hal ini instans Amazon EC2 juga disebut sebagai *instance container host, karena instans tersebut meng-host container* Docker. File konfigurasi juga menjelaskan volume data yang akan dibuat pada instance wadah host agar kontainer Docker dipasang. Untuk informasi lebih lanjut dan diagram komponen dalam lingkungan Docker yang dikelola ECS di Elastic Beanstalk, lihat sebelumnya di chapter ini. [Ikhtisar platform Docker yang dikelola ECS](create_deploy_docker_ecs.md#create_deploy_docker_ecs_platform)

 File `Dockerrun.aws.json` dapat digunakan sendiri atau di-zip dengan kode sumber tambahan dalam satu arsip. Kode sumber yang diarsipkan dengan`Dockerrun.aws.json`diterapkan ke instans kontainer Amazon EC2 dan dapat diakses di`/var/app/current/`Direktori. 

**Topics**
+ [`Dockerrun.aws.json` v2](#create_deploy_docker_v2config_dockerrun)
+ [Format volume](#create_deploy_docker_v2config_volume_format)
+ [Format ARN Peran Eksekusi](#create_deploy_docker_v2config_executionRoleArn_format)
+ [Format definisi kontainer](#create_deploy_docker_v2config_dockerrun_format)
+ [Format otentikasi — menggunakan gambar dari repositori pribadi](#docker-multicontainer-dockerrun-privaterepo)
+ [Contoh DockerRun.aws.json v2](#create_deploy_docker_v2config_example)

## `Dockerrun.aws.json` v2
<a name="create_deploy_docker_v2config_dockerrun"></a>

`Dockerrun.aws.json`File ini mencakup bagian-bagian berikut:

**AWSEBDockerrunVersi**  
Menentukan nomor versi sebagai nilai `2` untuk lingkungan Docker yang dikelola ECS.

**executionRoleArn **  
Menentukan peran IAM pelaksanaan tugas untuk berbagai tujuan dan layanan yang terkait dengan akun Anda. Agar aplikasi Anda menggunakan [variabel lingkungan Elastic Beanstalk yang disimpan](AWSHowTo.secrets.env-vars.md) sebagai rahasia, Anda harus menentukan ARN dari peran eksekusi tugas yang memberikan izin yang diperlukan. Kasus penggunaan umum lainnya mungkin juga memerlukan parameter ini. Untuk informasi selengkapnya, lihat [Format ARN Peran Eksekusi](#create_deploy_docker_v2config_executionRoleArn_format).

**volume**  
menciptakan volume dari folder dalam kontainer contoh Amazon EC2, atau dari bundel sumber Anda (diterapkan ke `/var/app/current`). Pasang volume ini ke jalur dalam wadah Docker Anda menggunakan `mountPoints` di `containerDefinitions` bagian.

**containerDefinitions**  
Array definisi kontainer.

**otentikasi (opsional)**  
Lokasi di Amazon S3 dari `.dockercfg` file yang berisi data otentikasi untuk repositori pribadi.

Bagian *ContainerDefinitions* *dan* volume menggunakan pemformatan yang sama dengan bagian yang sesuai dari file definisi tugas Amazon ECS. `Dockerrun.aws.json` Untuk informasi selengkapnya tentang format definisi tugas dan daftar lengkap parameter definisi tugas, lihat definisi tugas [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html) di *Panduan Pengembang Layanan Kontainer Elastis Amazon*.

## Format volume
<a name="create_deploy_docker_v2config_volume_format"></a>

Parameter *volume* membuat volume dari salah satu folder dalam instans penampung Amazon EC2, atau dari bundel sumber Anda (digunakan ke). `/var/app/current`

 Volume ditentukan dalam format berikut: 

```
"volumes": [
    {
      "name": "{{volumename}}",
      "host": {
        "sourcePath": "{{/path/on/host/instance}}"
      }
    }
  ],
```

Pasang volume ini ke jalur dalam container Docker Anda menggunakan `mountPoints` definisi container.

Elastic Beanstalk mengkonfigurasi volume tambahan untuk log, satu untuk setiap kontainer. Ini harus dipasang oleh kontainer Docker Anda untuk menulis log ke contoh host. 

Untuk detail selengkapnya, lihat `mountPoints` bidang di bagian *Format definisi kontainer* berikut.

## Format ARN Peran Eksekusi
<a name="create_deploy_docker_v2config_executionRoleArn_format"></a>

Agar aplikasi Anda menggunakan [variabel lingkungan Elastic Beanstalk yang disimpan](AWSHowTo.secrets.env-vars.md) sebagai rahasia, Anda harus menentukan peran IAM eksekusi tugas. Peran harus memberikan izin penampung Amazon ECS untuk melakukan panggilan AWS API atas nama Anda menggunakan AWS Secrets Manager rahasia atau AWS Systems Manager parameter Parameter Store untuk mereferensikan data sensitif. Untuk petunjuk untuk membuat peran IAM eksekusi tugas dengan izin yang diperlukan untuk akun Anda, lihat peran [IAM eksekusi tugas Amazon ECS di Panduan Pengembang Layanan](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) Amazon Elastic Container.

```
{
"AWSEBDockerrunVersion": 2,
  "executionRoleArn": "arn:aws:iam::{{111122223333}}:role/ecsTaskExecutionRole",
```

### Izin tambahan diperlukan untuk platform Docker yang dikelola Amazon ECS
<a name="create_deploy_docker_v2config_executionRoleArn_format_passRole"></a>

**Profil instans EC2 diberikan ke ECS `iam:PassRole`**  
Agar profil instans EC2 Anda dapat memberikan peran ini ke wadah ECS, Anda harus menyertakan `iam:PassRole` izin yang ditunjukkan dalam contoh berikut. `iam:PassRole`Ini memungkinkan izin instans EC2 *untuk meneruskan* peran eksekusi tugas ke wadah ECS.

Dalam contoh ini, kami membatasi instans EC2 untuk hanya meneruskan peran ke layanan ECS. Meskipun kondisi ini tidak diperlukan, kami menambahkannya untuk mengikuti praktik terbaik untuk mengurangi ruang lingkup izin yang dibagikan. Kami mencapai ini dengan `Condition` elemen.

**catatan**  
Setiap penggunaan peran eksekusi tugas ECS IAM memerlukan izin. `iam:PassRole` Ada kasus penggunaan umum lainnya yang memerlukan peran layanan terkelola eksekusi tugas ECS. Untuk informasi selengkapnya, lihat [peran IAM eksekusi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) di Panduan Pengembang Layanan Kontainer Elastis Amazon.



**Example kebijakan dengan `iam:PassRole` izin**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
                }
            }
        }
    ]
}
```





**Memberikan rahasia dan parameter akses ke agen kontainer Amazon ECS**  
Peran IAM eksekusi tugas Amazon ECS juga memerlukan izin untuk mengakses rahasia dan penyimpanan parameter. Serupa dengan persyaratan peran profil instans EC2, agen kontainer ECS memerlukan izin untuk menarik sumber daya Secrets Manager atau Systems Manager yang diperlukan. Untuk informasi selengkapnya, lihat [izin Secrets Manager atau Systems Manager di Panduan](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html#task-execution-secrets) *Pengembang Layanan Amazon Elastic Container*

**Memberikan akses rahasia dan parameter ke instans EC2 Elastic Beanstalk**  
Untuk mendukung rahasia yang dikonfigurasi sebagai variabel lingkungan, Anda juga perlu menambahkan izin ke profil instans EC2 Anda. Untuk informasi selengkapnya, lihat [Mengambil rahasia dan parameter ke variabel lingkungan Elastic Beanstalk](AWSHowTo.secrets.env-vars.md) dan [Izin IAM yang diperlukan untuk Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager).

Contoh berikut menggabungkan contoh sebelumnya dengan `iam:PassRole` contoh yang diberikan dalam referensi[Izin IAM yang diperlukan untuk Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager). Mereka menambahkan izin yang diperlukan instans EC2 untuk mengakses AWS Secrets Manager dan AWS Systems Manager menyimpan untuk mengambil rahasia dan data parameter untuk menginisialisasi variabel lingkungan Elastic Beanstalk yang telah dikonfigurasi untuk rahasia.

**Example Kebijakan Secrets Manager dikombinasikan dengan `iam:PassRole` izin**    
****  

```
{
    "Version": "{{2012-10-17}}",
    "Statement": [
       {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
               }
            } 
        },
        {
            "Effect": "{{Allow}}",
            "Action": [
                "{{secretsmanager:GetSecretValue}}",
                "{{kms:Decrypt}}"          
            ],
            "Resource": [
                "{{arn:aws:secretsmanager:us-east-1:{{111122223333}}:secret:my-secret}}",
                "{{arn:aws:kms:us-east-1:{{111122223333}}:key/my-key}}"
            ]
        }
    ]
}
```

**Example Kebijakan Systems Manager dikombinasikan dengan `iam:PassRole` izin**    
****  

```
{
    "Version": "{{2012-10-17}}",
    "Statement": [
       {
            "Effect": "Allow",
            "Action": "{{iam:PassRole}}",
            "Resource": [
                "{{arn:aws:iam::123456789012:role/ecs-task-execution-role}}"
            ],
            "Condition": {
                "StringLike": {
                    "{{iam:PassedToService}}": "{{ecs-tasks.amazonaws.com}}"
               }
            } 
        },
        {
            "Effect": "{{Allow}}",
            "Action": [
                "{{ssm:GetParameter}}",
                "{{kms:Decrypt}}"
            ],
            "Resource": [
                "{{arn:aws:ssm:us-east-1:{{111122223333}}:parameter/my-parameter}}",
                "{{arn:aws:kms:us-east-1:{{111122223333}}:key/my-key}}"
            ]
        }
    ]
}
```

## Format definisi kontainer
<a name="create_deploy_docker_v2config_dockerrun_format"></a>

Contoh berikut menunjukkan subset parameter yang umum digunakan di bagian *ContainerDefinitions*. Parameter opsional juga tersedia.

*Platform Beanstalk menciptakan *definisi tugas ECS, yang mencakup definisi* wadah ECS.* Beanstalk mendukung sub-set parameter untuk definisi wadah ECS. Untuk informasi selengkapnya, lihat [Definisi kontainer](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions) di *Panduan Pengembang Layanan Kontainer Elastis Amazon*.

File `Dockerrun.aws.json` berisi satu baris atau object yang lain dari definisi kontainer dengan bidang berikut:

**nama**  
Nama kontainer. Lihat [Parameter Definisi Kontainer Standar](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#standard_container_definition_params) untuk informasi tentang panjang maksimum dan karakter yang diizinkan.

**gambar**  
Nama gambar Docker dalam repositori Docker online tempat Anda membuat container Docker. Perhatikan konvensi ini:   
+  Gambar di repositori resmi di Docker Hub menggunakan satu nama (misalnya, `ubuntu` atau `mongo`).
+ Gambar di repositori lain di Docker Hub memenuhi syarat dengan nama organisasi (misalnya, `amazon/amazon-ecs-agent`.
+ Gambar di repositori online lainnya memenuhi syarat lebih lanjut dengan nama domain (misalnya, `quay.io/assemblyline/ubuntu`).

**Lingkungan**  
Sebuah susunan variabel lingkungan untuk melewati container   
Sebagai contoh, entri berikut mendefinisikan variabel lingkungan dengan nama **Container** dan nilai **PHP**:  

```
"environment": [
  {
    "name": "Container",
    "value": "PHP"
  }
],
```

**penting**  
Benar jika tugas harus berhenti jika kontainer gagal. Kontainer yang tidak penting dapat selesai atau mogok tanpa memengaruhi container lainnya pada contoh. 

**memori**  
Jumlah memori pada contoh kontainer untuk cadangan untuk kontainer. Tentukan bilangan bulat bukan nol untuk salah satu atau kedua parameter `memory` atau `memoryReservation` dalam definisi kontainer.

**memoryReservation**  
Batas lunak (di MiB) memori untuk cadangan untuk kontainer. Tentukan bilangan bulat bukan nol untuk salah satu atau kedua parameter `memory` atau `memoryReservation` dalam definisi kontainer.

**mountPoints**  
Volume dari instans kontainer Amazon EC2 yang akan dipasang, dan lokasi pada sistem file kontainer Docker tempat untuk memasangnya. Saat Anda memasang volume yang berisi konten aplikasi, kontainer Anda dapat membaca data yang Anda unggah di bundel sumber Anda. Ketika Anda memasang log volume untuk menulis log data, Elastic Beanstalk dapat mengumpulkan data log dari volume ini.   
 Elastic Beanstalk membuat volume log pada contoh kontainer, satu untuk setiap kontainer Docker, di `/var/log/containers/{{containername}}`. Volume ini diberi nama `awseb-logs-{{containername}}` dan harus dipasang ke lokasi dalam struktur file kontainer di mana log ditulis.   
Misalnya, titik pemasangan berikut memetakan lokasi log nginx dalam kontainer ke volume yang dihasilkan Elastic Beanstalk untuk kontainer `nginx-proxy`.   

```
{
  "sourceVolume": "awseb-logs-nginx-proxy",
  "containerPath": "/var/log/nginx"
}
```

**portMappings**  
Port jaringan peta pada kontainer untuk port pada host.

**Tautan**  
Daftar kontainer untuk ditautkan. kontainer yang ditautkan dapat saling menemukan dan berkomunikasi dengan aman. 

**volumesFrom**  
Pasang semua volume dari kontainer yang berbeda. Misalnya, untuk memasang volume dari kontainer bernama `web`:  

```
"volumesFrom": [
  {
    "sourceContainer": "web"
  }
],
```

## Format otentikasi — menggunakan gambar dari repositori pribadi
<a name="docker-multicontainer-dockerrun-privaterepo"></a>

`authentication`Bagian ini berisi data otentikasi untuk repositori pribadi. Entri ini opsional.

Tambahkan informasi tentang bucket Amazon S3 yang berisi berkas otentikasi di parameter `authentication` dari file `Dockerrun.aws.json`. Pastikan bahwa parameter `authentication` berisi bucket Amazon S3 yang valid dan kunci. bucket Amazon S3 harus di-hosting di wilayah yang sama dengan lingkungan yang menggunakannya. Elastic Beanstalk tidak akan mengunduh file dari Amazon S3 bucket yang dihosting di wilayah lain.

Menggunakan format berikut:

```
"authentication": {
    "bucket": "{{amzn-s3-demo-bucket}}",
    "key": "{{mydockercfg}}"
  },
```

Untuk informasi tentang menghasilkan dan mengunggah file otentikasi, lihat [Mengautentikasi dengan repositori gambarMenggunakan AWS Secrets Manager](docker-configuration.remote-repo.md).

## Contoh DockerRun.aws.json v2
<a name="create_deploy_docker_v2config_example"></a>

Potongan berikut adalah contoh yang menggambarkan sintaks file `Dockerrun.aws.json` untuk sebuah contoh dengan dua kontainer.

```
{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "php-app",
      "host": {
        "sourcePath": "/var/app/current/php-app"
      }
    },
    {
      "name": "nginx-proxy-conf",
      "host": {
        "sourcePath": "/var/app/current/proxy/conf.d"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "php-app",
      "image": "php:fpm",
      "environment": [
        {
          "name": "Container",
          "value": "PHP"
        }
      ],
      "essential": true,
      "memory": 128,
      "mountPoints": [
        {
          "sourceVolume": "php-app",
          "containerPath": "/var/www/html",
          "readOnly": true
        }
      ]
    },
    {
      "name": "nginx-proxy",
      "image": "nginx",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "links": [
        "php-app"
      ],
      "mountPoints": [
        {
          "sourceVolume": "php-app",
          "containerPath": "/var/www/html",
          "readOnly": true
        },
        {
          "sourceVolume": "nginx-proxy-conf",
          "containerPath": "/etc/nginx/conf.d",
          "readOnly": true
        },
        {
          "sourceVolume": "awseb-logs-nginx-proxy",
          "containerPath": "/var/log/nginx"
        }
      ]
    }
  ]
}
```