Neste guia vamos abordar a criação de um cluster ECS (Elastic Container Service) no AWS Fargate.
O que é ECS
O ECS (Elastic Container Service) é um serviço de orquestração de containers da AWS que traz uma forma mais simples que o Kubernetes de gerenciar containers, sendo mais simples, porém menos flexível, já que usa uma tecnologia proprietária da AWS e não permite customizações avançadas. Ele permite executar, parar e gerenciar contêineres em um cluster de instâncias EC2, no AWS Fargate (serverless) ou on-premises usando ECS Anywhere.
Recursos:
- Gerenciamento simplificado comparado ao Kubernetes
- Integração nativa com serviços AWS
- Menor curva de aprendizado
- Flexibilidade de deployment (EC2, Fargate, on-premises)
Diferenças entre ECS e Kubernetes
Característica | ECS | Kubernetes |
---|---|---|
Complexidade | Menor | Maior |
Flexibilidade | Limitada | Alta |
Vendor Lock-in | Sim | Não |
Integração AWS | Nativa | Via plugins |
Curva de aprendizado | Suave | Média |
Componentes do ECS
Task Definition: Contém as definições de como o container deve ser executado, similar a um Deployment no Kubernetes. Define recursos como:
- Imagem do container
- Recursos de CPU e memória
- Variáveis de ambiente
- Mapeamento de portas
- Volumes
- Configurações de rede
Exemplo de uma Task definition:
{
"family": "app-task",
"containerDefinitions": [
{
"name": "web",
"image": "nginx:latest",
"cpu": 256,
"memory": 512,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]
}
],
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512"
}
Task: É uma instância em execução de uma Task Definition, sendo a menor unidade do ECS, equivalente a um Pod no Kubernetes. Uma task pode conter um ou mais containers que trabalham juntos.
-
Service: Garante que um número específico de tasks esteja sempre rodando, similar ao
ReplicaSet
eDaemonSets
do Kubernetes. O service oferece:- Auto-healing (reinicia containers que falharam)
- Balanceamento de carga
- Escalabilidade
- Rolling updates
Launch Types
EC2 Launch Type
No modelo EC2, você define:
- Tipo de instância EC2
- Capacidade máxima do cluster
- Auto Scaling Groups
- Políticas de escalabilidade
O ECS gerencia:
- Alocação dos containers no cluster
- Processos de inicialização e parada
- Monitoramento de saúde
- Distribuição de carga entre instâncias
Ideal para:
- Cargas de trabalho previsíveis
- Necessidade de controle granular sobre a infraestrutura
- Otimização de custos para cargas constantes
Fargate Launch Type
No modelo Fargate, você:
- Define apenas os recursos necessários (CPU/RAM)
- Especifica limites de scaling
- Não gerencia infraestrutura
AWS gerencia:
- Provisionamento de recursos
- Escalabilidade
- Patches e manutenção
- Alta disponibilidade
Ideal para:
- Cargas variáveis
- Aplicações que precisam escalar rapidamente
- Redução de overhead operacional
- Ambientes de desenvolvimento e teste
ECS Anywhere Launch Type
Usando o ECS Anywhere, você pode:
- Gerenciar containers em ambiente híbrido
- Usar hardware on-premises
- Manter conformidade com requisitos de residência de dados
- Executar cargas de trabalho em edge locations
Casos de uso:
- Aplicações que precisam rodar próximas aos usuários
- Workloads com requisitos específicos de hardware
- Ambientes regulados que exigem controle total sobre a infraestrutura
- Migração gradual para nuvem
Volumes persistentes
Caso seu contêiner precise de montar um volume persistente, você pode montar volumes o EFS (Elastic File System), que é um sistema de arquivos NFS disponível na AWS, o armazenamento pode ser compartilhado pelos contêineres e fica disponível em múltiplas zonas de disponibilidades (AZ) dentro da mesma região.
EFS (Elastic File System)
- Sistema de arquivos NFS gerenciado pela AWS
- Escalável automaticamente
- Disponível em múltiplas AZs
- Ideal para compartilhamento de dados entre containers Montagem de volume EFS
{
"volumes": [
{
"name": "efs-volume",
"efsVolumeConfiguration": {
"fileSystemId": "fs-1234",
"rootDirectory": "/",
"transitEncryption": "ENABLED",
"authorizationConfig": {
"accessPointId": "fsap-1234",
"iam": "ENABLED"
}
}
}
]
}
Segurança e IAM
Task Role
O Task Role define as permissões que os containers dentro da task têm para acessar outros serviços AWS. Por exemplo:
- Acesso ao S3 para armazenamento de arquivos
- Acesso ao DynamoDB para persistência
- Acesso ao SQS/SNS para mensageria
- Acesso ao Secrets Manager para segredos
Exemplo de política IAM para Task Role:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Task Execution Role
O Task Execution Role é usado pelo serviço ECS para:
- Pull de imagens do ECR
- Envio de logs para o CloudWatch
- Recuperação de segredos do Secrets Manager/Parameter Store
Não vamos abordar criação de VPCs e security groups, vamos usar o padrão.
- No console de gerenciamento do ECS, clique no botão
Create cluster
.
- Especifique o nome para o cluster em
Cluster Name
- Em Infrasctructure deixe marcado somente
AWS Fargate
- Você pode deixar marcado Amazon EC2 instance, você deixando o Desired capacity em 0, ele somente vai alocar uma EC2 quando você criar uma Task definition escolhendo o EC2 como
launch type
.
- Clique em
Create
Agora nosso cluster ECS está criado. Clicando no nome do cluster vai abrir a visão geral do cluster, a unica guia que vai ter informação é infrastructure, com os capacity providers do Fargate, conforme selecionamos.
Criando uma Task Definition
A task definition cria as definições da task, como um manifesto do kubernetes, para depois usarmos para fazer a implantação do Service.
- No menu lateral vamos em task definition, clique no botão
Create Task definition
.
- Defina um nome para usar task definition
- Em Launch Type deixe marcado Fargate
- Em
Operating System/Architecture
usaremosLinux x86_64
, mas também pode usar Arm e Windows. - Em
Task size
defina os recursos necessários para aplicação. -
Task Role
, não vamos usar, mas é usado para dar acesso ao container à outros serviços aws, como uma conta de serviço. -
Taks execution Role
, deixe o padrão, se a rote não existir ele vai criar automaticamente uma com as permissões adequadas.
- Em
Container
colocamos os dados do container, no caso vamos usar a imagem do nginx.
Agora vamos criar um service.
Voltando em Cluster, clicando no cluster que criamos, em services, clique no botão Create
.
- Em
Compute options
podemos deixar emCapacity provider strategy
para AWS definir automaticamente qual capacity provider usar, como temos só Fargate não faz diferença, marcando Launch Type, e em Launch Type você consegue selecitionar o tipo de launch type caso tenha mais de um disponível no cluster.
- Em Deployment Configuration,
Aplication type
escolha Service. A opção task é para usar em jobs que executam a partir de um agendamento ou manualmente e depois param. - Em
Family
escolha a Task Definition criada anteriormente. - Em
Service
name coloque um nome para o serviço.
- Em
Deployment option
vamos deixar em Rolling update, que funciona como Rolling update do kubernetes, ele vai atualizar um container sempre mantendo uma quantidade ativa, de acordo com o percentual estipulado, para não ter queda no serviço. - Em replica, você define a quantidade de containers do mesmo serviço que vai ser implatando.
- Em Networking escolha a VPC, e as subnets, lembrando que o ECS é MultiAZ então você pode escolher uma subnet de cada AZ. Você pode deixar
- Em security group, vamos criar um novo security group, e liberar o acesso http ao container.
- Public IP, deixe ativo
- Não é obrigatório usar Load Balancer, você pode expor um único container. Para ter alta disponibilidade, usar autoscaling, ter SSL/TTL gerenciados, você vai precisar de um Load Balancer.
- O Progresso da criação pode ser visto clicando em
view cloudformation
- Tarefa finaliza em services
- Em Tasks, clicando na task que criamos, podemos ver todos os detalhes, como ip externo.
- Detalhes da task.
O ECS oferece uma forma simplificada de executar containers na AWS, com forte integração com outros serviços AWS. Seguindo este guia e as melhores práticas, você pode criar uma infraestrutura resiliente e escalável para suas aplicações conteinerizadas.
Também criei um as definições do terraform para criar esse ambiente, acesse no link abaixo.
Top comments (0)