Neste módulo, você compilará a imagem do contêiner para o aplicativo monolítico node.js e o enviará para o Amazon Elastic Container Registry. Comece a criar

implantação no amazon ecr

Os contêineres permitem empacotar facilmente o código, as configurações e as dependências de um aplicativo em componentes básicos fáceis de usar que oferecem consistência ambiental, eficiência operacional, produtividade de desenvolvedores e controle de versões. Os contêineres podem ajudar a garantir rapidez, confiabilidade e consistência de implantação de aplicativos, independentemente do ambiente de implantação.

visão geral da arquitetura

Velocidade
A execução de um contêiner com uma nova versão do código pode ser feita sem sobrecarga de implantação significativa. A velocidade operacional é melhorada, pois o código criado em um contêiner na máquina local do desenvolvedor pode ser facilmente movido para um servidor de testes simplesmente movendo o contêiner. No momento da compilação, este contêiner pode ser vinculado a outros contêineres necessários para executar a pilha de aplicativos.

Controle de dependência e pipeline melhorado
Uma imagem de contêiner do Docker é a captura de um momento específico do código e das dependências de um aplicativo. Isso possibilita que uma organização de engenharia crie um pipeline padrão para o ciclo de vida do aplicativo. Por exemplo:

  1. Os desenvolvedores compilam e executam o contêiner localmente.
  2. O servidor de integração contínua executa o mesmo contêiner e realiza testes de integração com ele para garantir que as expectativas sejam atendidas.
  3. O mesmo contêiner é enviado para um ambiente de preparação, onde seu comportamento de tempo de execução pode ser verificado com o uso de testes de carga ou controle de qualidade manual.
  4. O mesmo contêiner é enviado para produção.

Ser capaz de compilar, testar, enviar e executar exatamente o mesmo contêiner em todos os estágios da integração e da implantação do pipeline torna consideravelmente mais fácil o fornecimento de um aplicativo confiável e de alta qualidade.

Densidade e eficiência de recurso
Os contêineres facilitam a eficiência de recursos aprimorados ao permitir que múltiplos processos heterogêneos sejam executados em um único sistema. A eficiência de recurso é um resultado natural de técnicas de isolamento e alocação que os contêineres usam. Os contêineres podem ser limitados para consumir quantidades determinadas da CPU e da memória de um host. Ao perceber quais recursos um contêiner são necessários e quais estão disponíveis no servidor host subjacente, você pode dimensionar os recursos de computação usados com hosts menores ou aumentar a densidade de processos em execução em um único host grande, aumentando assim a disponibilidade e otimizando o consumo de recursos.

Flexibilidade
A flexibilidade de contêineres do Docker tem como base sua portabilidade, facilidade de implantação e seu tamanho pequeno. Em contraste com a instalação e a configuração exigidas em uma VM, os serviços de pacotes dentro dos contêineres permitem que eles sejam facilmente movidos entre hosts, isolados da falha de outros serviços próximos e protegidos contra correções errôneas ou atualizações de software no sistema do host. 

Tempo para a conclusão: 20 minutos

Serviços usados:


Para a primeira parte deste tutorial, você compilará a imagem de contêiner do Docker do aplicativo monolítico node.js e o enviará para o Amazon Elastic Container Registry (Amazon ECR). Selecione cada número de etapa para expandir a seção.

break-the-monolith
  • Etapa 1. Obter a configuração

    Nas próximas etapas, você usará o Docker, o Github, o Amazon Elastic Container Service (Amazon ECS) e o Amazon ECR para implantar o código em contêineres. Para concluir essas etapas, certifique-se de ter as ferramentas a seguir.

    1. Ter uma conta da AWS: se ainda não tiver uma conta com a AWS, você poderá cadastrar-se aqui. Todos os exercícios neste tutorial foram projetados para serem tratados no nível gratuito da AWS.
      ⚐ Observação: alguns dos serviços que você usará poderão exigir que sua conta esteja ativa há mais de 12 horas. Se você tiver dificuldade com qualquer serviço e tiver uma conta recém-criada, aguarde algumas horas e tente novamente.
    2. Instalar o Docker: você usará o Docker para compilar os arquivos de imagem que serão executados nos contêineres. O Docker é um projeto de código aberto. Você pode fazer download para Mac ou para Windows.
      Depois que o Docker estiver instalado, você poderá verificar se ele está em execução inserindo Docker --versão no terminal. O número da versão deve ser exibido, por exemplo: Docker versão 19.03.5, build 633a0ea.
    3. Instalar a AWS CLI:
      • Você poderá usar a interface da linha de comando da AWS (AWS CLI) para enviar as imagens para o Amazon ECR. Você pode aprender sobre a AWS CLI e fazer download aqui.
      • Depois que a AWS CLI estiver instalada, verifique se ela está em execução inserindo aws --version no terminal. O número da versão deve ser exibido, por exemplo: aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207.
      • Se a AWS CLI já estiver instalada, execute o comando a seguir no terminal para garantir que sua versão seja a mais recente: pip install awscli --upgrade --user
      • Se você nunca tiver usado a AWS CLI, precisará configurar suas credenciais.
    4. Ter um editor de texto: se você ainda não tem um editor de texto para codificação, instale um em seu ambiente local. Atom é um editor de texto simples e de código aberto do GitHub popular entre os desenvolvedores.
  • Etapa 2. Fazer download e abrir o projeto

    Fazer download do código do GitHub: navegue até https://github.com/awslabs/amazon-ecs-nodejs-microservices e selecione Clonar ou fazer download para baixar o repositório GitHub para o seu ambiente local. Você também pode usar o GitHub Desktop ou o Git para clonar o repositório.

    Abrir os arquivos de projeto: inicie o Atom, selecione Adicionar pasta de projeto e a pasta na qual você salvou o repositório amazon-ecs-nodejs-microservices. Isso fará com que o projeto inteiro seja adicionado ao Atom para que você possa trabalhar facilmente com ele.

    Na pasta de projetos, você deve ver as pastas de infraestrutura e de serviços. A pasta de infraestrutura contém o código de configuração da infraestrutura do AWS CloudFormation que você usará na próxima etapa. A pasta de serviços contém o código que forma o aplicativo node.js.

    Reserve alguns minutos para analisar os arquivos e se familiarizar com os diferentes aspectos do aplicativo, incluindo o banco de dados db.json, o servidor server.jspackage.json e o aplicativo Dockerfile.

    projeto de microsserviços
  • Etapa 3. Provisionar um repositório

    Criar o repositório:

    • Navegue até o console do Amazon ECR.
    • Na página Repositories (Repositórios), selecione Create Repository (Criar repositório).
    • Na página Create repository (Criar repositório), atribua o seguinte nome ao seu repositório: api.
      ⚐ Obs.: mantenha a configuração padrão para a opção Tag immutability (Imutabilidade de tag).
    • Selecione Create repository (Criar repositório).

    Uma mensagem de confirmação com o endereço do repositório será exibida após a criação do repositório. O endereço do repositório tem o seguinte formato: [ID-conta].dkr.ecr.[região].amazonaws.com/[nome-repo]. Os itens [ID-conta], [região] e [nome-repo] serão específicos conforme sua configuração.

    ⚐ Obs.: você vai precisar do endereço do repositório durante este tutorial.

    crie
  • Etapa 4. Compilar e enviar a imagem do Docker

    Acesse seu terminal e navegue até o seguinte diretório: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Use o terminal para autenticar o acesso do Docker:

    1. Run $(aws ecr get-login --no-include-email --region [sua-região]). Substitua [sua-região], por exemplo: $(aws ecr get-login --no-include-email --region us-west-2). Se necessário, configure suas credenciais.
      Em caso de êxito na autenticação, você receberá a mensagem de confirmação: Login Succeeded.
    2. Para compilar a imagem, execute o seguinte comando no terminal: docker build -t api .
      ⚐ Observação: o ponto (.) depois de api é necessário.
    3. Depois que a compilação estiver concluída, marque a imagem para que você possa enviá-la para o repositório: docker tag api:latest [ID-da-conta].dkr.ecr.[região].amazonaws.com/api:v1 
      ⚐ Observação: substitua os espaços reservados [ID-da-conta] e [região] por suas informações específicas.
      ⚐ Dica de profissional:  :v1 representa a versão compilada da imagem. Sempre que compilar a imagem, você deve aumentar esse número de versão. Se estiver usando um script, você poderá usar um número automatizado, como um registro de hora para marcar a imagem. Esta é uma das melhores práticas que permitirá a você, no futuro, reverter facilmente para uma compilação de imagem de contêiner anterior.
    4. Envie a imagem para o Amazon ECR executando: docker push [id-da-conta].dkr.ecr.[região].amazonaws.com/api:v1
      ⚐ Observação: substitua os espaços reservados [ID-da-conta] e [região] por suas informações específicas.

    Se você navegar até o repositório do Amazon ECR, deverá ver sua imagem marcada com v1.

    Tag da imagem do Amazon ECR