Neste módulo, você usará o Amazon Elastic Container Service (Amazon ECS) para instanciar um cluster gerenciado de instâncias de computação EC2 e implantar sua imagem como um contêiner em execução no cluster. Comece a criar

visão geral da arquitetura

a. Cliente
O cliente faz uma solicitação pela porta 80 para o load balancer.

b. Load Balancer
O load balancer distribui solicitações em todas as portas disponíveis.

c. Grupos de destino
As instâncias são registradas no grupo de destino do aplicativo.

d. Portas de contêiner
Cada contêiner executa um único processo de aplicativo que liga o cluster node.js pai à porta 80 dentro de seu namespace.

e. Monólito node.js em contêineres
O cluster node.js pai é responsável por distribuir o tráfego para os trabalhadores no aplicativo monolítico. Essa arquitetura é em contêiner, mas ainda monolítica, porque cada contêiner possui todos os mesmos recursos do restante dos contêineres.

O Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres de alta escalabilidade e performance que aceita contêineres do Docker e permite que você execute facilmente aplicativos em um cluster gerenciado de instâncias do Amazon EC2. Com chamadas de API simples, você pode executar e interromper aplicações habilitadas para o Docker, consultar o estado completo do seu cluster e acessar muitos recursos conhecidos, como security groups, Elastic Load Balancing, volumes do EBS e funções do IAM.

Você pode usar o Amazon ECS para programar a colocação de contêineres no cluster com base em suas necessidades de recursos e requisitos de disponibilidade. Você também pode integrar agendadores próprios ou de terceiros para atender a requisitos específicos dos negócios ou da aplicação.

Não há cobrança adicional para o Amazon ECS. Você paga pelos recursos da AWS (por exemplo, instâncias do EC2 ou volumes do EBS) criados para armazenar e executar o aplicativo.


Siga as instruções passo a passo abaixo para implantar o aplicativo node.js. usando o Amazon ECS. Selecione cada número de etapa para expandir a seção.

break-the-monolith
  • Etapa 1. Iniciar um cluster do ECS usando o AWS CloudFormation

    Crie um cluster do Amazon ECS implantado atrás de um Application Load Balancer.

    1. Navegue até o console do AWS CloudFormation.
    2. Selecione Criar pilha.
    3. Selecione Upload um arquivo de modelo e escolha o arquivo ecs.yml amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml e selecione Avançar.
    4. Para o nome da pilha, digite BreakTheMonolith-Demo. Verifique se os outros parâmetros têm os seguintes valores:
      1. Capacidade Desejada = 2
      2. Tipo de Instância = t2.micro
      3. MaxSize = 2
    5. Selecione Avançar.
    6. Na página Configurar opções de pilha, mantenha as opções padrão, role para baixo e selecione Avançar.
    7. Na página Revisar BreakTheMonolith-Demo, role para a parte inferior da página, reconheça a declaração Recursos selecionando a caixa de seleção e selecione Criar pilha.

    Você verá a sua pilha relacionada com o status CREATE_IN_PROGRESS. Você pode selecionar o botão de atualização no canto superior direito da tela para verificar o progresso. Este processo normalmente leva 5 minutos.

    criar pilha

    ⚐ OBSERVAÇÃO: Opcionalmente, você pode usar a Interface de Linha de Comando AWS (ILC AWS) para implantar pilhas da AWS CloudFormation. Execute o seguinte código no terminal da pasta amazon-ecs-nodejs-microservices/3-microservices e troque a [região] pela sua região da AWS.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region [region] \
       --stack-name BreakTheMonolith-Demo \
       --capabilities CAPABILITY_NAMED_IAM
  • Etapa 2. Verifique se o seu cluster está em execução

    Verificar o cluster Amazon ECS
    • Selecione o cluster BreakTheMonolith-Demo e depois a guia Tarefas para verificar se não há tarefas em execução.
    Tarefas do Cluster Amazon ECS
    • Selecione as instâncias da guia do ECS para verificar se existem duas instâncias do Amazon EC2 criadas pelo modelo da AWS CloudFormation.
      ⚐ Observação: Se você receber uma mensagem de que o agente ECS está desatualizado, selecione Saiba mais para obter instruções para atualizar o agente ECS.
    Instâncias do Amazon ECS
  • Etapa 3. Escreva uma definição de tarefa

    As definições de tarefas especificam como o Amazon ECS implanta os contêineres de aplicativos no cluster.

    • No menu de navegação esquerdo do Amazon ECS, selecione Definições de tarefas.
    • Selecione Criar nova definição de tarefa.
    • Na página Selecionar compatibilidade de tipo de execução, selecione a opção EC2 e, em seguida, selecione Próxima etapa.
    • Na página Configurar definições de tarefa e contêiner, faça o seguinte:
      • No campo Nome da definição da tarefa, insira a api.
      • Role para baixo até Definições de contêiner e selecione Adicionar contêiner.
      • Na janela Adicionar contêiner:
        • Os parâmetros não definidos podem ser deixados em branco ou com as configurações padrão.
        • No campo Nome do contêiner, digite api.
        • No campo Imagem, digite [account-ID].dkr.ecr.[region].amazonaws.com/api:v1
          Substitua [ID da conta] e [região] pelas suas informações específicas. Certifique-se de que a tag v1 corresponda ao valor usado no Módulo 1 para marcar e enviar a imagem por push. Este é o URL da sua imagem de repositório ECR que foi criada no módulo anterior.
        • No campo Limites de memória, verifique se Limite máximo está selecionado e digite 256 como o valor.
        • Em Mapeamentos de porta, Porta do host = 0 e Porta do contêiner = 3000.
        • Role até AMBIENTE, unidades da CPU = 256.
    • Selecione Adicionar.
      Você retornará à página Configurar definições de tarefa e contêiner.
    • Role até a parte inferior da página e selecione Criar.

    A sua definição de tarefa está listada no console.

    definição de tarefa
  • Etapa 4. Configurar o Application Load Balancer: Grupo de destino

    O Application Load Balancer (ALB) permite que seu serviço aceite o tráfego recebido. O ALB roteia automaticamente o tráfego para instâncias de contêiner em execução no cluster, usando-as como um grupo de destino.

    Verifique o nome da sua VPC: se não for a primeira vez que você usa esta conta da AWS, você pode ter várias VPCs. É importante configurar seu Grupo de Destino com a VPC correta.

    • Navegue até a seção Load Balancer do console do EC2.
    • Localize o Load Balancer chamado demo.
    • Marque a caixa de seleção ao lado de demo para ver os detalhes do Load Balancer.
    • Na guia Descrição, localize o atributo VPC (neste formato: vpc-xxxxxxxxxxxxxxxxxxx).
      ⚐ Observação: você precisará do atributo da VPC na próxima etapa, quando configurar os grupos de destino ALB.
    atributo do vpc

    Configurar o Grupo de destino ALB

    • Navegue até a seção Grupo de destinos do Console do EC2.
    • Selecione Criar grupo de destino.
    • Configure os seguintes parâmetros do grupo de destino (para os parâmetros não listados abaixo, mantenha os valores padrão):
      • Para o nome do Grupo de destino, digite api.
      • Para o Protocolo, selecione HTTP.
      • Para a Porta, digite 80.
      • Para a VPC, selecione o valor que corresponde ao valor da descrição do Load Balancer. Essa provavelmente NÃO é sua VPC padrão.
      • Acesse as configurações de Verificação avançada de integridade e edite os seguintes parâmetros, conforme necessário: 
        • Para Limite íntegro, insira 2.
        • Para Limite não íntegro, insira 2.
        • Para Tempo limite, insira 5.
        • Para Intervalo, insira 6.
    • Agora, selecione Criar.
    Criar grupos de destino
  • Etapa 5. Configurar o Application Load Balancer: Listener

    listener ALB verifica solicitações de conexão recebidas no seu ALB.

    Adicionar um Listener ao ALB

    • Navegue até a seção Load Balancer do console do EC2.
    • Marque a caixa de seleção ao lado de demo para ver os detalhes do Load Balancer.
    • Selecione a guia Listeners.
    • Selecione Adicionar listener e edite os seguintes parâmetros, conforme necessário:
      • Para Protocolo: porta, selecione HTTP e insira 80.
      • Para Ação(ões) padrão, selecione Encaminhar para e no campo Grupo de destino, insira api.
    • Selecione Salvar.
    listener para ALB
  • Etapa 6. Implantar o monólito como um serviço

    Implantar o monólito como um serviço no cluster.

    • Navegue até o console do Amazon ECS e selecione Clusters na barra de menu à esquerda.
    • Selecione o cluster BreakTheMonolith-Demo, a guia Serviços e, em seguida, selecione Criar.
    • Na página Configure service (Configurar serviço), edite os seguintes parâmetros (e mantenha os valores padrão para os parâmetros não listados abaixo): 
      • Para o Tipo de execução, selecione EC2.
      • Para o Nome do Serviço, insira api
      • Para o Número de tarefas, insira 1.
      • Selecione Próxima etapa.
    • Na página Configurar rede, seção Balanceamento de carga, selecione Application Load Balancer.
      Aparecerão parâmetros adicionais: Função IAM do serviço e o nome do Load balancer.
      • Para a Função IAM do serviço, selecione BreakTheMonolith-Demo-ECSServiceRole.
      • Para o nome do Load balancer, verifique se demo está selecionada.
    • Na seção Contêiner para load balance, selecione Adicionar ao load balancer.
      Informações adicionais rotuladas api: 3000 são mostradas.
    • Na seção api:3000 faça o seguinte:
      • Para o campo Porta do listener de produção, selecione 80:HTTP.
      • Para o nome do Grupo de destino, selecione seu grupo: api.
      • Selecione Próxima etapa.
    • Na página Definir Auto Scaling, deixe a configuração padrão e selecione Próxima etapa.
    • Na página de Revisão, revise as configurações e selecione Criar serviço.
    • Após a criação do serviço, selecione Exibir serviço.
    Amazon ECS Service API

    Bom trabalho! Agora você tem um serviço em execução. Pode levar um minuto para que o contêiner seja registrado como íntegro e comece a receber tráfego.

  • Etapa 7. Teste o seu Monólito

    Valide sua implantação, verificando se o serviço está disponível na Internet e executando o ping.

    Para encontrar o URL do seu serviço:

    • Navegue até a seção Load Balancers do Console do EC2.
    • Selecione a demo do seu load balancer.
    • Na guia Descrição, copie o nome DNS e cole em uma nova guia ou janela do navegador.
    • Você deverá ver a mensagem Pronto para receber solicitações.


    Consulte cada parte do serviço:
    o aplicativo node.js roteia o tráfego para cada trabalhador com base na URL. Para ver um trabalhador, basta adicionar o nome do trabalhador api/[nome do trabalhador] ao final do Nome DNS da seguinte forma:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts

    Você também pode adicionar um número de registro no final do URL para detalhar um registro específico. Por exemplo: http://[DNS name]/api/posts/1 ou http://[DNS name]/api/users/2

    Demonstração do usuário