Amazon ECS en AWS Fargate - Amazon Elastic Container Service

Amazon ECS en AWS Fargate

La tecnología AWS Fargate se puede utilizar en Amazon ECS para ejecutar contenedores sin tener que administrar servidores ni clústeres de instancias de Amazon EC2. Con AWS Fargate ya no tendrá que aprovisionar, configurar ni escalar clústeres de máquinas virtuales para ejecutar los contenedores. De esta manera, se elimina la necesidad de elegir tipos de servidores, decidir cuándo escalar los clústeres u optimizar conjuntos de clústeres.

Al ejecutar las tareas y servicios con el tipo de lanzamiento de Fargate, la aplicación se empaqueta en contenedores, se especifican los requisitos de CPU y de memoria, se definen las políticas de IAM y de redes y se lanza la aplicación. Cada tarea de Fargate tiene su propio límite de aislamiento y no comparte el kernel subyacente, los recursos de CPU, los recursos de memoria ni la interfaz de red elástica con otra tarea.

Fargate ofrece versiones de plataforma para las ediciones Full y Core de Amazon Linux 2 y Microsoft Windows 2019 Server. A menos que se especifique lo contrario, la información de esta página se aplica a todas las plataformas Fargate.

En este tema, se describen los diferentes componentes de las tareas y los servicios de Fargate, y se mencionan consideraciones especiales para el uso de Fargate con Amazon ECS.

Para obtener información acerca de las regiones que admiten contenedores Linux, consulte Regiones compatibles para contenedores Linux en AWS Fargate.

Para obtener información acerca de las regiones que admiten contenedores de Windows en Fargate, consulte Regiones compatibles para contenedores Windows en AWS Fargate.

Definiciones de tareas

Las tareas de Amazon ECS alojadas en AWS Fargate no admiten todos los parámetros de definición de tareas disponibles. Algunos parámetros no son compatibles, y otros se comportan de forma distinta para tareas de Fargate.

Los siguientes parámetros de definición de tareas no son válidos en tareas de Fargate:

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • pidMode

  • placementConstraints

  • privileged

  • systemControls

Los siguientes parámetros de definición de tareas son válidos en tareas de Fargate, pero presentan limitaciones que se deben tener en cuenta:

  • linuxParameters: al especificar opciones específicas de Linux que se aplican al contenedor, en capabilities no se admite el parámetro add. No se admiten los parámetros devices, sharedMemorySize y tmpfs. Para obtener más información, consulte Parámetros de Linux .

  • volumes: las tareas de Fargate solo admiten volúmenes de host de montaje vinculado, por lo que no se admite el parámetro dockerVolumeConfiguration. Para obtener más información, consulte Volúmenes .

  • cpu - Para contenedores Windows en AWS Fargate, el valor no puede ser inferior a 1 vCPU.

A fin de garantizar que la definición de tareas sea válida para su utilización con Fargate, puede especificar lo siguiente al registrar la definición de tareas:

  • En la AWS Management Console, en el campo Requires Compatibilities (Requiere compatibilidades), especifique FARGATE.

  • En la AWS CLI, especifique la opción --requires-compatibilities.

  • En la API de Amazon ECS, especifique el indicador requiresCompatibilities.

Modo de red

Las definiciones de tareas de Amazon ECS para AWS Fargate requieren que el modo de red se establezca en awsvpc. El modo de red awsvpc proporciona a cada tarea su propia interfaz de red elástica. Para obtener más información, consulte Redes de tareas de AWS Fargate en la Guía del usuario de Amazon Elastic Container Service para AWS Fargate.

También se necesita una configuración de red al crear un servicio o ejecutar tareas manualmente. Para obtener más información, consulte Redes de tareas de AWS Fargate en la Guía del usuario de Amazon Elastic Container Service para AWS Fargate.

Sistemas operativos de tarea

Al configurar una definición de tarea y contenedor para AWS Fargate, debe especificar el sistema operativo que ejecuta el contenedor. Se admiten los siguientes sistemas operativos para AWS Fargate:

  • Amazon Linux 2

  • Windows Server 2019 Full

  • Windows Server 2019 Core

Arquitectura de CPU de tarea

Hay 2 arquitecturas disponibles para la definición de tareas de Amazon ECS, ARM y X86_64.

Cuando ejecuta contenedores de Windows en AWS Fargate, debe tener la arquitectura de CPU X86_64.

Cuando ejecuta contenedores Linux en AWS Fargate, puede utilizar la arquitectura de CPU X86_64 o la arquitectura ARM64 para las aplicaciones basadas en ARM. Para obtener más información, consulte Uso de cargas de trabajo de ARM de 64 bits en Amazon ECS .

Memoria y CPU de tarea

Las definiciones de tareas de Amazon ECS para AWS Fargate requieren que especifique la CPU y la memoria en el nivel de tarea. Si bien también puede especificar la CPU y la memoria en el nivel de contenedor para tareas de Fargate, es opcional. La mayoría de casos de uso solo se cumplen especificando estos recursos en el nivel de tarea. En la siguiente tabla se muestran las combinaciones válidas de CPU y memoria de nivel de tarea.

Valor de CPU Valor de memoria Sistemas operativos admitidos por AWS Fargate
256 (0,25 vCPU) 512 MB, 1 GB, 2 GB Linux
512 (0,5 vCPU) 1 GB, 2 GB, 3 GB, 4 GB Linux
1024 (1 vCPU) 2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB Linux, Windows
2048 (2 vCPU) Entre 4 GB y 16 GB en incrementos de 1 GB Linux, Windows
4096 (4 vCPU) Entre 8 GB y 30 GB en incrementos de 1 GB Linux, Windows

Límites de recursos de tareas

Las definiciones de tareas de Amazon ECS para contenedores Linux en AWS Fargate admiten el parámetro ulimits para definir los límites de recursos que se van a establecer en un contenedor.

Las definiciones de tareas de Amazon ECS para Windows en AWS Fargate admiten el parámetro ulimits para definir los límites de recursos que se van a establecer en un contenedor.

Las tareas de Amazon ECS alojadas en Fargate utilizan los valores de los límites de recursos predeterminados, a excepción del parámetro de límite de recursos nofile que Fargate anula. El límite de recursos nofile define una restricción en el número de archivos abiertos que puede utilizar un contenedor. El límite flexible nofile predeterminado es 1024 y el límite invariable es 4096.

El siguiente es un fragmento de código de definición de tareas de ejemplo que muestra cómo definir un límite nofile personalizado que se ha duplicado:

"ulimits": [ { "name": "nofile", "softLimit": 2048, "hardLimit": 8192 } ]

Para obtener más información acerca de los otros límites de recursos que se pueden ajustar, consulte Límites de recursos.

Registro

Las definiciones de tareas de Amazon ECS para AWS Fargate admiten los controladores de registros awslogs, splunk y awsfirelens para la configuración de registros.

El controlador de registros awslogs configura las tareas de Fargate para que envíen información de registro a Amazon CloudWatch Logs. A continuación se muestra un fragmento de definición de tarea donde se configura el controlador de registros awslogs:

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }

Para obtener más información acerca de la utilización del controlador de registros awslogs en una definición de tareas para que envíe sus registros de contenedor a CloudWatch Logs, consulte Uso del controlador de registros awslogs.

Para obtener más información acerca de cómo utilizar el controlador de registros de awsfirelens en una definición de tarea, consulte Enrutamiento de registros personalizados.

Para obtener más información acerca de cómo utilizar el controlador de registros de splunk en una definición de tarea, consulte Ejemplo: controlador de registros splunk.

Rol de IAM de ejecución de tareas de Amazon ECS

Hay un rol de IAM de ejecución de tareas opcional que puede especificar con Fargate para permitir que las tareas de Fargate realicen llamadas a la API de Amazon ECR. Las llamadas a la API extraen imágenes de contenedor además de llamar a CloudWatch para almacenar los registros de la aplicación de contenedor. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS .

Ejemplo de definición de tarea de Amazon Linux 2

A continuación, se muestra un ejemplo de definición de tareas que configura un servidor web utilizando el tipo de lanzamiento de Fargate con un sistema operativo Amazon Linux 2:

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }

Ejemplo de definición de tareas de Windows

A continuación, se muestra un ejemplo de definición de tareas que configura un servidor web utilizando el tipo de lanzamiento de Fargate con un sistema operativo Windows 2019 Server.

{ "containerDefinitions": [ { "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc" ], "entryPoint": [ "powershell", "-Command" ], "essential": true, "cpu": 2048, "memory": 4096, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fargate-windows-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample_windows_app", "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ] } ], "memory": "4096", "cpu": "2048", "networkMode": "awsvpc", "family": "windows-simple-iis-2019-core", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "runtimePlatform": { "operatingSystemFamily": "WINDOWS_SERVER_2019_CORE" }, "requiresCompatibilities": [ "FARGATE" ] }

Almacenamiento de tareas

Para las tareas de Amazon ECS alojadas en Fargate, se admiten los siguientes tipos de almacenamiento:

  • Volúmenes de Amazon EFS para almacenamiento persistente. Para obtener más información, consulte Volúmenes de Amazon EFS .

  • Montajes vinculados para almacenamiento efímero. Para obtener más información, consulte Montajes de enlace .

Tareas y servicios

Después de preparar las definiciones de tareas de Amazon ECS para AWS Fargate, deben tomarse algunas decisiones a la hora de crear el servicio.

Integración en red de las tareas

Las tareas de Amazon ECS para AWS Fargate requieren el modo de red awsvpc, que proporciona a cada tarea una interfaz de red elástica. Cuando se ejecuta una tarea o se crea un servicio con este modo de red, debe especificar una o más subredes para asociar la interfaz de red y uno o más grupos de seguridad para aplicarlo a la interfaz de red.

Si va a usar subredes públicas, decida si desea proporcionar una dirección IP pública para la interfaz de red. Para que las tareas de Fargate de una subred pública extraigan imágenes de contenedor, es necesario asignar una dirección IP pública a la interfaz de red elástica de la tarea con una ruta a Internet o una gateway NAT que pueda dirigir las solicitudes a Internet. Para que las tareas de Fargate de una subred privada extraigan imágenes de contenedor, debe haber una gateway NAT en la subred para dirigir las solicitudes a Internet. Cuando aloja las imágenes de contenedor en Amazon ECR, puede configurar Amazon ECR para que utilice un punto de enlace de la VPC de interfaz. En este caso, la dirección IPv4 privada de la tarea se utiliza para extraer la imagen. Para obtener más información acerca de los puntos de enlace de la interfaz de Amazon ECR, consulte Puntos de enlace de la VPC de interfaz de Amazon ECR (AWS PrivateLink) en la Guía del usuario de Amazon Elastic Container Registry.

A continuación, se muestra un ejemplo de la sección networkConfiguration para un servicio de Fargate:

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] } }

Equilibrio de carga de los servicios

El servicio Amazon ECS en AWS Fargate se puede configurar opcionalmente para que utilice Elastic Load Balancing a fin de distribuir el tráfico de manera uniforme entre las tareas del servicio.

Los servicios Amazon ECS alojados en AWS Fargate admiten tipos de balanceador de carga Application Load Balancer y Network Load Balancer. Los Application Load Balancers se utilizan para dirigir el tráfico HTTP/HTTPS (o de capa 7). Los Network Load Balancers se utilizan para dirigir el tráfico TCP o UDP (o de capa 4). Para obtener más información, consulte Tipos de balanceadores de carga .

Al crear un grupo de destino para estos servicios, se debe elegir ip como tipo de destino, no instance. Esto se debe a que las tareas que utilizan el modo de red awsvpc están asociadas a una interfaz de red elástica, no a una instancia de Amazon EC2. Para obtener más información, consulte Equilibrio de carga de los servicios .

Solo se admite la utilización de un Network Load Balancer para dirigir el tráfico UDP a las tareas de Amazon ECS alojadas en AWS Fargate cuando se utiliza la versión 1.4 de la plataforma y para las tareas lanzadas en las siguientes regiones:

  • Este de EE. UU. (Norte de Virginia) – us-east-1

  • Oeste de EE. UU. (Oregón) – us-west-2

  • Europa (Irlanda)

  • Asia-Pacífico (Tokio) (ap-northeast-1)

Autenticación de registros privados

Las tareas de Amazon ECS para AWS Fargate pueden autenticarse en registros de imágenes privados, incluido Docker Hub, mediante autenticación básica. Cuando se habilita la autenticación de registros privados, puede utilizar las imágenes de Docker privadas en sus definiciones de tareas.

Para utilizar la autenticación de registros privados, debe crear un secreto con AWS Secrets Manager que contenga las credenciales del registro privado. A continuación, en la definición de contenedor, deberá especificar repositoryCredentials con el ARN completo del secreto que ha creado. El siguiente fragmento de definición de tarea muestra los parámetros necesarios:

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter: "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]

Para obtener más información, consulte Autenticación de registros privados para tareas .

Clústeres

Los clústeres pueden contener tareas que utilicen los tipos de lanzamiento de Fargate y EC2. Al visualizar los clústeres en la AWS Management Console, los recuentos de tareas de Fargate y EC2 se muestran por separado.

Para obtener más información acerca de los clústeres de Amazon ECS, incluso una explicación para crear un clúster, consulte Clústeres de Amazon ECS.

Fargate Spot

Los proveedores de capacidad de Amazon ECS le permiten utilizar la capacidad de AWS Fargate y de Fargate Spot para las tareas de Amazon ECS.

Contenedores de Windows en AWS Fargate no puede utilizar el proveedor de capacidad de Fargate Spot.

Con Fargate Spot, puede ejecutar tareas de Amazon ECS tolerantes a interrupciones con un descuento respecto al precio de AWS Fargate. Fargate Spot ejecuta las tareas en la capacidad de cómputo adicional. Cuando AWS necesita recuperar esa capacidad, las tareas se interrumpen previa advertencia con dos minutos de antelación. Para obtener más información, consulte Proveedores de capacidad de AWS Fargate .

Métricas de uso

Puede utilizar las métricas de uso de CloudWatch para proporcionar visibilidad sobre el uso de los recursos de su cuenta. Utilice estas métricas para visualizar el uso actual del servicio en paneles y gráficos de CloudWatch.

Las métricas de uso de AWS Fargate se corresponden con las cuotas de servicio de AWS. Puede configurar alarmas que le avisen cuando su uso se acerque a una cuota de servicio. Para obtener más información acerca de las cuotas de servicio de AWS Fargate, consulteCuotas de servicio de AWS Fargate.

Para obtener más información acerca de las métricas de uso de AWS Fargate, consulte Métricas de uso de AWS Fargate en la Guía del usuario de Amazon Elastic Container Service para AWS Fargate.

Mantenimiento de tareas

Cuando AWS determina que se necesita una actualización de seguridad o de infraestructura para una tarea de Amazon ECS alojada en AWS Fargate, se deben detener las tareas y lanzar nuevas tareas para sustituirlas. Para obtener más información, consulte Mantenimiento de tareas en la Guía del usuario de Amazon Elastic Container Service para AWS Fargate.

En la tabla siguiente, se describen estos escenarios.

Tipo de tarea Problema Acción

Tarea independiente

Problema del host

Se envía un aviso de retiro de tareas a través de AWS Health Dashboard y por correo electrónico. Si no se realiza ninguna acción hasta la fecha de retiro de la tarea, AWS la detiene.

Vulnerabilidad de la seguridad

Se envía un aviso de retiro de tareas a través de AWS Health Dashboard y por correo electrónico. Si no se realiza ninguna acción hasta la fecha de retiro de la tarea, AWS la detiene.

Tarea de servicio

Problema del host

AWS detuvo la tarea y el programador de servicios lanzará una nueva tarea en un intento por mantener el recuento deseado del servicio. No se envía ninguna notificación.

Vulnerabilidad de la seguridad

Se envía un aviso de retiro de tareas a través de AWS Health Dashboard y por correo electrónico. Si no se realiza ninguna acción hasta la fecha de retiro de la tarea, AWS la detiene y el programador de servicios iniciará una nueva tarea en un intento por mantener el recuento deseado del servicio.

Savings Plans

Los Savings Plans son un modelo flexible de precios que ofrece un ahorro importante en el uso de AWS. Usted se compromete a una cantidad de uso constante, en USD por hora, durante un período de uno o tres años, y recibe un precio inferior por ese uso. Para obtener más información, consulte la Guía del usuario de Savings Plans.

Para crear un Savings Plan para la utilización de AWS Fargate, utilice el tipo Compute Savings Plans. Para comenzar, consulte Introducción a Savings Plans en la Guía del usuario de Savings Plans.

Contenedores de Windows en las consideraciones sobre Fargate de AWS Fargate

Los contenedores de Windows en Fargate de AWS son compatibles con los siguientes sistemas operativos:

  • Windows Server 2019 Full

  • Windows Server 2019 Core

AWS gestiona la administración de licencias del sistema operativo, por lo que no necesita ninguna licencia de Microsoft adicional.

Los contenedores de Windows en Fargate de AWS son compatibles con el controlador awslogs. Para obtener más información, consulte Uso del controlador de registros awslogs .

Sus tareas pueden ejecutar contenedores Linux o contenedores Windows. En caso de que se ejecuten ambos tipos de contenedores, debe crear tareas independientes.

Las siguientes características no son compatibles en los contenedores de Windows en Fargate:

  • Cuentas de servicio administradas por grupos (gMSA)

  • Amazon FSx

  • Enlace troncal de ENI

  • Integración de proxy y servicio App Mesh para tareas

  • Integración de enrutador de registro Firelens para tareas

  • Almacenamiento efímero configurable

  • Volúmenes de EFS

  • El proveedor de capacidad de Fargate Spot

  • Volúmenes de imágenes

    La opción Dockerfile volume se omite. En cambio, use un montaje de enlace en la definición de tarea. Para obtener más información, consulte Montajes de enlace .

Tutoriales de introducción

Los siguientes tutoriales le ayudan a empezar a utilizar AWS Fargate con Amazon ECS: