

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración del archivo Dockerrun.aws.json v2
<a name="create_deploy_docker_v2config"></a>

`Dockerrun.aws.json v2` es un archivo de configuración de Elastic Beanstalk que describe cómo implementar un conjunto de contenedores de Docker alojados en un clúster ECS en un entorno de Elastic Beanstalk. La plataforma Elastic Beanstalk crea una *definición de tarea* de ECS, que incluye una *definición de contenedor* de ECS. Estas definiciones se describen en el archivo de configuración `Dockerrun.aws.json`.

La definición de contenedor del archivo `Dockerrun.aws.json` describe los contenedores que se van a implementar en cada instancia de Amazon EC2 del clúster de ECS. En este caso, una instancia de Amazon EC2 también se denomina *instancia de contenedor* de host, porque aloja los contenedores de Docker. El archivo de configuración también describe los volúmenes de datos que se deben crear en la instancia de contenedor de host para el montaje de los contenedores de Docker. Para obtener más información y un diagrama de los componentes de un entorno de Docker administrado por ECS en Elastic Beanstalk, consulte la sección [Plataforma Docker administrada por ECS](create_deploy_docker_ecs.md#create_deploy_docker_ecs_platform) anteriormente en este capítulo.

 Se puede usar un archivo `Dockerrun.aws.json` tal como está o incluirlo en un solo archivo junto con el código fuente adicional. El código fuente archivado con un `Dockerrun.aws.json` se implementa en instancias de contenedor de Amazon EC2; y está accesible en el directorio `/var/app/current/`.

**Topics**
+ [`Dockerrun.aws.json` v2](#create_deploy_docker_v2config_dockerrun)
+ [Formato del volumen](#create_deploy_docker_v2config_volume_format)
+ [Formato de ARN del rol de ejecución](#create_deploy_docker_v2config_executionRoleArn_format)
+ [Formato de definición de contenedor](#create_deploy_docker_v2config_dockerrun_format)
+ [Formato de autenticación: uso de imágenes de un repositorio privado](#docker-multicontainer-dockerrun-privaterepo)
+ [Ejemplo Dockerrun.aws.json v2](#create_deploy_docker_v2config_example)

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

En el archivo `Dockerrun.aws.json` se incluyen las siguientes secciones:

**AWSEBDockerrunVersión**  
Especifica el número de versión como el valor `2` para los entornos Docker administrados por ECS.

**executionRoleArn **  
Especifica los roles de IAM de ejecución de tareas para distintos fines y servicios asociados a su cuenta. Para que su aplicación utilice [variables de entorno de almacenadas como secretos](AWSHowTo.secrets.env-vars.md) de Elastic Beanstalk, tendrá que especificar el ARN de un rol de ejecución de tareas que conceda los permisos necesarios. Es posible que otros casos de uso comunes también requieran este parámetro. Para obtener más información, consulte [Formato de ARN del rol de ejecución](#create_deploy_docker_v2config_executionRoleArn_format).

**volumes**  
Crea volúmenes a partir de carpetas de la instancia de contenedor de Amazon EC2 o a partir del paquete de código fuente (implementado en `/var/app/current`). Monte estos volúmenes en rutas que estén dentro de los contenedores de Docker mediante `mountPoints` en la sección `containerDefinitions`.

**containerDefinitions**  
Una matriz de definiciones de contenedor.

**autenticación (opcional)**  
La ubicación en Amazon S3 de un archivo `.dockercfg` que contiene los datos de autenticación de un repositorio privado.

Las secciones *Definición de contenedor* y *Volúmenes* de `Dockerrun.aws.json` utilizan el mismo formato que las secciones correspondientes de un archivo de definición de tareas de Amazon ECS. Para obtener más información sobre el formato de definición de tarea y una lista completa de los parámetros de definición de tareas, consulte [Definiciones de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_defintions.html) en la *Guía para el desarrollador del servicio de contenedores de Amazon Elastic*.

## Formato del volumen
<a name="create_deploy_docker_v2config_volume_format"></a>

El parámetro *volumen* crea volúmenes a partir de carpetas de la instancia de contenedor de Amazon EC2 o a partir del paquete de código fuente (implementado en `/var/app/current`).

 Los volúmenes se especifican en el siguiente formato: 

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

Monte estos volúmenes en rutas que estén dentro de los contenedores de Docker mediante `mountPoints` en la definición de contenedor.

Elastic Beanstalk configura volúmenes adicionales para los logs, uno para cada contenedor. Estos los deben montar los contenedores de Docker para poder escribir logs en la instancia del host. 

Para obtener más información, consulte el campo `mountPoints` de la sección *Formato de definición de contenedor* que aparece a continuación.

## Formato de ARN del rol de ejecución
<a name="create_deploy_docker_v2config_executionRoleArn_format"></a>

Para que su aplicación utilice [variables de entorno de almacenadas como secretos](AWSHowTo.secrets.env-vars.md) de Elastic Beanstalk, tendrá que especificar un rol de IAM de ejecución de tareas. El rol debe conceder al contenedor Amazon ECS permiso para realizar llamadas a la AWS API en su nombre utilizando AWS Secrets Manager secretos o AWS Systems Manager parámetros del almacén de parámetros para hacer referencia a datos confidenciales. Para obtener instrucciones sobre cómo crear un rol de IAM de ejecución de tareas con los permisos necesarios para su cuenta, consulte [rol de IAM de ejecución de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) en la Guía para desarrolladores de Amazon Elastic Container Service.

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

### Permisos adicionales necesarios para la plataforma Docker administrada por Amazon ECS
<a name="create_deploy_docker_v2config_executionRoleArn_format_passRole"></a>

**Concesión de `iam:PassRole` a ECS por parte del perfil de instancia de EC2**  
Para que su perfil de instancia de EC2 pueda conceder este rol al contenedor de ECS, debe incluir el permiso de `iam:PassRole` que se muestra en el siguiente ejemplo. `iam:PassRole` permite a las instancias de EC2 *transferir* el rol de ejecución de tareas al contenedor de ECS.

En este ejemplo, limitamos la instancia de EC2 para que transfiera solamente el rol al servicio ECS. Si bien esta condición no es obligatoria, la añadimos para seguir las prácticas recomendadas y reducir el alcance del permiso compartido. Esto lo logramos con el elemento `Condition`.

**nota**  
Cualquier uso del rol de ejecución de tareas de IAM de ECS requiere el permiso de `iam:PassRole`. Hay otros casos de uso comunes que requieren el rol de servicio administrado de ejecución de tareas de ECS. Para obtener más información, consulte el [Rol de IAM de ejecución de tareas de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) en la Guía para desarrolladores de Amazon Elastic Container Service.



**Example política con permiso de `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}}"
                }
            }
        }
    ]
}
```





**Concesión de acceso a los secretos y parámetros al agente de contenedor de Amazon ECS**  
El rol de IAM de ejecución de tareas de Amazon ECS también necesita permisos para acceder a los secretos y almacenes de parámetros. Al igual que los requisitos del rol de perfil de instancia de EC2, el agente contenedor de ECS necesita permiso para obtener los recursos necesarios de Secrets Manager o Systems Manager. Para obtener más información, consulte los [permisos de Secrets Manager o Systems Manager](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html#task-execution-secrets) en la *Guía para desarrolladores de Amazon Elastic Container Service*.

**Concesión de acceso a secretos y parámetros a las instancias de EC2 de Elastic Beanstalk**  
Para admitir los secretos configurados como variables de entorno, también necesitará agregar permisos a su perfil de instancia de EC2. Para obtener más información, consulte [Cómo obtener secretos y parámetros de las variables de entorno de Elastic Beanstalk](AWSHowTo.secrets.env-vars.md) y [Permisos IAM necesarios para Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager).

Los siguientes ejemplos combinan el ejemplo de `iam:PassRole` anterior con los ejemplos proporcionados en el documento [Permisos IAM necesarios para Secrets Manager](AWSHowTo.secrets.IAM-permissions.md#AWSHowTo.secrets.IAM-permissions.secrets-manager) al que se hace referencia. Añaden los permisos que las instancias EC2 requieren para acceder AWS Secrets Manager y AWS Systems Manager almacenan para recuperar los secretos y los datos de parámetros a fin de inicializar las variables de entorno de Elastic Beanstalk que se han configurado para los secretos.

**Example Política de Secrets Manager combinada con permisos de `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 de Systems Manager combinada con permisos de `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 definición de contenedor
<a name="create_deploy_docker_v2config_dockerrun_format"></a>

Los siguientes ejemplos muestran un subconjunto de parámetros que se utilizan habitualmente en la sección *Definiciones de contenedor*. Hay disponibles otros parámetros opcionales.

La plataforma Beanstalk crea una *definición de tarea* de ECS, que incluye una * definición de contenedor* de ECS. Beanstalk admite un subconjunto de parámetros para la definición del contenedor de ECS. Para obtener más información, consulte [Definiciones de contenedor](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definitions) en la *Guía para desarrolladores de Amazon Elastic Container Service*.

Un archivo `Dockerrun.aws.json` contiene una matriz de uno o varios objetos de definición de contenedor con los siguientes campos:

**name**  
El nombre del contenedor. Consulte [Standard Container Definition Parameters (Parámetros de definición de contenedores estándar)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#standard_container_definition_params) para obtener información sobre la longitud máxima y los caracteres permitidos.

**image**  
El nombre de una imagen de Docker en un repositorio Docker insertado desde el que va a crear un contenedor Docker. Tenga en cuenta estas convenciones:   
+  Las imágenes de los repositorios oficiales de Docker Hub utilizan un solo nombre (por ejemplo, `ubuntu` o `mongo`).
+ Las imágenes de otros repositorios de Docker Hub se identifican con un nombre de organización (por ejemplo, `amazon/amazon-ecs-agent`.
+ Las imágenes de otros repositorios online se cualifican más con un nombre de dominio (por ejemplo, `quay.io/assemblyline/ubuntu`).

**environment**  
Una matriz de variables de entorno que se va a pasar al contenedor.  
Por ejemplo, la siguiente entrada define una variable de entorno con el nombre **Container** y el valor **PHP**:  

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

**essential**  
Es True si la tarea se debe detener si el contenedor produce un error. Los contenedores Nonessential puedan terminar o bloquearse sin que ello afecte al resto de los contenedores de la instancia. 

**memory**  
Cantidad de memoria de la instancia de contenedor que se va a reservar para el contenedor. Especifique un entero distinto de cero para uno o ambos parámetros `memory` o `memoryReservation` en las definiciones de contenedor.

**memoryReservation**  
El límite flexible (en MiB) de memoria que reservar para el contenedor. Especifique un entero distinto de cero para uno o ambos parámetros `memory` o `memoryReservation` en las definiciones de contenedor.

**mountPoints**  
Volúmenes de la instancia de contenedor de Amazon EC2; que se van a montar y la ubicación en el sistema de archivos del contenedor de Docker en la que se van a montar. Cuando se montan volúmenes que incluyen contenido de aplicaciones, el contenedor puede leer los datos que se cargan en el paquete de código fuente. Cuando se montan volúmenes de logs para escribir datos de log, Elastic Beanstalk puede recopilar datos de log de estos volúmenes.   
 Elastic Beanstalk crea volúmenes de logs en la instancia de contenedor, uno para cada contenedor de Docker, en `/var/log/containers/{{containername}}`. Estos volúmenes se denominan `awseb-logs-{{containername}}` y deben montarse en la ubicación dentro de la estructura de archivos del contenedor donde se escriben los logs.   
Por ejemplo, el siguiente punto de montaje asigna la ubicación de los registros de nginx en el contenedor al volumen generado por Elastic Beanstalk para el contenedor `nginx-proxy`.   

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

**portMappings**  
Asigna puertos de red del contenedor a puertos del host.

**links**  
Lista de contenedores que se van a vincular. Los contenedores vinculados pueden detectarse entre sí y comunicarse de forma segura. 

**volumesFrom**  
Esta opción le permite montar todos los volúmenes desde un contenedor diferente. Por ejemplo, para montar volúmenes desde un contenedor con el nombre `web`:  

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

## Formato de autenticación: uso de imágenes de un repositorio privado
<a name="docker-multicontainer-dockerrun-privaterepo"></a>

La sección `authentication` contiene los datos de autenticación de un repositorio privado. Esta entrada es opcional.

Añada la información sobre el bucket de Amazon S3; que contiene el archivo de autenticación en el parámetro `authentication` del archivo `Dockerrun.aws.json`. Asegúrese de que el parámetro `authentication` contiene un bucket de Amazon S3 y una clave válidos. El bucket de Amazon S3; debe estar alojado en la misma región que el entorno que lo está utilizando. Elastic Beanstalk no descargará archivos de los buckets de Amazon S3 alojados en otras regiones.

Usa el siguiente formato:

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

Para obtener información sobre cómo generar y cargar el archivo de autenticación, consulte [Autenticación con repositorios de imágenesUsando AWS Secrets Manager](docker-configuration.remote-repo.md).

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

El siguiente fragmento es un ejemplo que ilustra la sintaxis del archivo `Dockerrun.aws.json` para una instancia con dos contenedores.

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