Uso de la ramificación de la plataforma de Amazon ECS - AWS Elastic Beanstalk

Uso de la ramificación de la plataforma de Amazon ECS

nota
  • El retiro de la ramificación de la plataforma Multicontainer Docker que se ejecuta en Amazon Linux de 64 bits (la versión que precede a Amazon Linux 2) está programado para el 30 de junio de 2022. Para obtener más información sobre la política de compatibilidad de la plataforma y las ramificaciones de la plataforma retiradas, consulte Política de compatibilidad de la plataforma.

  • Para obtener más información sobre cómo migrar las aplicaciones que se ejecutan en la ramificación de la plataforma Multicontainer Docker Amazon Linux a la ramificación de la plataforma Amazon ECS que se ejecuta en Amazon Linux 2, consulte Migración de Multicontainer Docker que se ejecuta en Amazon Linux a ECS en Amazon Linux 2.

En este tema se aborda la ramificación de la plataforma Amazon ECS on Amazon Linux 2 y la ramificación de la plataforma que reemplaza, Multicontainer Docker on AL1 (también administrada por ECS). A menos que se indique lo contrario, toda la información de este tema se aplica a ambas ramificaciones de la plataforma.

Plataforma Docker administrada por ECS

Elastic Beanstalk utiliza Amazon Elastic Container Service (Amazon ECS) para coordinar las implementaciones de contenedores en entornos de Docker administrados por ECS. 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 de la v2. 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:

nota

Elastic Beanstalk ofrece características de extensibilidad para todas sus plataformas que se pueden utilizar para personalizar la implementación y la ejecución de sus aplicaciones. Para la ramificación de la plataforma ECS que se ejecuta en Amazon Linux 2, la implementación del flujo de trabajo de la implementación de las instancias de estas características varía de las demás plataformas. Para obtener más información, consulte Flujo de trabajo de implementación de instancias para ECS que se ejecuta en Amazon Linux 2.

Dockerrun.aws.json file

Las instancias de contenedor (instancias de Amazon EC2 que ejecutan Docker administrado por ECS en un entorno de 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 lanzar un único contenedor de Docker en un entorno de Elastic Beanstalk que se ejecuta en la AMI de Amazon Linux (la versión que precede a Amazon Linux 2). El entorno se basa en la ramificación de la plataforma Docker que se ejecuta en Amazon Linux de 64 bits, que se retirará el 30 de junio de 2022. Para obtener más información sobre el formato Dockerrun.aws.json de la v1, consulte Configuración de la plataforma de Docker: sin Docker Compose.

El formato de la versión 2 de Dockerrun.aws.json agrega compatibilidad con varios contenedores en cada instancia de Amazon EC2 y solo puede utilizarse con la plataforma Docker administrada por ECS. El formato difiere de forma considerable de la versión anterior.

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 Docker administrada por ECS de Elastic Beanstalk necesita imágenes prediseñadas y almacenadas en un repositorio de imágenes en línea público o privado.

nota

En la plataforma Docker administrada por ECS 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 de la v2. 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 de la v2.

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 instancias predeterminado cuando se crea un entorno en la consola 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

Cuando se crea un entorno con la plataforma Docker administrada por ECS, Elastic Beanstalk crea y configura de forma automática varios recursos de Amazon Elastic Container Service mientras crea el entorno. De este modo, se crean los contenedores necesarios en cada instancia de Amazon EC2.

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

  • Definición de tareas de Amazon ECS: Elastic Beanstalk utiliza el archivo Dockerrun.aws.json de la v2 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 Amazon 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 de la v2) 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 de Docker administrado por ECS 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 de la v2. 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 del archivo Dockerrun.aws.json de la v2.

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 restaura entornos de varios contenedores debido a una tarea de Amazon ECS que no se realizó. 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).