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

implantação do 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 feito sem uma sobrecarga de implantação significativa. A velocidade operacional é melhorada, porque o código criado em um contêiner na máquina local do desenvolvedor pode ser facilmente movido para um servidor de teste simplesmente movendo o contêiner. Durante a compilação, este contêiner pode ser vinculado a outros contêineres necessários para executar o pacote de aplicativos.

Controle de dependência e pipeline melhorado
Uma imagem de contêiner do Docker é a captura de um momento específico no código e dependências de um aplicativo. Isso permite 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 atenda às expectativas.
  3. O mesmo contêiner é enviado para um ambiente de teste onde seu comportamento em tempo de execução pode ser verificado usando 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 através de todas as etapas de integração e implantação do pipeline torna a entrega de um aplicativo confiável e de alta qualidade consideravelmente mais fácil.

Densidade e eficiência de recursos
Os contêineres facilitam a eficiência dos recursos aprimorados, permitindo que vários processos heterogêneos sejam executados em um único sistema. A eficiência do recurso é um resultado natural das técnicas de isolamento e alocação usadas pelos contêineres. Os contêineres podem ser restringidos para consumir determinadas quantidades da CPU e da memória de um host. Ao entender quais recursos um contêiner precisa e quais recursos estão disponíveis a partir do servidor host subjacente, você pode dimensionar os recursos de computação que você usa com hosts menores ou aumentar a densidade de processos em execução em um único host grande, aumentando a disponibilidade e otimizando o consumo de recursos.

Flexibilidade
A flexibilidade de contêineres do Docker é baseada em sua portabilidade, facilidade de implantação e pequeno porte. 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 sejam facilmente movidos entre os hosts, isolados da falha de outros serviços adjacentes e protegidos de correções errôneas ou atualizações de software no sistema do host.

Tempo para 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. Clique em cada número de etapa para expandir a seção.

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

    Nas próximas etapas, você usará o Docker, GitHub, Amazon ECS e Amazon ECR para implantar o código em contêineres. Para ter certeza de que você conseguirá concluir estas etapas, é necessário garantir que tenha as ferramentas adequadas.

    1. Tenha uma conta da AWS: se você ainda não tem uma conta com a AWS, você pode cadastrar-se aqui. Todos os exercícios neste tutorial são projetados para serem cobertos no nível gratuito da AWS.
      ⚐ OBSERVAÇÃO: alguns dos serviços que você usará podem exigir que sua conta esteja ativa por 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. Instale o Docker: você usará o Docker para compilar os arquivos de imagem que serão executados em seus contêineres. Docker é um projeto de código aberto e você pode fazer o download aqui para Mac ou para Windows.
      Uma vez que o Docker esteja instalado, você pode verificar se ele está funcionando executando o Docker --version no terminal. Você deve ver algo como: Docker version 17.03.0-ce, build 60ccb22.
    3. Instale a ILC da AWS
      • Você poderá usar a Interface da Linha de Comando (ILC) da AWS para enviar as imagens para o Amazon Elastic Container Registry. Você pode aprender sobre a ILC aqui.
      • Uma vez que a ILC da AWS é instalada, você pode verificar se ela está funcionando executando aws --version no terminal. Você deve ver algo como: aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26.
      • Se você já tem a ILC da AWS instalada, execute o comando a seguir no terminal para garantir que ela está atualizada para a versão mais recente: pip install awscli -upgrade -user
    4. Tenha um editor de texto: se você ainda não tem um editor de texto para codificação, você deve instalar um em seu ambiente local. Atom é um editor de texto simples e de código aberto do GitHub que é popular entre os desenvolvedores.
  • Etapa 2. Fazer o download e abrir o projeto

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

    Abra os arquivos de projeto: inicie o Atom, selecione 'Adicionar pasta de projeto' e selecione a pasta em que você salvou o repositório 'amazon-ecs-nodejs-microsserviços'. Isso adicionará o projeto inteiro ao Atom para que você possa trabalhar facilmente com ele.

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

    Tome alguns minutos para clicar nos arquivos e familiarizar-se com os diferentes aspectos do aplicativo, incluindo o banco de dados db.json, o servidor server.js, package.json e o aplicativo dockerfile.

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

    Criar repositório:


    Registre a informação do repositório:

    • Depois de pressionar “próximo”, você deve receber uma mensagem semelhante a esta:
    criar
    • O endereço do repositório segue um formato simples: [conta-id]. dkr.ecr.[região]. amazonaws.com/ [repo-name].

     

    ⚐ OBSERVAÇÃO: Você precisará deste endereço, incluindo a ID da conta e a região que você usará nas próximas etapas.

  • Etapa 4. Compilar e enviar a imagem do Docker

    Abra o terminal e defina o caminho para a seção 2-containerized/services/api do código GitHub no diretório em que o tem clonado ou baixado em: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Autentique o login do Docker com a AWS:

    1. Execute aws ecr get-login --no-include-email --region [region]. Exemplo: aws ecr get-login --no-include-email --region us-west-2 Se você nunca tiver usado a ILC da AWS antes, pode ser necessário configurar suas credenciais.
    2. Você terá uma saída enorme começando com docker login -u AWS -p ...Copie esta saída inteira, cole e execute-a no terminal.
    3. Você deve ver Login realizado com sucesso.

    ⚐ OBSERVAÇÃO: se o login não for bem-sucedido, pode ser porque você tem uma versão mais recente do Docker que depreciou o sinalizador -e none. Para corrigir isso, cole a saída em seu editor de texto, remova -e none do final da saída e execute a saída atualizada no terminal.

    • Compile a Imagem: no terminal, execute docker build -t api. OBSERVAÇÃO, o . é importante aqui.
    • Marque a imagem: após a compilação estar concluída, marque a imagem, de modo que você possa enviá-la para o repositório: docker tag api:latest [account-id].dkr.ecr.[região]. amazonaws.com/api: v1

    ⚐ Dica de profissional: o :v1 representa a versão compilada da imagem. Cada vez que você compila a imagem, você deve aumentar esse número de versão. Se você estiver usando um script, você pode usar um número automatizado, como uma marca de tempo para identificar a imagem. Esta é uma prática recomendada que permite a você, no futuro, retornar facilmente a uma imagem compilada do contêiner.

    • Envie a imagem para ECR: Execute docker push para enviar sua imagem para ECR: docker push [conta-id]. dkr.ecr.[região].amazonaws.com/api: mais recentes

    Se você navegar para o seu repositório ECR, você deve ver sua imagem marcada mais tarde.

    imagens