Amazon ECS no AWS Fargate - Serviço Amazon Elastic Container

Amazon ECS no AWS Fargate

O AWS Fargate é uma tecnologia que pode ser usada com o Amazon ECS para executar contêineres sem a necessidade de gerenciar servidores ou clusters de instâncias do Amazon EC2. Com o AWS Fargate, não é mais necessário provisionar, configurar nem dimensionar os clusters de máquinas virtuais para executar contêineres. Isso elimina a necessidade de escolher tipos de servidor, decidir quando dimensionar clusters ou otimizar o agrupamento de clusters.

Ao executar suas tarefas e serviços com o tipo de inicialização do Fargate, você empacota sua aplicação em contêineres, especifica os requisitos de CPU e de memória, define as políticas de rede e do IAM e inicia a aplicação. Cada tarefa do Fargate tem seu próprio limite de isolamento e não compartilha o kernel subjacente, os recursos de CPU, os recursos de memória nem a interface de rede elástica com outra tarefa.

O Fargate oferece versões de plataforma para as edições Amazon Linux 2 e Microsoft Windows 2019 Server Full e Core. A menos que especificado de outra forma, as informações nesta página se aplicam a todas as plataformas do Fargate.

Este tópico descreve os diferentes componentes das tarefas e serviços do Fargate e identifica as considerações especiais para usar o Fargate com o Amazon ECS.

Para obter informações sobre as regiões que oferecem suporte a contêineres de Linux no Fargate, consulte Regiões com suporte para contêineres do Linux no AWS Fargate.

Para obter informações sobre as regiões que oferecem suporte a contêineres de Windows no Fargate, consulte Regiões com suporte para contêineres do Windows no AWS Fargate.

Definições de tarefa

As tarefas do Amazon ECS no AWS Fargate não oferecem suporte a todos os parâmetros de definição de tarefa disponíveis. Alguns parâmetros são totalmente incompatíveis e outros se comportam de maneira diferente nas tarefas do Fargate.

Os seguintes parâmetros de definição de tarefa não são válidos nas tarefas do Fargate:

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • pidMode

  • placementConstraints

  • privileged

  • systemControls

Os seguintes parâmetros de definição de tarefa são válidos em tarefas do Fargate, mas têm limitações que devem ser observadas:

  • linuxParameters: ao especificar opções específicas do Linux que são aplicadas ao contêiner, para capabilities o parâmetro add não têm suporte. Os parâmetros devices, sharedMemorySize e tmpfs não têm suporte. Para mais informações, consulte Parâmetros do Linux.

  • volumes: as tarefas do Fargate só oferecem suporte aos volumes do host de montagem bind e, portanto, não há suporte para o parâmetro dockerVolumeConfiguration. Para mais informações, consulte Volumes.

  • cpu: para contêineres do Windows no AWS Fargate, o valor não pode ser menor que 1 vCPU.

Para garantir que sua definição de tarefa seja válida para uso com o Fargate, é possível especificar o seguinte quando você registrar a definição de tarefa:

  • No AWS Management Console, para o campo Requires Compatibilities (Requer compatibilidades), especifique FARGATE.

  • Na AWS CLI, especifique a opção --requires-compatibilities.

  • Na API do Amazon ECS, especifique o sinalizador requiresCompatibilities.

Modo de rede

As definições de tarefa do Amazon ECS para o AWS Fargate exigem que o modo de rede seja definido como awsvpc. O modo de rede awsvpc fornece uma interface de rede elástica própria para cada tarefa. Para obter mais informações, consulte Redes de tarefas do AWS Fargate no Guia do usuário do Amazon Elastic Container Service para AWS Fargate.

Também é necessário configurar a rede ao criar o serviço ou executar as tarefas manualmente. Para obter mais informações, consulte Redes de tarefas do AWS Fargate no Guia do usuário do Amazon Elastic Container Service para AWS Fargate.

Sistemas operacionais da tarefa

Quando você configura uma definição de tarefa e de contêiner para AWS Fargate, você deve especificar o sistema operacional que o contêiner executa. Há suporte para os seguintes sistemas operacionais para AWS Fargate:

  • Amazon Linux 2

  • Windows Server 2019 Full

  • Windows Server 2019 Core

Arquitetura de CPU da tarefa

Existem duas arquiteturas disponíveis para a definição de tarefas do Amazon ECS, ARM e X86_64.

Quando você executar contêineres do Windows no AWS Fargate, você deverá ter uma arquitetura de CPU X86_64.

Quando você executar contêineres do Linux no AWS Fargate, você pode usar a arquitetura de CPU X86_64 ou a arquitetura ARM64 para suas aplicações baseadas em ARM. Para mais informações, consulte Trabalhar com workloads ARM de 64 bits no Amazon ECS.

CPU e memória da tarefa

As definições de tarefa do Amazon ECS para AWS Fargate exigem que você especifique a CPU e a memória no nível da tarefa. Embora você também possa especificar a CPU e a memória no nível do contêiner para tarefas do Fargate, isto é opcional. A maioria dos casos de uso são atendidos com a especificação desses recursos somente no nível de tarefa. A tabela a seguir mostra as combinações válidas para CPU e memória em nível de tarefa.

Valor de CPU Valor de memória Sistemas operacionais com suporte para o AWS Fargate
256 (0,25 vCPU) 512 MiB, 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 e 16 GB em incrementos de 1 GB Linux, Windows
4096 (4 vCPU) Entre 8 GB e 30 GB em incrementos de 1 GB Linux, Windows

Limites de recursos de tarefa

As definições de tarefa do Amazon ECS para contêineres do Linux no AWS Fargate oferecem suporte ao parâmetro ulimits para definir os limites de recursos a serem estabelecidos para um contêiner.

As definições de tarefa do Amazon ECS para Windows no AWS Fargate não oferecem suporte ao parâmetro ulimits para definir os limites de recursos a serem estabelecidos para um contêiner.

As tarefas do Amazon ECS hospedadas no Fargate usam os valores de limite de recursos padrão limitados pelo sistema operacional, com exceção do parâmetro de limite de recursos nofile, que é substituído pelo Fargate. O limite de recursos nofile define uma restrição sobre o número de arquivos abertos que um contêiner pode usar. O limite flexível nofile padrão é 1024 e o limite rígido é 4096.

Veja a seguir um exemplo de trecho de definição de tarefa que mostra como definir um limite nofile personalizado que tenha sido duplicado:

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

Para obter mais informações sobre os outros limites de recursos que podem ser ajustados, consulte Limites de recurso.

Registro em log

As definições de tarefa do Amazon ECS para AWS Fargate oferecem suporte aos drivers de log awslogs, splunk e awsfirelens para a configuração do log.

O driver de log awslogs configura as tarefas do Fargate para enviar informações de log ao Amazon CloudWatch Logs. A tabela a seguir mostra um trecho de uma definição de tarefa em que o driver de log awslogs está configurado:

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

Para obter mais informações sobre como usar o driver de log awslogs em uma definição de tarefa para enviar os logs de contêiner para o CloudWatch Logs, consulte Usar o driver de log awslogs.

Para obter mais informações sobre o driver de log awsfirelens em uma definição de tarefa, consulte Roteamento de logs personalizados.

Para obter mais informações sobre como usar o driver de log splunk em uma definição de tarefa, consulte Exemplo: driver de log do splunk.

Função do IAM de execução de tarefas do Amazon ECS

Existe uma função do IAM opcional para execução de tarefas que você pode especificar com o Fargate para permitir que as tarefas do Fargate façam chamadas de API para o Amazon ECR. As chamadas de API extraem imagens de contêiner, além de chamar o CloudWatch para armazenar os logs de aplicações do contêiner. Para mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

Exemplo de definição de tarefa do Amazon Linux 2

Veja a seguir um exemplo de definição de tarefa que configura um servidor da Web usando o tipo de inicialização do Fargate com um sistema operacional 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" ] }

Exemplo de definição de tarefa do Windows

Veja a seguir um exemplo de definição de tarefa que configura um servidor da Web usando o tipo de inicialização do Fargate com um sistema operacional 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" ] }

Armazenamento de tarefas

Para tarefas do Amazon ECS hospedadas no Fargate, os seguintes tipos de armazenamento são compatíveis:

  • Os volumes do Amazon EFS para armazenamento persistente. Para mais informações, consulte Volumes do Amazon EFS.

  • Montagens bind para armazenamento temporário. Para mais informações, consulte Montagens bind.

Tarefas e serviços

Depois da preparação da definição da tarefa do Amazon ECS para AWS Fargate, algumas decisões deverão ser tomadas quando o serviço for criado.

Redes de tarefas

As tarefas do Amazon ECS para AWS Fargate exigem o modo de rede awsvpc, que fornece uma interface de rede elástica para cada tarefa. Ao executar uma tarefa ou criar um serviço com esse modo de rede, você deve especificar uma ou mais sub-redes para anexar à interface de rede e um ou mais security groups para aplicar à interface de rede.

Se você estiver usando sub-redes públicas, decida se um endereço IP público será fornecido à interface de rede. Para uma tarefa do Fargate em uma sub-rede pública, para extrair imagens do contêiner, será preciso que um endereço IP público seja atribuído à interface de rede elástica da tarefa, com uma rota para a Internet ou um gateway NAT que possa encaminhar as solicitações para a Internet. Para que uma tarefa do Fargate em uma sub-rede privada extraia imagens de contêiner, é necessário um gateway NAT na sub-rede para encaminhar solicitações para a Internet. Ao hospedar imagens de contêiner no Amazon ECR, você pode configurar o Amazon ECR para usar um endpoint da VPC de interface. Nesse caso, o endereço IPv4 privado da tarefa é usado para a extração da imagem. Para obter mais informações sobre endpoints de interface do Amazon ECR, consulte Endpoints da VPC de interface do Amazon ECR (AWS PrivateLink) no Guia do usuário do Amazon Elastic Container Registry.

Veja a seguir um exemplo da seção networkConfiguration para um serviço do Fargate:

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

Balanceamento de carga do serviço

O serviço do Amazon ECS no AWS Fargate pode ser configurado opcionalmente para usar o Elastic Load Balancing para distribuir o tráfego uniformemente entre as tarefas do serviço.

Os serviços do Amazon ECS no AWS Fargate oferecem suporte aos tipos de balanceadores de carga Application Load Balancer e Network Load Balancer. Application Load Balancers são usados para encaminhar o tráfego HTTP/HTTPS (ou camada 7). Os Network Load Balancers são usados para encaminhar o tráfego TCP ou UDP (ou camada 4). Para mais informações, consulte Tipos de balanceador de carga.

Ao criar grupos de destino para esses serviços, você precisa escolher ip como o tipo de destino, e não instance. Isso ocorre porque as tarefas que usam o modo de rede awsvpc estão associadas a uma interface de rede elástica, e não a uma instância do Amazon EC2. Para mais informações, consulte Balanceamento de carga do serviço.

O uso de um Network Load Balancer para encaminhar o tráfego UDP para tarefas do Amazon ECS no AWS Fargate só será compatível quando for usada a versão 1.4 da plataforma, ou posterior.

Autenticação de registro privado

As tarefas do Amazon ECS para AWS Fargate podem ser autenticadas com registros de imagem privados, incluindo o Docker Hub, por meio de autenticação básica. Ao ativar a autenticação de registro privado, você pode utilizar imagens de docker privadas nas definições de tarefas.

Para usar autenticação de registro privado, você cria um segredo com o AWS Secrets Manager contendo as credenciais do registro privado. Em seguida, na definição do contêiner, você especifica repositoryCredentials com o ARN completo do segredo que você criou. O trecho a seguir de uma definição de tarefa mostra os parâmetros necessários:

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

Para mais informações, consulte Autenticação de registro privado para tarefas.

Clusters

Os clusters podem conter tarefas que usam os tipos de inicialização do Fargate e do EC2. Ao visualizar seus clusters no AWS Management Console, as contagens de tarefas do Fargate e do EC2 são exibidas separadamente.

Para obter mais informações sobre os clusters do Amazon ECS, incluindo uma demonstração da criação de um cluster, consulte Clusters do Amazon ECS.

Fargate Spot

Os provedores de capacidade do Amazon ECS permitem o uso da capacidade do AWS Fargate e do Fargate Spot com as tarefas do Amazon ECS.

Os contêineres do Windows no AWS Fargate não podem usar o provedor de capacidade Fargate Spot.

Com o Fargate Spot, é possível executar tarefas tolerantes a interrupções do Amazon ECS com uma taxa de desconto em comparação com o preço do AWS Fargate. O Fargate Spot executa tarefas com capacidade adicional de computação. Quando a AWS precisar da capacidade de volta, suas tarefas serão interrompidas com um aviso de dois minutos. Para mais informações, consulte Provedores de capacidade do AWS Fargate.

Métricas de uso

Você pode usar métricas de uso do CloudWatch para fornecer visibilidade sobre o uso dos recursos da sua conta. Use essas métricas para visualizar o uso do serviço atual nos gráficos e painéis do CloudWatch.

As métricas de uso do AWS Fargate correspondem às cotas de serviço da AWS. Também é possível configurar alarmes que alertem você quando o uso se aproximar de uma cota de serviço. Para obter mais informações sobre cotas de serviço do AWS Fargate, consulte Cotas de serviço do AWS Fargate.

Para obter mais informações sobre métricas de uso do AWS Fargate, consulte Métricas de uso do AWS Fargate no Guia do usuário do Amazon Elastic Container Service para o AWS Fargate.

Manutenção de tarefas

Quando a AWS determina que é necessária uma atualização de segurança ou de infraestrutura para uma tarefa do Amazon ECS hospedada no AWS Fargate, as tarefas precisam ser interrompidas e novas tarefas iniciadas para substituí-las. Para obter mais informações, consulte Manutenção de tarefas no Guia do usuário do Amazon Elastic Container Service para o AWS Fargate.

A tabela a seguir descreve esses cenários.

Tipo de tarefa Problema Ação

Tarefa autônoma

Problema do host

Um aviso de desativação de tarefa é enviado usando o AWS Health Dashboard e e-mail. Se nenhuma ação for tomada até a data de desativação da tarefa, a AWS interromperá a tarefa.

Vulnerabilidade de segurança

Um aviso de desativação de tarefa é enviado usando o AWS Health Dashboard e e-mail. Se nenhuma ação for tomada até a data de desativação da tarefa, a AWS interromperá a tarefa.

Tarefa de serviço

Problema do host

A tarefa será interrompida pela AWS e o programador de serviços iniciará uma nova tarefa na tentativa de manter a contagem desejada do serviço. Nenhuma notificação é enviada.

Vulnerabilidade de segurança

Um aviso de desativação de tarefa é enviado usando o AWS Health Dashboard e e-mail. Se nenhuma ação for executada até a data de desativação da tarefa, a AWS interromperá a tarefa e o programador de serviços iniciará uma nova tarefa na tentativa de manter a contagem desejada do serviço.

Savings Plans

Savings Plans são um modelo de definição de preço que oferece economias significativas no uso da AWS. Você se compromete a uma quantidade consistente de uso, em USD por hora, por um período de vigência de 1 ou 3 anos, e recebe um preço mais baixo por esse uso. Para obter mais informações, consulte o Guia do usuário do Savings Plans.

Para criar um Savings Plan para o uso do AWS Fargate, use o tipo Compute Savings Plans. Para começar, consulte Conceitos básicos do Savings Plans no Guia do usuário do Savings Plans.

Considerações sobre contêineres do Windows no AWS Fargate

Os contêineres do Windows no AWS Fargate oferecem suporte aos seguintes sistemas operacionais:

  • Windows Server 2019 Full

  • Windows Server 2019 Core

AWS lida com o gerenciamento de licenças do sistema operacional, para que você não precise de nenhuma licença adicional da Microsoft.

Os contêineres do Windows no AWS Fargate oferecem suporte ao driver awslogs. Para mais informações, consulte Usar o driver de log awslogs.

Suas tarefas podem executar contêineres do Linux ou contêineres do Windows. Se precisar executar os dois tipos de contêiner, crie tarefas separadas.

Não há suporte para os seguintes recursos em contêineres do Windows no Fargate:

  • Contas de serviço gerenciadas pelo grupo (gMSA)

  • Amazon FSx

  • Entroncamento ENI

  • Integração de proxy e serviço App Mesh para tarefas

  • Integração do roteador de log Firelens para tarefas

  • Armazenamento temporário configurável

  • Volumes do EFS

  • O provedor de capacidade Fargate Spot

  • Volumes de imagem

    A opção volume do Dockerfile é ignorada. Em vez disso, use montagens bind na sua definição de tarefa. Para mais informações, consulte Montagens bind.

Demonstrações de conceitos básicos

As demonstrações a seguir ajudarão você a começar a usar o AWS Fargate com o Amazon ECS: