Skip to content

Como construir um cluster usando o Amazon ECS

Não uso mais o ECS, mas como já havia criado esse texto achei interessante publicar para que tem interesse em criar um cluster usando o ECS. Pra quem não conhece o Amazon ECS é o Orquestrador de containers nativo da AWS e tem a vantagem de ter já tudo acoplado com todas as soluções da amazon.

Gostaria de reforçar que, não uso mais o ECS, prefiro usar o Kubernetes, que a amazon já possui uma solução que é o EKS, porém ainda é uma boa alternativa se você usa apenas as soluções da Amazon. Mesmo que não use algumas partes desse guia podem te ajudar a configurar no ambiente que muitas vezes é um pouco chato pra quem está começando.

Para montar o ambiente dividimos esse guia nas partes abaixo:
Montando o Cluster
Fixando um IP a máquina
Configurando o Security Group
Criando o Load Balancer
Associando um service a um Load Balancer
Criando o CloudFront
Associando o CloudFront com o Route53

Montando o Cluster

Acessar o console da amazon e buscar no meu Services por “Elastic Container Service”.

Clicar no botão “Create Cluster”

Na próxima tela selecionar a opção “EC2 Linux + Networking” e clicar em Next step, essa opção vai indicar que vamos criar um cluster baseado numa instância EC2. No momento não usamos o Fargate por que hoje não teriamos como acessar o container e como o ambiente é novo seria um risco.

Na próxima tela vamos configurar as sessões abaixo:

Instance Configuration

Cluster Name: O nome que será dado ao cluster.
Provisioning Model: Temos a opção “On-Demand Instance” para instancias que rodam o tempo todo e temos as “Spot” que rodam só quando há um processamento, mesmo a última sendo mais barata há um tempo até a amazon subir a instância e começar o processamento.
EC2 instance type: Tipo de instância que será usada por default, sendo recomendado para ambientes não produtivos uma t2.micro, já em ambiente produtivo é necessário verificar a carga necessária.
Number of instances: O número de instâncias EC2 que serão usadas por padrão no inicio.
EBS storage (GiB)*: Tamanho disponível nas instâncias, caso não for usar para armazenar imagens, vídeos ou arquivos pesados pode-se deixar no tamanho padrão.
Key pair: Gera um arquivo .pem que lhe permitirá o acesso a instancia ec2, para cada novo cluster é necessário especificar um key pair.

Networking

VPC: É a rede da amazon, nela você pode adicionar uma rede existente ou criar uma nova rede. Para esse flag normalmente se recomenda criar uma VPC nova.
CIDR block: A range de ips que ficará na sua rede, normalmente é deixar essa opção no padrão, a não ser que precise de algo específico.
Subnet: Por padrão vem duas, é recomendado deixar pelo menos o padrão para caso aconteça algum problema em uma subnet, seja possível enviar requisições para a outra subnet.
Security group: É basicamente o firewall da rede, é através dele que conseguimos fazer as liberações necessárias, é recomendado que crie sempre um novo security group
Security group inbound rules: É onde será colocada a regra padrão, pode deixar como está pois vamos alterar o security group.

Container instances IAM role

Container instance IAM role: Aqui é onde definimos a role na qual o IAM vai liberar as policies de acesso para esse cluster. Policies são acessos a determinadas features da amazon como ec2, s3 e etc. Pode deixar a rol padrão mesmo.

Após configurar tudo pode clicar no botão “Create”. Assim o ECS vai criar o cluster.
Clique em Services e busque por EC2, no dashboard clique em “running instances”
Identifique a instância ou as instâncias que foram criadas pelo cluster, o nome padrão delas, que fica na coluna Name, é “EC2 Instance – EC2ContainerService-nomedocluster”, quando passar o mouse em cima aparecerá novamente o ícone do lápis, clique nele e defina um nome amigável para facilitar a identificação da instância.

Fixando um IP a máquina

Vá até o menu services e clique em EC2, no dashboard clique em Elastic IPs.
Clicar no botão “Allocate new address”, ir dando Next Step até o fim.
Na coluna name irá aparecer um ícone de um lápis onde foi criado o novo IP, clique nele e defina um nome para facilitar a identificação posteriormente.
Clique em Actions e depois em Associate address
Será aberta uma tela com os itens abaixo:
Resource type: Temos dois tipos, o instance que é relacionada a uma instância EC2 ou Network Interface que será associada a um VPC. Nós normalmente usamos na instância.
Instance/Network interface: Aqui colocaremos ou a instância EC2 ou a VPC que gostaríamos de ter um IP fixo.
Private IP: Aqui vamos associar o IP privado da VPC ou EC2 para o IP fixo.
Reassociation: Marcamos essa opção para o IP ser associado principalmente caso a instância ou rede caia e seja submetida uma nova instância o IP ainda fique associado, assim garantindo que os endereços não mudem. Essa opção deixamos marcado.
Clique no botão “Associate” para finalizar o processo.

Configurando o Security Group

Para configurar o Security Group vá até o menu “Services” e depois clique em EC2
No Dashboard clique em “Security Group”.
Identifique o “Group Name” associado ao cluster ECS criado, ele deve ter a descrição parecida com isso -> “EC2ContainerService-nomedocluster…”
Vá até a coluna Name e clique no icone do Lapis e defina um nome amigável para o cluster.
Clique na linha do Security Group correspondente
Clique em Edit e depois em “Add Rule” e insira as regras abaixo:

Type
Protocol
Port Range
Source

Description
All TCP
TCP
0 – 65535
Custom
10.0.0.0/16
rede interna
SSH
TCP
22
My IP
x.x.x.x/32
Meu ip

A primeira linha é para dar acesso a todas as portas na rede interna, ou seja, assim você consegue fazer um container acessar a porta do banco de dados por exemplo, a rede “10.0.0.0/16” você deve trocar pela rede que seu cluster está usando. É possível fazer a liberação porta a porta, mas caso existam muitos serviços o trabalho fica bem inviável.
A segunda linha é a liberação de acesso ssh para o seu IP, pois mesmo com o Key Pair, você só consegue acessar o servidor se der permissão ao seu ip nele.

Criando o Load Balancer

A criação de Load Balancer (LB) fica mais fácil seu entendimento quando é associada a uma service do ECS.

Para criar o Load Balancer, vá até o menu “Services” e clique em “Load Balancers”
Clique em Create Load Balancer
Escolha a opção “Application Load Balancer”, pois com ela é possível associar mais de um service usando regras. Então clique em “Create”.
Na próxima tela configure conforme abaixo:
Basic Configuration
Name: Nome do Load Balancer
Scheme: Temos duas opções, “internet-facing” quando ele será exposto para a internet e “internal” quando ele só será usada na rede privada. No nosso caso usamo o “internet-facing”.
Ip Address type: Opção para definir se será usado IPv4 ou IPv6, por padrão usamos o IPv4 mesmo.

Listeners
Load Balancer Protocol: Aqui será definido qual protocolo e porta o load balancer irá se comunicar, no nosso caso pode-se deixar como http e porta 80, pois quem fornecerá o https será o cloudfront.

No próximo passo precisamos escolher a VPC que o LB será associado, é muito importante essa etapa pois, se colocar a VPC errada o LB não irá funcionar. Então se tiver dúvidas vá às opções do VPC para confirmar a rede.

Escolhendo a rede correta selecione pelo menos duas Availability Zone e clique em Next.

Na próxima tela o aws vai reclamar que o load balancer não está usando um listener secure e recomenda que se use https, no nosso caso vamos ignorar o alerta e clicar em Next.

Nessa tela vamos escolher um security group, é importante nessa fase verificar se o Name que aparece é igual o Group Definition da aba do security group para ter certeza que foi escolhido o grupo certo, após essa verificação clique em Next.

Nesse passo vamos configurar um “Target group”, ele será importante pois, com ele associamos o service que executará no cluster com o a regra no load balancer, em Target Group temos as opções abaixo:
Target Group
Nme
Protocol
Port
Target type
Health checks
Para aplicações que possuem raiz / pode-se deixar como padrão. O Health Check é usado pelo LB para verificar se aplicação está retornando status 200, se o status mudar ele remove as tasks do service e sobe novamente.
Depois de configurado clique em next.

Na próxima tela clique em Next novamente. Finalmente clique em create e espere o LB ser criado.

Associando um service ao Load Balancer

Vá no menu “services” clique em Elastic Container Services
Selecione o Cluster
Clique na aba Services
Clique em Create
Preencha as configurações abaixo:
Lauch type
Task Definition
Cluster
Service name
Number of tasks
Minimum healthy percent
Maximum percent
Task Placement
Deixar padrão

Na próxima tela em Load balancer type escolha a opção Application Load Balancer, na opção Load balancer name, escolha o nome do LB que você criou e clique no botão Add to load balancer para configurar os campos abaixo:
Listener port
Listener protocol
Target group name
Target group protocol
Target type
Path pattern
Heal check path
Após as configurações clique em next.

Na próxima opção podemos configurar o auto scaling para que ele crie services automaticamente, nesse instante vamos deixar sem configurar e clicar no next step.

Finalmente clique em Create Service para criar o serviço.

Vamos fazer um pequeno ajuste no LB agora, vá ate …

Criando o CloudFront

Clique no menu Services e depois vá até CloudFront
Clique em Create Distribution
Escolha a opção Web

Configure os campos
Origin Settings
Origin Path
Origin ID
Origin Custom Headers

Default Cache Behavior Settings
Path Pattern
View Protocol Policy
Allowed HTTP Methods
Field-level Encryption Config
Cached Based on Select Request Headers
Object Caching
Minimum TTL
Maximum TTL
Default TTL
Forward Cookies
Query String Forwarding and Caching
Smooth Streaming
Restrict View Access
Compress Objects Automatically
Lambda Funcion Assocations

Distribution Settings
Price Class
AWS WAF Web ACL
Alternate Domain Names
SSL Certificate
Supported HTTP Versions
Default Root Object
Logging
Bucket for Logs
Log Prefix
Cookie Loggin
Enable IPv6
Comment
Distribuition State

Associando o CloudFront com o Route53

Próximos Passos
Para pensar para o futuro:
Uma receita de infra (Cloud formation ou ansible?)
Um gestor de infra para rodar as receitas
Autoscaling das instâncias
Teste de Stress

Depois de tudo isso você pode me dizer “Há eu posso usar o Cloud Formation e tudo vai funcionar de maneira mais fácil”, sim concordo que configurar tudo que eu coloquei nesse artigo direto no Cloud Formation é o melhor dos mundos. Porém, muitas pessoas podem não ter tanta familiaridade com a plataforma da Amazon, precisando de um passo-a-passo para criar o seu ambiente, assim como já precisei. Vendo na internet não achei nada parecido com isso então achei interessante publicar.

Caso tenha gostado ou tenha alguma dúvida não deixe de comentar!

Published inferramentas