DEV Community

Cover image for AWS ECS Básico
Cristiano Lemes
Cristiano Lemes

Posted on

AWS ECS Básico

Introduc¸a˜o\large\texttt{Introdução}

Neste guia vamos abordar a criação de um cluster ECS (Elastic Container Service) no AWS Fargate.

AWS ECS
Imagem documentação ECS

Conceitos Fundamentais\large\texttt{Conceitos Fundamentais}

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"
}
Enter fullscreen mode Exit fullscreen mode
  • 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 e DaemonSets 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"
        }
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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/*"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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
Criando um cluster ECS usando a console\large\texttt{Criando um cluster ECS usando a console}

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.

ECS Home Page

  • Especifique o nome para o cluster em Cluster Name

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.

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.

Create

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.

Task definition

  • Defina um nome para usar task definition
  • Em Launch Type deixe marcado Fargate
  • Em Operating System/Architecture usaremos Linux 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.

Task Definition

  • Em Container colocamos os dados do container, no caso vamos usar a imagem do nginx.

Container name

Agora vamos criar um service.

Voltando em Cluster, clicando no cluster que criamos, em services, clique no botão Create.

Service

  • Em Compute options podemos deixar em Capacity 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.

Launch Type

  • 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.

Deployment

  • 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

VPC Select

  • 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.

Create SG

  • O Progresso da criação pode ser visto clicando em view cloudformation

Cloud Formation

  • Tarefa finaliza em services

Services

  • Em Tasks, clicando na task que criamos, podemos ver todos os detalhes, como ip externo.

tasks

  • Detalhes da task.

detalhes

Conclusa˜o\large\texttt{Conclusão}

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.


Recursos Adicionais\large\texttt{Recursos Adicionais}

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay