Alura > Cursos de DevOps > Cursos de AWS > Conteúdos de AWS > Primeiras aulas do curso Amazon ECS: gerencie Docker na nuvem da AWS

Amazon ECS: gerencie Docker na nuvem da AWS

Conhecendo ECS - Apresentação

Boas-vindas à Alura! Meu nome é Vinicius Dias e vou guiá-los nesse treinamento de Amazon ECS (Elastic Container Service).

Vinicius Dias é uma pessoa de pele clara, olhos escuros e cabelos pretos. Usa bigode e cavanhaque, e tem cabelo curto. Veste camiseta azul com o texto "Caelum", tem um microfone de lapela na gola da camiseta, e está sentado em uma cadeira preta. Ao fundo, há uma parede lisa com iluminação azul gradiente.

Esse serviço gerencia contêineres da Amazon, nos permite gerenciar uma infraestrutura baseada em contêineres. Por exemplo, caso trabalhe com Docker no seu ambiente de desenvolvimento, levar para produção pode ser simples. Embora aprenderemos conteúdos complexos ao longo do curso.

No término deste curso, teremos um serviço rodando em um contêiner que está dentro de um cluster de instâncias do EC2, outro serviço sendo executado de forma simultânea em outro contêiner, que pode estar em outra instância e com outras definições. Isso tudo estará dentro de contêineres, com várias configurações.

Ao término do curso, vamos ter um cluster com mais de uma instância do EC2. Inclusive, aprenderemos um pouco sobre alternativas ao longo do treinamento, ou seja, quais ferramentas podemos usar ao invés do EC2.

Cada instância poderá armazenar algum serviço que possuirá uma tarefa, e esta gerenciará um contêiner. Um desses contêineres vai ter credenciais sendo anexadas através de outro serviço da Amazon, no caso o Secrets Manager. Usaremos o GitHub Actions, para efetuar o deploy automático de uma tarefa que vai gerar o contêiner.

Aprenderemos muita coisa, e o segredo para você ser bom nisso é praticar. Tudo o que fizermos na interface, tente aplicar por linha de comando.

Caso fique com alguma dúvida ao longo do treinamento, nos envie uma mensagem pelo Fórum ou pelo servidor do Discord na Alura!

Pré-requisitos

É necessário já saber criar instâncias pelo EC2, gerenciar grupos de Auto Scaling e Load Balancer, entre outras coisas. Além disso, por trabalharmos com contêineres, usaremos o Docker.

Agora, vamos para o próximo vídeo, para iniciarmos o nosso aprendizado sobre ECS, como é esse serviço e como ele pode nos auxiliar.

Te espero na próxima aula!

Conhecendo ECS - Entendendo o conceito

Olá! Entendendo os pré-requisitos para continuar esse treinamento, vamos entender o que faremos a partir de agora. Caso saiba o que é o ECS e só queira saber usar, pode pular este vídeo.

Amazon Elastic Container Service (Amazon ECS)

A sigla ECS significa Elastic Container Service (em português, "Serviço de contêiner elástico"), sendo um serviço para gerenciar contêineres que a Amazon nos oferece.

Já aprenderemos sobre contêineres nos treinamentos de Docker, logo já temos certos conhecimentos sobre esse conceito. Usaremos o serviço do ECS para gerenciar os contêineres. No ambiente local usamos Docker, subimos a aplicação com Docker Compose, em que há vários contêineres se comunicando e isso está no nosso ambiente de desenvolvimento.

Em um ambiente de produção podemos usar o ECS, para monitorar os contêineres. Neste treinamento, aprenderemos como usar essa ferramenta.

Vamos ler a descrição do site sobre o que é ECS:

"O Amazon ECS é um serviço de orquestração de contêineres totalmente gerenciado que facilita a implantação, o gerenciamento e a escala de aplicações em contêineres."

Ou seja, por orquestrar os contêineres ele garante que eles estejam sendo executados, garante um número estabelecido de contêineres com certas configurações, etc. Isso ficará mais claro conforme vamos aplicar ao longo do curso.

A ECS é totalmente gerenciado, isso significa que a AWS garantirá que esse contêiner esteja no ar e será responsável pela máquina que o contêiner estará sendo executado. Tudo isso ajuda a implantar, gerenciar e escalar aplicativos em contêineres.

Por exemplo, se temos uma aplicação e no ambiente local já trabalhamos com Docker, transformar essa aplicação em algo pronto para produção fica mais fácil com ECS.

Um detalhe importante sobre o ECS, é sobre a precificação.

Definição de preço do Amazon Elastic Container Service

Nessa aba da documentação temos a definição de preço do ECS. Em suma, não temos um custo adicional por usá-lo. Há um trecho que diz: "Não há cobrança adicional para o Amazon ECS. Você paga pelos recursos da AWS".

Por exemplo, os contêineres serão executados em uma instância do EC2, logo pagaremos por essa instância. A mesma lógica é aplicada em casos de usar discos e já abordamos sobre esses custos em treinamentos anteriores.

Com isso, entendemos que o fato de usarmos ECS não traz custo adicional. Vamos supor que temos diversas instâncias de ECS que já reservamos por determinado tempo, e desejamos trabalhar com contêineres, não teríamos custo adicional.

Isto é, poderíamos migrar toda a nossa infraestrutura para usar contêineres e continuar usando os recursos de hardware que já temos. Isso é bem interessante!

Outro ponto é que há outras maneiras de executarmos esses contêineres, eles estariam no Fargate ao invés de estarem em no EC2. Falaremos sobre isso mais adiante.

No nosso cenário, se optarmos por essa alternativa, seríamos cobrados pelos recursos utilizados dentro dos contêineres, como quanta CPU, memória e tempo de execução por tarefa. Os conceitos de Fargate e tarefas ficarão mais claro mais para frente.

O que queremos deixar claro é: se usarmos o EC2, não teremos cobrança adicional e se usarmos o Fargate, a cobrança será por recurso e tempo de execução.

Há uma página de Preço do AWS Fargate , para analisar. E sempre que falamos de infraestrutura, é fundamental balancear os custos.

Logo, o ECS é uma ferramenta que a Amazon nos fornece para colocarmos uma infraestrutura baseada em contêineres em produção. Novamente, caso tenha um ambiente de desenvolvimento que usa Docker, inserir em produção fica mais fácil ao usar um serviço como o ECS.

Iniciaremos inserindo um contêiner no ar, subindo alguma aplicação para analisarmos como tudo isso funciona. A partir do momento que tivermos algo que podemos visualizar o funcionamento, vamos nos aprofundar em cada um dos conceitos.

Daremos os primeiros passos no ECS criando uma aplicação de exemplo. Te espero na próxima aula!

Conhecendo ECS - Primeiros passos

Boas-vindas de volta! Nesta aula, vamos colocar uma aplicação no ar usando o ECS.

No console da AWS, em "Visitado recentemente", podemos selecionar a opção "Elastic Containers Service" ou, caso não esteja, podemos procurar no campo de busca na parte superior por "ECS".

Na primeira vez que acessarmos a página do ECS, à direita, se clicarmos no botão laranja "Comece a usar", aparecerá um guia para criarmos algumas coisas no ECS. No meu caso, ao clicar nesse botão, será exibido uma lista de clusters, porém, ainda não vimos nada sobre isso.

Por isso, na parte superior esquerda, vou desabilitar "Nova experiência do ECS". Será aberta uma aba com o título "Feedback for ECS Console", em que clicaremos no botão "Ignorar" na parte inferior direita. Ao fazer isso, mostra o console antigo do ECS e nele, conseguimos visualizar o guia.

Na página exibida com o título "Amazon Elastic Container Service (ECS)", vamos clicar no botão azul "Comece a usar" na parte inferior central, após o texto.

Será mostrada uma página com o título "Conceitos básicos do Amazon Elastic Container Service (ECS) usando o Fargate". Nela, temos uma seção chamada "Diagrama de objetos do ECS e como eles se relacionam" com a seguinte imagem:

Esquema visual contendo o diagrama do ECS (Elastic Container Service). O esquema possui quatro quadrados concêntricos. O menor de todos, possui um contorno na cor preta com uma linha que sai do quadrado para a parte externa escrito "Container definition". No segundo quadrado, maior que o anterior, possui um contorno na cor preta com uma linha também escrito "Task definition". Ambos estão preenchidos na cor laranja. O terceiro quadrado possui um contorno tracejado, com uma linha que sai dele escrito "Service". O quarto quadrado possui um contorno tracejado, com uma linha que sai dele escrito "Cluster". Esses últimos não estão preenchidos. Acima temos o título "Diagrama de objetos do ECS e como eles se relacionam".

No quadrado mais interno, temos a definição de um contêiner. Resumindo, contêiner é qual imagem será usada para criarmos o contêiner, quais recursos ele poderá usar e quais portas estarão disponíveis.

O próximo quadrado mais externo, "Task definition" (em português, "Definição de tarefa"), é a definição para um conjunto de contêineres. Por exemplo, vamos supor que uma das tarefas é ter um sistema web, em que podemos ter um contêiner com o servidor web que recebe a requisição e envia para outro contêiner de servidor de aplicação. Isso é a possibilidade de uma tarefa.

É comum que uma tarefa possua um contêiner, mas podemos ter vários contêineres dentro de uma mesma tarefa. Uma tarefa é como se fosse uma aplicação. Vamos supor que queremos replicar essa aplicação, desejamos ter três aplicações e um load balancer dividindo a carga entre elas.

Para isso, definiríamos um serviço (service). Logo, um serviço é o responsável por controlar as tarefas. Com isso, podemos ter mais tasks, um load balancer chegando nessas tarefas.

Um cluster, é onde tudo isso é executado. Por exemplo, podemos ter o nosso serviço rodando dentro de instâncias do EC2, ou no Fargate. Vamos entender um pouco sobre esse Fargate.

No nosso cenário, estamos em um guia auxiliar, logo ele usará uma maneira mais fácil de criarmos essa infraestrutura. Com isso, o cluster é onde os contêineres, tarefas e serviços irão rodar, sendo assim, precisamos de uma máquina.

Dessa maneira, poderíamos ter uma máquina (ou instância) do EC2, e assim nós gerenciamos toda infraestrutura, cuidamos da rede e lida com os custos do EC2 ou, delegamos tudo isso para a Amazon. Ou seja, apenas informamos à Amazon que queremos um cluster de ECS e ela decide qual recurso do EC2 usar, qual o tipo de máquina, tempo de execução, etc.

Diante disso, o Fargate é uma forma de simplificar o cluster. Dessa forma, pagaríamos por recurso usado e tempo de execução, logo se tivermos uma aplicação web rodando o tempo todo, seremos cobrados.

O Fargate é interessante para subirmos algo pro ar rápido e para tarefas curtas, sendo uma tarefa curta e que jogamos depois o contêiner fora. Em um cenário, por exemplo, de uma aplicação web, o comum é termos um EC2, porque temos os modelos de precificação em que podemos reservar um ano de instância EC2 e, com isso, diminuímos os custos.

Mas para visualizarmos alguma coisa rodando, usaremos o Fargate, até mesmo para entendermos como ele facilita a criação de um cluster.

Começando de dentro para fora, na seção "Definição de contêiner", ele nos informa que podemos selecionar uma imagem configurando quanta memória, CPU e qual porta ficará disponível. Por isso, vamos selecionar o "sample-app" que nos traz tudo isso configurado.

sample-app
imagem: httpd:2.4
memória: 0.5 GB (512)
cpu: 0.25 vCPU (256)

Na etapa de "Definição da tarefa", que em suma são quais contêineres teremos, no nosso cenário será somente um. Não alteraremos nada, deixaremos o nome da tarefa e as outras configurações estabelecidas. Para ir para a próxima etapa clicaremos no botão "Próximo", na parte inferior direita.

Agora, vamos definir os serviços, sendo quantas tarefas queremos rodar. No caso, deixaremos somente uma "1" no campo "Número de tarefas desejadas". Por ser apenas uma tarefa, não vamos precisar do balanceador de cargas, logo deixaremos marcada a opção "Nenhum". Podemos clicar no botão "Próximo".

Na seção "Configurar cluster", se estivéssemos lidando com EC2 poderíamos definir quais instâncias vão rodar nesse serviço, podemos ter mais que uma instância em zonas de disponibilidades diferentes. Porém, como usaremos o Fargate, vamos apenas estabelecer o nome do cluster, que no caso será meu-primeiro-cluster. Depois, clicamos no botão "Próximo".

Vamos revisar se as informações estão corretas, caso positivo, selecionamos o botão "Criar", na parte inferior direita. Na página seguinte, temos o título "Status de inicialização", significa que os recursos estão sendo criados.

Em "Criação de recurso do ECS", perceba que ele está criando o cluster chamado meu-primeiro-cluster, na linha seguinte conseguimos visualizar a definição da tarefa e depois o serviço. Dentro dessa tarefa, teremos um contêiner rodando com o sample-app (aplicação de exemplo).

Além disso, em "Outras integrações de produtos AWS", é criado o grupo de logs, as pilhas de CloudFormation (não precisamos nos atentar para esse treinamento), toda a rede, como VPC e as sub-redes e o grupo de segurança (para acessarmos a aplicação).

Tudo isso é gerado de forma automática para nós. Com isso, conseguimos visualizar algumas facilidades desse serviço.

Nós poderíamos ter criado uma instância do EC2, instalar o Docker dentro, liberar o acesso e usar os contêineres. Mas perceba que o ECS faz tudo isso para nós de forma eficiente e automática.

Por esse motivo, se queremos uma infraestrutura baseada em contêineres, precisamos usar uma ferramenta específica para isso, para termos várias facilidades.

Enquanto aguardamos o serviço finalizar a criação, clicaremos no botão azul "Visualizar o serviço", na parte superior, para visualizarmos o cluster.

Será exibida uma página com o título "Serviço: sample-app-service", com diversos campos abaixo, como: cluster, status, definição da tarefa, tipo de serviço, tipo de inicialização, perfil do serviço e criado por.

Nesse ponto, podemos voltar para o novo console, para isso, basta habilitar o botão "Nova experiência do ECS" na parte superior esquerda.

Após habilitar, seremos redirecionados para uma tela com o título "sample-app-service", em que conseguimos visualizar o cluster com algumas informações. Em "integridade", temos as métricas de utilização de CPU e memória.

Para voltar para a lista de clusters, clicamos em "Clusters", à esquerda. Será exibida uma página com o título "Todos os clusters" e abaixo uma tabela com as colunas: Cluster, Serviços, Tarefas, Monitoramento do CloudWatch e Estratégia do provedor de capacidade.

Note que o cluster que chamamos de meu-primeiro-cluster ainda está sendo criado. Clicaremos em "meu-primeiro-cluster", na coluna "Cluster", para vermos as informações gerais. Na tela seguinte, na aba "Serviços", podemos analisar os detalhes dos serviços, que gerencia quantas tarefas irão rodar.

Clicaremos em "sample-app-service", na coluna "Nome do serviço". Note que são exibidas as métricas de utilização de CPU e memória, os detalhes que vimos ao clicar em "Visualizar serviços".

Voltando para o serviço "sample-app-service", clicaremos na aba "Tarefas". Nela, conseguimos analisar todas as tarefas específicas, perceba na coluna "último status", que ela está em processo de provisionamento. Assim que finalizar, conseguiremos acessar a aplicação.

Após aguardar a finalização, perceba que a mesma coluna consta como "Em execução" escrita na cor verde, agora. Para acessar as informações dessa tarefa, clicaremos no ID exibido na primeira coluna nomeada "Tarefa".

Perceba que na seção "Configuração", temos o IP público. Tentaremos acessá-lo clicando em "endereço aberto", escrito na cor azul. Na página exibida, temos a seguinte mensagem:

Amazon ECS Sample App
Congratulations
Your application is now running on a container in Amazon ECS

Isso significa que a aplicação de exemplo está sendo executada!

Dessa maneira, conseguimos subir uma aplicação a partir de um contêiner que já possuía o código da aplicação, e fizemos tudo isso usando o ECS, sendo o serviço de contêineres da Amazon.

Já entendemos um pouco como as coisas funcionam. Agora, vamos aprender um pouco sobre as tarefas, podemos clicar em "Definições de tarefas", à esquerda. Perceba que temos uma tarefa rodando e conseguimos acessá-la. Mas o que aconteceria se parássemos essa tarefa?

Vamos entender brevemente sobre esse assunto no próximo vídeo. Até mais!

Sobre o curso Amazon ECS: gerencie Docker na nuvem da AWS

O curso Amazon ECS: gerencie Docker na nuvem da AWS possui 120 minutos de vídeos, em um total de 37 atividades. Gostou? Conheça nossos outros cursos de AWS em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda AWS acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas