Uso de la plataforma Multicontainer Docker (AMI de Amazon Linux) - AWS Elastic Beanstalk

Uso de la plataforma Multicontainer Docker (AMI de Amazon Linux)

nota

Esta plataforma solo admite el sistema operativo AMI de Amazon Linux (anterior a Amazon Linux 2). La funcionalidad Multicontainer Docker en Amazon Linux 2 la proporciona la plataforma de Docker y recibe soporte a largo plazo.

Si su entorno de Elastic Beanstalk Docker utiliza una versión de la plataforma AMI de Amazon Linux (anterior a Amazon Linux 2), puede crear entornos de acoplamiento que admitan varios contenedores por instancia de Amazon EC2 con la plataforma Docker multicontenedor para Elastic Beanstalk.

Elastic Beanstalk utiliza Amazon Elastic Container Service (Amazon ECS) para coordinar las implementaciones de contenedores en entornos Docker multicontenedor. Amazon ECS dispone de herramientas para administrar un clúster de instancias que ejecutan contenedores de Docker. Elastic Beanstalk se encarga de las tareas de Amazon ECS, incluida la creación de clústeres, la definición y la ejecución de tareas. Todas las instancias del entorno ejecutan el mismo conjunto de contenedores, que está definido en un archivo Dockerrun.aws.json.

Plataforma Multicontainer Docker

Las plataformas Docker genéricas y preconfiguradas estándar en Elastic Beanstalk admiten solo un solo contenedor Docker por entorno de Elastic Beanstalk. Para sacar el máximo provecho a Docker, Elastic Beanstalk le permite crear un entorno en el que las instancias Amazon EC2 ejecutan varios contenedores de Docker en paralelo.

El siguiente diagrama muestra un entorno de ejemplo de Elastic Beanstalk configurado con tres contenedores Docker que se ejecutan en cada instancia de Amazon EC2 de un grupo de Auto Scaling:

Archivo Dockerrun.aws.json

Las instancias de contenedor (instancias de Amazon EC2 que ejecutan Multicontainer Docker en un entorno Elastic Beanstalk) requieren un archivo de configuración denominado Dockerrun.aws.json. Este archivo es específico para Elastic Beanstalk y puede utilizarse solo o junto con el código fuente y el contenido de un paquete de código fuente para crear un entorno en una plataforma de Docker.

nota

La versión 1 del formato Dockerrun.aws.json se utiliza para lanza un único contenedor de Docker en un entorno de Elastic Beanstalk. La versión 2 agrega compatibilidad con varios contenedores en cada instancia de Amazon EC2 y solo puede utilizarse con la plataforma Multicontainer Docker. El formato difiere considerablemente de la versión anterior, que se detalla en Configuración de Docker.

Consulte Dockerrun.aws.json v2 para obtener más información sobre el formato actualizado y un archivo de ejemplo.

Imágenes de Docker

La plataforma Multicontainer Docker de Elastic Beanstalk necesita imágenes prediseñadas y almacenadas en un repositorio de imágenes online público o privado.

nota

En la plataforma Multicontainer Docker de Elastic Beanstalk, no se pueden crear imágenes personalizadas durante la implementación con un archivo Dockerfile. Cree las imágenes e impleméntelas en un repositorio online antes de crear un entorno de Elastic Beanstalk.

Especifique las imágenes por su nombre en Dockerrun.aws.json. 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 registros online se identifican además con un nombre de dominio (por ejemplo, quay.io/assemblyline/ubuntu).

Si desea configurar Elastic Beanstalk para que se autentique en un repositorio privado, incluya el parámetro authentication en el archivo Dockerrun.aws.json.

Rol de la instancia de contenedor

Elastic Beanstalk utiliza una AMI optimizada para Amazon ECS con un agente contenedor de Amazon ECS que se ejecuta en un contenedor Docker. El agente se comunica con Amazon ECS para coordinar las implementaciones de contenedores. Para poder comunicarse con Amazon ECS, cada instancia de Amazon EC2; debe tener los permisos correspondientes en IAM;. Estos permisos se adjuntan al perfil de instancia predeterminado cuando se crea un entorno en la consola de administración de Elastic Beanstalk:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

Si crea su propio perfil de instancia, puede adjuntar la política administrada AWSElasticBeanstalkMulticontainerDocker para asegurarse de que los permisos se mantienen actualizados. Para obtener instrucciones sobre la creación de políticas y roles de IAM;, consulte Creating IAM Roles en la Guía del usuario de IAM;.

Recursos de Amazon ECS creados por Elastic Beanstalk

Al crear un entorno mediante la plataforma Docker multicontenedor, Elastic Beanstalk crea y configura automáticamente varios recursos de Amazon Elastic Container Service mientras crea el entorno para crear los contenedores necesarios en cada instancia de Amazon EC2.

  • Clúster de &ECS las instancias de contenedor de ECS; están organizadas en clústeres. Cuando se utiliza con Elastic Beanstalk, se crea siempre un clúster para cada entorno de Docker multicontenedor.

  • Definición de tareas de Amazon ECS: Elastic Beanstalk utiliza el archivo Dockerrun.aws.json del proyecto para generar la definición de tareas de Amazon ECS que se utiliza para configurar las instancias de contenedor del entorno.

  • Tarea de Amazon ECS: Elastic Beanstalk se comunica con Amazon ECS para ejecutar una tarea en cada instancia del entorno para coordinar la implementación de contenedores. En un entorno escalable, Elastic Beanstalk inicia una nueva tarea siempre que se agrega una instancia al clúster. En casos excepcionales, es posible que tenga que aumentar la cantidad de espacio reservada para contenedores e imágenes. Obtenga más información en la sección Configuración de los entornos de Docker.

  • Agente de contenedor de ECS: el agente se ejecuta en un contenedor de Docker de las instancias del entorno. El agente sondea el servicio Amazon ECS y espera a que se ejecute una tarea.

  • Volúmenes de datos de Amazon ECS: Elastic Beanstalk inserta definiciones de volúmenes (además de los volúmenes definidos en Dockerrun.aws.json) en la definición de tareas para facilitar la recopilación de registros.

    Elastic Beanstalk crea volúmenes de logs en la instancia de contenedor, uno para cada contenedor, en /var/log/containers/containername. Estos volúmenes se llaman awseb-logs-containername y se proporcionan para los contenedores que se van a montar. Consulte Formato de definición de contenedor para obtener más información acerca de cómo montarlos.

Uso de varios agentes de escucha de Elastic Load Balancing

Puede configurar varios agentes de escucha de Elastic Load Balancing en un entorno Multicontainer Docker para admitir el tráfico entrante en los servidores proxy y otros servicios que no se ejecutan en el puerto HTTP predeterminado.

Cree una carpeta .ebextensions en el paquete de código fuente y agregue un archivo con la extensión .config. En el ejemplo siguiente, se muestra un archivo de configuración que crea un agente de escucha de Elastic Load Balancing en el puerto 8080.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

Si su entorno se ejecuta en una Amazon Virtual Private Cloud (Amazon VPC) personalizada que creó, Elastic Beanstalk se encarga del resto. En una VPC predeterminada, debe configurar el grupo de seguridad de la instancia para que permita la entrada desde el balanceador de carga. Utilice un segundo archivo de configuración que agregue una regla de entrada al grupo de seguridad:

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

Para obtener más información sobre el formato de los archivos de configuración, consulte Añadir y personalizar recursos del entorno de Elastic Beanstalk y Opciones de configuración.

Además de agregar un agente de escucha a la configuración de Elastic Load Balancing y de abrir un puerto en el grupo de seguridad, debe asignar el puerto de la instancia del host al puerto del contenedor de Docker en la sección containerDefinitions del archivo Dockerrun.aws.json. En el fragmento siguiente, se muestra un ejemplo:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Consulte Dockerrun.aws.json v2 para obtener más información sobre el formato de archivo Dockerrun.aws.json.

Implementaciones de contenedores con errores

Si falla una tarea de Amazon ECS, uno o más contenedores en su entorno de Elastic Beanstalk no se iniciarán. Elastic Beanstalk no retrocede entornos multicontenedor debido a una tarea de Amazon ECS fallida. Si un contenedor no puede iniciarse en el entorno, vuelva a implementar la versión actual o una versión anterior que funcionara desde la consola de Elastic Beanstalk.

Para implementar una versión existente

  1. Abra la consola de Elastic Beanstalk en la región de su entorno.

  2. Haga clic en Actions (Acciones) a la derecha del nombre de la aplicación y luego en View application versions (Ver versiones de la aplicación).

  3. Seleccione una versión de la aplicación y haga clic en Deploy (Implementar).