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}

Top comments (0)