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 compilar

visão geral da arquitetura

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

b. Load Balancer
O load balancer distribui solicitações através de todas as portas disponíveis.

c. Grupos-alvo
Instâncias são registradas no grupo-alvo do aplicativo.

d. Portas dos contêineres
Cada contêiner executa um único processo do aplicativo que vincula o cluster principal do node.js à porta 80 dentro de seu namespace.

e. Monólito node.js conteinerizado
O cluster principal do node.js é responsável por distribuir o tráfego para os operadores dentro do aplicativo monolítico. Essa arquitetura é conteinerizada, mas ainda monolítica porque cada contêiner tem 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 aplicativos compatíveis com o Docker, consultar o estado completo de um 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á custo adicional para o Amazon Elastic Container Service. Você paga pelos recursos da AWS (como instâncias do EC2 ou volumes do EBS) que criar para armazenar e executar seu aplicativo.


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

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

    Você criará um cluster do Amazon ECS implantado por trás de um Application Load Balancer.

    1. Navegue até o console do AWS CloudFormation.
    2. Selecione Criar pilha.
    3. Selecione "Upload a template to Amazon S3" e escolha o arquivo ecs.yml a partir do projeto GitHub em amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml Selecione Next.
    4. Para o nome da pilha, insira BreakTheMonolith-Demo. Mantenha os outros valores de parâmetro iguais:
      1. Capacidade desejada = 2
      2. Tipo de instância = t2.micro
      3. Tamanho máximo = 2
    5. Selecione Next.
    6. Não é necessário modificar qualquer opção desta página. Selecione Next.
    7. Verifique a caixa na parte inferior da próxima página e selecione Criar. Você verá sua pilha CREATE_IN_PROGRESS em laranja. Você pode selecionar o botão Atualizar no canto superior direito da tela para verificar o andamento. Esse processo geralmente leva menos de 5 minutos.
    criar pilha

    ⚐ OBSERVAÇÃO: você também pode usar a ILC da AWS para implantar pilhas no AWS CloudFormation. Basta adicionar sua região para esse código e executar o terminal da pasta amazon-ecs-nodejs-microsserviços/3-microservices em seu computador.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region <region> \
       --stack-name Nodejs-Microservices \
       --capabilities CAPABILITY_NAMED_IAM
  • Etapa 2. Verificar se o cluster está em execução

    verificar o cluster
    • Ao clicar no cluster, selecione a guia "Tasks", nenhuma tarefa será executada.
    Tarefas
    • Selecione a guia "ECS Instances" e verá as duas instâncias de EC2 criadas pelo modelo do AWS CloudFormation.
    Instâncias ECS
  • Etapa 3. Gravar uma definição de tarefa

    A definição de tarefa mostra ao Amazon ECS como implantar os contêineres do aplicativo através do cluster.

    • Navegue até o menu "Task Definitions" no lado esquerdo do console do Amazon ECS.
    • Selecione Create new Task Definition.
    • Nome da definição de tarefas = api.
    • Selecione Add Container.
    • Especifique os seguintes parâmetros.
      • Se um parâmetro não estiver definido, deixe-o em branco ou com as configurações padrão: Container name = api image = [account-id].dkr.ecr.[region].amazonaws.com/api:v1 (essa é a URL da imagem do repositório do ECR da etapa anterior).
      • Certifique-se de que a tag :v1 corresponda ao valor que você usou no módulo 1 para marcar e enviar a imagem. Memória = limite rígido: 256 Mapeamento da porta = porta do host:0, porta do contêiner:3.000 unidades de CPU = 256
    • Selecione Add.
    • Selecione Create.
    • Sua definição de tarefas será exibida no console.
    definição de tarefa
  • Etapa 4. Configurar o Application Load Balancer: grupo-alvo

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

    Verifique seu nome VPC: se essa não é a primeira vez que você está usando essa conta da AWS, você pode ter várias VPCs. É importante configurar seu grupo-alvo com o VPC correto.

    • Navegue até a Load Balancer section of the EC2 Console.
    • Você deve ver um Load Balancer já existente chamado demo.
    • Selecione a caixa de seleção para ver os detalhes do Load Balancer.
    • Observe o valor do atributo VPC na página de detalhes.
    atributo vpc

    Configure o grupo-alvo do ALB

    • Navegue até a seção grupo-alvo no console do EC2.
    • Selecione Create target group.
    • Configure o grupo-alvo (não modifique padrões se eles não forem especificados aqui):
      • Name = api
      • Protocol = HTTP
      • Porta 80
      • VPC = selecione o VPC que corresponde ao seu Load Balancer da etapa anterior. Este provavelmente NÃO é seu VPC padrão.
      • Configurações avançadas de verificação de integridade: Limite íntegro = 2 Limite não íntegro = 2 Timeout = 5 Intervalo = 6.
    • Selecione Create.
    criar grupos-alvo
  • Etapa 5. Configurar o Application Load Balancer: Ouvinte

    O listener verifica as solicitações de conexão recebidas para o ALB.

    Add a Listener to the ALB

    • Navegue até a Load Balancer section of the EC2 Console.
    • Você deve ver um Load Balancer já existente chamado demo.
    • Selecione a caixa de seleção para ver os detalhes do Load Balancer.
    • Selecione a guia Ouvintes.
    • Selecione Criar ouvinte:
      • Protocol = HTTP
      • Porta 80
      • Grupo-alvo padrão = api
    • Clique em Create.
    ouvinte para ALB
  • Etapa 6. Implantar o monólito como um serviço

    Agora, você poderá implantar o monólito como um serviço para o cluster.

    • Navegue até o menu "Clusters" no lado esquerdo do console do Amazon ECS.
    • Selecione seu cluster: BreakTheMonolith-Demo-ECSCluster.
    • Na guia Services, selecione Create.
    • Configure o serviço (não modifique os valores padrão): Nome do serviço = api Número de tarefas = 1
    • Selecione Configure ELB:
      • Tipo de ELB = Application Load Balancer.
      • Para função do IAM, selecione BreakTheMonolith-Demo-ECSServiceRole.
      • Selecione o nome de seu Load Balancer ELB = demo.
      • Selecione Add to ELB.
    • Adicione o serviço ao grupo-alvo:
      • Porta do ouvinte = 80:HTTP
      • Nome do grupo-alvo = selecione seu grupo: api.
    • Selecione Save.
    implante seu serviço
    • Selecione Create Service.
    • Selecione View Service.
    configuração opcional

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

  • Etapa 7. Teste seus monólitos

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

    Para encontrar o URL de seu serviço:

    • Navegue até a seção Load Balancers no console do EC2.
    • Selecione sua demonstração do load balancer.
    • Copie e cole o valor do nome DNS para seu navegador.
    • Você deve ver uma mensagem assim: "Ready to receive requests".


    Consulte cada parte do serviço:
    O aplicativo node.js direciona o tráfego para cada operador com base no URL. Para ver um operador, basta adicionar o nome do operador api/[operador-name] ao final do seu nome de DNS, conforme abaixo:

    • 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 chegar a um determinado registro. Por exemplo: http://[DNS name]/api/posts/1 ou http://[DNS name]/api/users/2

    demonstração do usuário