

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configuração do arquivo Dockerrun.aws.json v2
<a name="create_deploy_docker_v2config"></a>

`Dockerrun.aws.json v2` é um arquivo de configuração do Elastic Beanstalk que descreve como implantar um conjunto de contêineres Docker hospedados em um cluster ECS em um ambiente Elastic Beanstalk. A plataforma Elastic Beanstalk cria uma *definição de tarefa* do ECS, que inclui uma *definição de contêiner* do ECS. Essas definições são descritas no arquivo de configuração do `Dockerrun.aws.json`.

A definição de contêiner no arquivo `Dockerrun.aws.json` descreve os contêineres a serem implantados em cada instância do Amazon EC2 no cluster ECS. Nesse caso, uma instância do Amazon EC2 também é chamada de *instância de contêiner* host, porque hospeda os contêineres Docker. O arquivo de configuração também descreve os volumes de dados a serem criados na instância de contêiner de host para os contêineres do Docker montarem. Para obter mais informações e um diagrama dos componentes em um ambiente Docker gerenciado pelo ECS no Elastic Beanstalk, consulte o [Visão geral da plataforma Docker gerenciada pelo ECS](create_deploy_docker_ecs.md#create_deploy_docker_ecs_platform) anterior neste capítulo.

 Um arquivo `Dockerrun.aws.json` pode ser usado sozinho ou zipado com o código-fonte adicional em um único arquivo. O código-fonte arquivado com um `Dockerrun.aws.json` é implantado nas instâncias do contêiner do Amazon EC2 e fica acessível no diretório `/var/app/current/`.

**Topics**
+ [`Dockerrun.aws.json` v2](#create_deploy_docker_v2config_dockerrun)
+ [Formato do volume](#create_deploy_docker_v2config_volume_format)
+ [Formato do ARN do perfil de execução](#create_deploy_docker_v2config_executionRoleArn_format)
+ [Formato de definição de contêiner](#create_deploy_docker_v2config_dockerrun_format)
+ [Formato de autenticação — Usar imagens de um repositório privado](#docker-multicontainer-dockerrun-privaterepo)
+ [Exemplo Dockerrun.aws.json v2](#create_deploy_docker_v2config_example)

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

O arquivo `Dockerrun.aws.json` inclui as seguintes seções:

**AWSEBDockerrunVersão**  
Especifica o número da versão como o valor `2` para ambientes do Docker gerenciado pelo ECS.

**executionRoleArn **  
Especifica os perfis do IAM de execução de tarefas para diferentes finalidades e serviços associados à sua conta. Para que sua aplicação use [variáveis de ambiente do Elastic Beanstalk armazenadas como segredos](AWSHowTo.secrets.env-vars.md), você precisará especificar o ARN de uma função de execução de tarefas que conceda as permissões necessárias. Outros casos de uso comuns também podem exigir esse parâmetro. Para obter mais informações, consulte [Formato do ARN do perfil de execução](#create_deploy_docker_v2config_executionRoleArn_format).

**volumes**  
Cria volumes a partir de pastas na instância de contêiner do Amazon EC2 ou a partir do seu pacote de origem (implantados em `/var/app/current`). Monte esses volumes em caminhos dentro de seus contêineres do Docker usando `mountPoints` na seção `containerDefinitions`.

**containerDefinitions**  
Uma gama de definições de contêiner.

**autenticação (opcional)**  
A localização no Amazon S3 de um arquivo `.dockercfg` que contém dados de autenticação para um repositório privado.

As seções de *definição de contêiner* e de *volumes* do `Dockerrun.aws.json` usam a mesma formatação que as seções correspondentes de um arquivo de definição de tarefas do Amazon ECS. Para obter mais informações sobre o formato de definição de tarefa e uma lista completa de parâmetros de definição de tarefa, consulte [Definições de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html) no *Guia do desenvolvedor do Amazon Elastic Container Service.*

## Formato do volume
<a name="create_deploy_docker_v2config_volume_format"></a>

O parâmetro de *volume* cria volumes de pastas na instância de contêiner do Amazon EC2 ou de seu pacote de origem (implantado em `/var/app/current`).

 Os volumes são especificados no seguinte formato: 

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

Monte esses volumes em caminhos dentro dos seus contêineres do Docker usando `mountPoints` na definição de contêiner.

O Elastic Beanstalk configura volumes adicionais para logs, um para cada contêiner. Eles devem ser montados pelos seus contêineres do Docker para gravar logs na instância do host. 

Para obter mais detalhes, consulte o campo `mountPoints` na seção *Formato de definição* de contêiner a seguir.

## Formato do ARN do perfil de execução
<a name="create_deploy_docker_v2config_executionRoleArn_format"></a>

Para que sua aplicação use [variáveis de ambiente do Elastic Beanstalk armazenadas como segredos](AWSHowTo.secrets.env-vars.md), você precisará especificar um perfil do IAM de execução de tarefas. A função deve conceder ao contêiner do Amazon ECS permissão para fazer chamadas de AWS API em seu nome usando AWS Secrets Manager segredos ou AWS Systems Manager parâmetros do Parameter Store para referenciar dados confidenciais. Para obter instruções sobre como criar um perfil do IAM para execução de tarefa com as permissões necessárias para sua conta, consulte [Perfil do IAM para execução de tarefa](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) no Amazon Elastic Container Service.

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

### Permissões adicionais necessárias para a plataforma Docker gerenciada pelo Amazon ECS
<a name="create_deploy_docker_v2config_executionRoleArn_format_passRole"></a>

**O perfil de instância do EC2 concede `iam:PassRole` ao ECS**  
Para que seu perfil de instância do EC2 possa conceder esse perfil ao contêiner do ECS, você deve incluir a permissão `iam:PassRole` demonstrada no exemplo a seguir. O `iam:PassRole` permite que as instâncias do EC2 *passem o* perfil de execução da tarefa para o contêiner do ECS.

Neste exemplo, limitamos a instância do EC2 para passar o perfil somente ao serviço ECS. Embora essa condição não seja obrigatória, nós a adicionamos para seguir as práticas recomendadas para reduzir o escopo da permissão compartilhada. Conseguimos isso com o elemento `Condition`.

**nota**  
Qualquer uso do perfil de execução de tarefas do ECS do IAM requer a permissão `iam:PassRole`. Há outros casos de uso comuns que exigem o perfil de serviço gerenciado de execução de tarefas do ECS. Para obter mais informações, consulte [Perfil do IAM para execução de tarefas do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html), no Guia do desenvolvedor do Amazon Elastic Container Service.



**Example política com a permissão `iam:PassRole`**    
****  

```
{
    "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}}"
                }
            }
        }
    ]
}
```





**Conceder acesso a segredos e parâmetros ao agente de contêiner do Amazon ECS**  
O perfil do IAM de execução de tarefas do Amazon ECS também precisa de permissões para acessar os segredos e os armazenamentos de parâmetros. Semelhante aos requisitos da função de perfil de instância EC2, o agente de contêiner do ECS exige permissão para extrair os recursos necessários do Secrets Manager ou do Systems Manager. Para obter mais informações, consulte as [permissões do Secrets Manager ou do Systems Manager](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html#task-execution-secrets) no *Guia do desenvolvedor do Amazon Elastic Container Service*

**Conceder acesso a segredos e parâmetros a instâncias EC2 do Elastic Beanstalk**  
Para oferecer suporte a segredos configurados como variáveis de ambiente, você também precisará adicionar permissões ao perfil de instância do EC2. Para obter mais informações, consulte [Obter segredos e parâmetros para variáveis de ambiente do Elastic Beanstalk](AWSHowTo.secrets.env-vars.md) e [Permissões IAM necessárias para o Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager).

Os exemplos a seguir combinam o exemplo anterior de `iam:PassRole` com os exemplos fornecidos na referência de [Permissões IAM necessárias para o Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager). Eles adicionam as permissões que as instâncias do EC2 exigem para acessar AWS Secrets Manager e AWS Systems Manager armazenar para recuperar os segredos e os dados de parâmetros para inicializar as variáveis de ambiente do Elastic Beanstalk que foram configuradas para segredos.

**Example Política do Secrets Manager combinada com a permissão `iam:PassRole`**    
****  

```
{
    "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 Política do Systems Manager combinada com a permissão `iam:PassRole`**    
****  

```
{
    "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}}"
            ]
        }
    ]
}
```

## Formato de definição de contêiner
<a name="create_deploy_docker_v2config_dockerrun_format"></a>

Os exemplos a seguir mostram um subconjunto de parâmetros comumente usados na seção *Definições do contêiner*. Há outros parâmetros opcionais disponíveis.

A plataforma Beanstalk cria uma *definição de tarefa* do ECS, que inclui uma *definição de contêiner* do ECS. O Beanstalk suporta um subconjunto de parâmetros para a definição do contêiner ECS. Para obter mais informações, consulte [Definições de contêiner](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions) no *Guia do desenvolvedor do Amazon Elastic Container Service*.

Um arquivo `Dockerrun.aws.json` contém um ou mais objetos de definição de contêiner com os seguintes campos:

**name**  
O nome do contêiner. Consulte [Parâmetros de definição de contêiner padrão](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#standard_container_definition_params) para obter informações sobre o tamanho máximo e os caracteres permitidos.

**imagem**  
O nome de uma imagem do Docker em um repositório do Docker online a partir do qual você está criando um contêiner do Docker. Observe as seguintes convenções:   
+  As imagens em repositórios oficiais no Docker Hub usam um único nome (por exemplo, `ubuntu` ou `mongo`).
+ As imagens em outros repositórios no Docker Hub são qualificadas com um nome de organização (por exemplo, `amazon/amazon-ecs-agent`.
+ As imagens em outros repositórios online são ainda mais qualificadas por um nome de domínio (por exemplo, `quay.io/assemblyline/ubuntu`).

**ambiente**  
Uma gama de variáveis de ambiente a serem passadas para o contêiner.  
Por exemplo, a seguinte entrada define uma variável de ambiente com o nome **Container** e o valor **PHP**:  

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

**essential**  
Verdadeiro caso a tarefa deva ser interrompida se o contêiner falhar. Os contêineres não essenciais podem concluir ou falhar sem afetar o resto dos contêineres na instância. 

**memory**  
Quantidade de memória na instância de contêiner para reservar para o contêiner. Especifique um inteiro diferente de zero para um ou ambos os parâmetros `memory` ou `memoryReservation` em definições de contêiner.

**memoryReservation**  
O limite flexível (em MiB) de memória a ser reservado para o contêiner. Especifique um inteiro diferente de zero para um ou ambos os parâmetros `memory` ou `memoryReservation` em definições de contêiner.

**mountPoints**  
Os volumes da instância de contêiner do Amazon EC2 para montar e o local no sistema de arquivos do contêiner do Docker onde devem ser montados. Quando você montar volumes que contêm conteúdo do aplicativo, o contêiner pode ler os dados carregados em seu pacote de origem. Quando você montar volumes de log para gravar dados de log, o Elastic Beanstalk pode reunir dados de log a partir desses volumes.   
 O Elastic Beanstalk cria volumes de log na instância de contêiner, um para cada contêiner do Docker, em `/var/log/containers/{{containername}}`. Esses volumes são chamados `awseb-logs-{{containername}}` e devem ser montados no local dentro da estrutura de arquivos do contêiner onde os logs são gravados.   
Por exemplo, o ponto de montagem a seguir mapeia a localização de log nginx no contêiner para o volume gerado pelo Elastic Beanstalk para o contêiner `nginx-proxy`.   

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

**portMappings**  
Mapeia portas de rede no contêiner para portas no host.

**links**  
Lista de contêineres aos quais vincular. Os contêineres vinculados podem descobrir uns aos outros e se comunicar com segurança. 

**volumesFrom**  
Monte todos os volumes de um contêiner diferente. Por exemplo, para montar volumes de um contêiner chamado `web`:  

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

## Formato de autenticação — Usar imagens de um repositório privado
<a name="docker-multicontainer-dockerrun-privaterepo"></a>

A seção `authentication` contém dados de autenticação para um repositório privado. Essa entrada é opcional.

Adicione as informações sobre o bucket do Amazon S3 que contém o arquivo de autenticação no parâmetro `authentication` do arquivo `Dockerrun.aws.json`. Certifique-se de que o parâmetro `authentication` contenha uma chave e um bucket válidos do Amazon S3. O bucket do Amazon S3 deve ser hospedado na mesma região do ambiente que o está usando. O Elastic Beanstalk não fará download dos arquivos de buckets do Amazon S3 hospedados em outras regiões.

Usa o seguinte formato:

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

Para obter informações sobre a geração e o upload do arquivo de autenticação, consulte [Autenticação em repositórios de imagensUsando AWS Secrets Manager](docker-configuration.remote-repo.md).

## Exemplo Dockerrun.aws.json v2
<a name="create_deploy_docker_v2config_example"></a>

O snippet a seguir é um exemplo que ilustra a sintaxe do arquivo `Dockerrun.aws.json` para uma instância com dois contêineres.

```
{
  "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"
        }
      ]
    }
  ]
}
```