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:
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!