Escrito por Giovanna Gadelha e Willian de Vargas,

7 minutos de leitura

Desmistificando a orquestração de containers com o ECS

Veja o que é conteinerização e conheça o Amazon Elastic Container Service (ECS), ferramenta de orquestração de containers da AWS.

Compartilhe este post:

Com o crescente uso da conteinerização, surgiu a necessidade da criação de ferramentas que orquestram o uso dessa tecnologia. Com isso, se garante a implantação, o gerenciamento, a escalabilidade e a rede dos containers, tornando todo o processo de criação e monitoramento muito mais automatizado e escalável, indo ao encontro da famosa cultura DevOps.

Atualmente, existem ferramentas bastante utilizadas e que, em pouco tempo de aprendizado, nos permitem instrumentar nossa aplicação. O objetivo do presente artigo é descrever o conceito da conteinerização e apresentar o Amazon Elastic Container Service (ECS), ferramenta de orquestração de containers da Amazon Web Services (AWS), bem como demonstrar uma perspectiva prática desse conteúdo.

 

O que é a tecnologia de containers?

Conhecida também como conteinerização, a tecnologia de containers nos permite executar aplicações em sistemas isolados, os containers, que viabilizam uma configuração mais simples do que a de uma máquina virtual. Inclusive, ambos conceitos são similares. Utiliza-se a virtualização em máquinas para diferenciar do conceito de conteinerização, em seguida, falaremos sobre essa comparação. Em resumo, a implantação de uma aplicação em containers, acaba por ser mais eficiente, devido a arquitetura dessa tecnologia, que é executada em um controle único, assim como em um kernel único, sem a necessidade de separar as instâncias.

Para ficar claro o conceito de conteinerização, é muito comum comparar essa tecnologia com a de máquinas virtuais (VM), já que ambas são semelhantes. Na virtualização temos a configuração de um servidor para desempenhar o mesmo papel que uma máquina física, implementando um sistema operacional que permite a criação de um ambiente funcional para a execução de aplicações. Já em um container, não temos a necessidade de um sistema operacional, são utilizados blocos independentes que permitem somente a instalação de uma aplicação para que tudo funcione igualmente a um ambiente de virtualização – de uma maneira mais otimizada.

 

Container docker

Uma das principais tecnologias de conteinerização é o container docker. O docker em si, é uma plataforma open-source construída na linguagem de programação Go. Ele entrega pacotes de software, conhecidos como containers, que são responsáveis pela execução do código, baseado nos containers Linux (LXC). O container docker, ao ser criado a partir de uma imagem, permite a instalação dos recursos necessários para a aplicação e a executa no servidor, com um desempenho alto e eficiente. Todo esse processo é possível a partir do dockerfile, que cria a imagem, e através dos comandos docker, o container sobe em produção, com todo o ambiente instanciado e funcional. O isolamento dos blocos também possibilita a limitação de recursos de acordo com a necessidade de cada aplicação.

 

O que é o AWS ECS?

O Amazon Elastic Container Service (ECS) é um orquestrador de containers que garante a segurança, escala e execução de um ou mais containers. Com recursos utilizados que serão descritos logo abaixo, é possível gerenciar toda a configuração e monitoramento de uma aplicação que utiliza a conteinerização como parte da arquitetura. Além disso, o ECS promove benefícios como a integração com outros serviços oferecidos pela AWS, e também é capaz de prover uma solução serverless com o AWS Fargate. Em seguida, iremos demonstrar os conceitos dos recursos envolvidos na construção de um ambiente no ECS.

+++ Amazon Elastic Container Registry (ECR)

O Amazon Elastic Container Registry funciona como um repositório das imagens de container totalmente gerenciado pela AWS. Ele atua como um facilitador em questões como o armazenamento, gerenciamento, compartilhamento e implantação dessas imagens. Em resumo, utilizamos o ECR para hospedar nossa imagem de container em uma arquitetura que fornece um alto desempenho, com isso, é possível implementar os aplicativos de container de uma maneira mais fácil e segura.

+++ Task definition
Uma task definition pode ser entendida como um projeto para o seu aplicativo, ou seja, ela é responsável por especificar todos os parâmetros para a construção do aplicativo em questão, um exemplo é a definição de quais contêineres serão usados. Portanto a task definition, basicamente, é um arquivo de texto no formato JSON, que descreve os contêineres e as definições que serão utilizados na aplicação.

+++ Cluster
O cluster é criado para executar as tarefas a partir dele, portanto, ele é um agrupamento lógico de tarefas e serviços, que também são executados a partir do registro de uma ou mais instâncias EC2.

+++ Service
E, por fim, um service permite a execução e mantimento de uma ou mais instâncias de uma task definition de maneira simultânea em um cluster. Ele demonstra o status da tarefa, assim como a quantidade de tarefas que estão sendo executadas.

 

Mãos na massa

Nesta demonstração, iremos realizar o deploy de uma aplicação em Docker que realiza consultas no Twitter, de 15 em 15 minutos, coletando tweets que contenham a hashtag “#AWS”, os armazenando em um arquivo .csv. Por fim, este arquivo será salvo diretamente dentro de um bucket na S3.

 

+++ 1º Criando um bucket na S3:

Antes de tudo, precisamos criar um bucket no S3 para armazenar nosso arquivo de saída.

1. Acesse o serviço S3 no painel da AWS

2. Clique em “Create Bucket

3. Insira um nome para o bucket

4. Insira suas Tags (passo opcional)

5. Clique em “Create bucket” no final da página

 

+++  2º Clonando o repositório com os códigos necessários:

1. Faça um clone do repositório do projeto.

2. Leia e execute as instruções do README.md presente no diretório “ECS

 

+++ 3º Criando um novo repositório ECS:

1. No painel AWS, procure pelo serviço “Elastic Container Service” e entre nele.

2. Expanda o menu, no canto superior esquerdo, e em seguida clique em “Repositories”.

3. Clique em “Create Repository”:

4. Preencha o nome do repositório e em seguida clique em “Create repository”, no fim da página.

5. Seu repositório deve aparecer listado, conforme a imagem abaixo:

 

+++ 4º Subindo a imagem Docker para o seu repositório:

1. Ainda em “Repositories”, clique sobre o nome do repositório.

2. Ao adentrar o seu repositório, clique em “View push comands”, no canto superior direito da tela.

3. Na janela que abrir, você vai encontrar 4 linhas de comando (os push commands para o repositório), das quais você deverá reproduzir no mesmo diretório que o Dockerfile se encontra.

4. Após a execução das 4 linhas de comando, sua imagem deverá aparecer listada no repositório, como na imagem abaixo:

 

+++ 5º Criando a Task Definition:

1. No menu lateral, selecione a opção “Task definitions”.

2. Na janela que abriu, clique em “Create new Task Definition

3. Em “Select launch type compatibility”, selecione a opção “EC2” e clique em “Next step”.

4. Insira um nome para a Task Definition:

5. Em “Container Definitions”, clique em “Add container”:

6. Adicionando um container:

    • Preencha o nome do container:
    • Preencha a URI da imagem que você subiu no repositório durante o 3º passo:
      • Para obter a URI da imagem, volte ao repositório que você criou e clique em “Copy URI”, que aparece na imagem com a “Image tag” definida como “latest
    • Em “Memory Limits (MiB)”, digite “128”:
    • Em “CPU units”, digite “1024”:
    • Clique em “Add

7. Em “Tags”, adicione as tags que você desejar (este é um passo opcional).

8. Clique em “Create

9. Sua Task definition deverá aparecer listada e ativa conforme a imagem abaixo:

 

+++ 6º Criar um novo Key Pair para poder acessar a instância EC2 via SSH posteriormente:

1. No painel da AWS acesse o serviço “EC2”.

2. No menu lateral, clique em “Key Pairs”, localizado em “Network & Security

3. Na janela que abriu, clique em “Create key pair” no canto superior direito

4. Insira um nome para a Key pair, deixe o formato do arquivo como “.pem

5. Clique em “Create key pair” e então um arquivo será baixado

6. Copie o arquivo para a mesma pasta dos arquivos que você baixou no 1º passo

7. Na pasta contendo o arquivo da Key pair, execute a seguinte linha de comando no terminal: “chmod 400 <nome da key pair>.pem

 

+++ 7º Criar um cluster:

1. Voltando a janela do serviço “ECS”, clique em “Clusters”, no menu lateral esquerdo.

2. Em seguida, clique em “Create cluster”:

3. Em “Select cluster template”, selecione a opção “EC2 Linux + Networking” e clique em “Next Step

4. Insira um nome para o cluster:

5. Em “EC2 instance type”, selecione a opção “t2.micro

6. Em “Key pair” selecione a Key pair que você criou no passo anterior

7. Em “Tags”, adicione as tags que você desejar (este é um passo opcional).

8. Clique em “Create

9. Após a criação do cluster, clique em “View cluster”, para ser redirecionado para dentro do cluster criado.

 

+++ 8º Criando o service:

1. Dentro do cluster, desça até o fim da página e encontre a aba “Services”. Nesta aba, clique em “Deploy” para criar um novo serviço.

2. No topo da página, em “Environment”, expanda a seção “Compute configuration (advanced)” e, em “Launch type”, selecione a opção “EC2

3. Em “Deployment configuration” configure conforme a imagem abaixo:

4. Em “Tags”, adicione as tags que você desejar (este é um passo opcional).

5. Clique em “Deploy

6. Após a criação do Serviço, ele deve ser listado conforme a imagem abaixo:

 

+++ 9º Testando a aplicação:

1. Acesse o bucket que você criou no passo 1.

2. Você deverá encontrar pelo menos 1 arquivo .csv salvo lá, conforme a imagem abaixo:

Obs.: nosso script python gera um novo arquivo .csv com os Tweets retornados e o salva no bucket a cada 15 minutos.

3. Se você encontrou os arquivos salvos no bucket, parabéns, você concluiu este tutorial com sucesso!

 

Conclusão

O uso de containers oferece diferentes ganhos, há uma vantagem de custo e infraestrutura, assim como um melhor desempenho e gerenciamento das aplicações. Para melhorar, o AWS ECS garante uma ótima orquestração de containers, além da possibilidade de integração com outros serviços da plataforma. Portanto, ao utilizar o ECS, os fatores baixo custo, facilidade e entrega de recursos são garantia dessa ferramenta. Além disso, a AWS não oferece somente esse serviço como orquestrador, temos também o AWS EKS que se integra ao Kubernetes – poderosa ferramenta de orquestração também. Esse foi o primeiro artigo de uma série sobre tecnologias de orquestração de containers, no próximo iremos abordar o EKS – e também trazer uma prova de conceito para demonstrar, de maneira prática, os benefícios e a usabilidade desse serviço.

Caso queira conhecer um pouco mais sobre o ECS, consulte a documentação oficial da AWS.

Compartilhe este post: