Compile automaticamente pipelines de CI/CD e clusters do Amazon ECS para microsserviços usando o AWS CDK - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Compile automaticamente pipelines de CI/CD e clusters do Amazon ECS para microsserviços usando o AWS CDK

Criado por Varsha Raju (AWS)

Ambiente: PoC ou piloto

Tecnologias: DevOps; Contêineres e microsserviços; Modernização; Infraestrutura

Serviços da AWS: AWS CodeBuild; AWS CodeCommit; AWS CodePipeline; Amazon ECS; AWS CDK

Resumo

Este padrão descreve como criar automaticamente os pipelines de integração contínua e entrega contínua (CI/CD) e a infraestrutura subjacente para compilar e implantar microsserviços no Amazon Elastic Container Service (Amazon ECS). Você pode usar essa abordagem se quiser configurar pipelines de proof-of-concept CI/CD para mostrar à sua organização os benefícios de CI/CD, microsserviços e. DevOps Você também pode usar essa abordagem para criar pipelines iniciais de CI/CD que podem ser personalizados ou alterados de acordo com os requisitos da sua organização. 

A abordagem do padrão cria um ambiente de produção e um ambiente de não produção, cada um com uma nuvem privada virtual (VPC) e um cluster do Amazon ECS configurado para ser executado em duas zonas de disponibilidade. Esses ambientes são compartilhados por todos os seus microsserviços e, em seguida, você cria um pipeline de CI/CD para cada microsserviço. Esses pipelines de CI/CD extraem alterações de um repositório de origem na CodeCommit AWS, criam automaticamente as alterações e, em seguida, as implantam em seus ambientes de produção e não produção. Quando um pipeline conclui com êxito todas as suas etapas, você pode usar URLs para acessar o microsserviço nos ambientes de produção e não produção.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta ativa da Amazon Web Services (AWS).

  • Um bucket do Amazon Simple Storage Service (Amazon S3) existente que contém o arquivo starter-code.zip (anexado)

  • AWS Cloud Development Kit (AWS CDK), instalado e configurado. Para obter mais informações, consulte Conceitos básicos do AWS CDK na documentação do AWS CDK.

  • Python 3 e pip instalado e configurado Para obter mais informações, consulte a documentação do Pyton.

  • Familiaridade com o AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS e AWS Fargate.

  • Familiaridade com o Docker.

  • Uma compreensão do CI/CD e. DevOps

Limitações

  • Os limites gerais da conta da AWS se aplicam. Para obter mais informações, consulte Service Quotas da AWS, na documentação de Referência geral da AWS.

Versões do produto

  • Esse código foi testado usando o Nose.js versão 16.13.0 e o AWS CDK versão 1.132.0.

Arquitetura

O diagrama mostra o seguinte fluxo de trabalho:

  1. Um desenvolvedor de aplicativos confirma o código em um CodeCommit repositório.

  2. Um pipeline é inicializado.

  3. CodeBuild cria e envia a imagem do Docker para um repositório Amazon ECR

  4. CodePipeline implanta uma nova imagem em um serviço Fargate existente em um cluster Amazon ECS não produtivo.

  5. O Amazon ECS extrai a imagem do repositório Amazon ECR para um serviço Fargate que não é de produção.

  6. O teste é realizado usando um URL que não é de produção.

  7. O gerente de lançamento aprova a implantação de produção.

  8. CodePipeline implanta a nova imagem em um serviço Fargate existente em um cluster Amazon ECS de produção

  9. O Amazon ECS extrai a imagem do repositório Amazon ECR para um serviço Fargate de produção.

  10. Os usuários de produção acessam seu atributo usando uma URL de produção.

Pilha de tecnologia

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Automação e escala

Você pode usar a abordagem desse padrão para criar pipelines para microsserviços implantados em uma pilha compartilhada da AWS. CloudFormation A automação pode criar mais de um cluster do Amazon ECS em cada VPC e também criar pipelines para microsserviços implantados em um cluster compartilhado do Amazon ECS. No entanto, isso exige que você forneça novas informações de recursos como entradas para a pilha do pipeline.

Ferramentas

  • AWS CDK — O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio da AWS. CloudFormation

  • AWS CodeBuild — CodeBuild A AWS é um serviço de construção totalmente gerenciado na nuvem. CodeBuild compila seu código-fonte, executa testes de unidade e produz artefatos prontos para serem implantados.

  • AWS CodeCommit — CodeCommit A AWS é um serviço de controle de versão que permite que você armazene e gerencie de forma privada repositórios Git na nuvem da AWS. CodeCommit elimina a necessidade de você gerenciar seu próprio sistema de controle de origem ou se preocupar com a escalabilidade de sua infraestrutura.

  • AWS CodePipeline — CodePipeline A AWS é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software. Você pode modelar e configurar rapidamente os diferentes estágios de um processo de lançamento de software. CodePipeline automatiza as etapas necessárias para liberar suas alterações de software continuamente.

  • Amazon ECS: o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido que é usado na execução, interrupção e gerenciamento de contêineres em um cluster. Você pode executar tarefas e serviços em uma infraestrutura com tecnologia sem servidor gerenciada pelo AWS Fargate. Como alternativa, para ter mais controle da infraestrutura, é possível executar tarefas e serviços em um cluster de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que você gerencia.

  • Docker: o Docker ajuda os desenvolvedores a empacotar, enviar e executar facilmente qualquer aplicativo como um contêiner leve, portátil e autossuficiente.

Código

O código desse padrão está disponível nos arquivos cicdstarter.zip e starter-code.zip (anexado).

Épicos

TarefaDescriçãoHabilidades necessárias
Configure o diretório de trabalho para o AWS CDK.
  1. Crie um diretório chamado cicdproject na sua máquina local.

  2. Baixe o arquivo cicdstarter.zip (anexado) no diretório cicdproject e descompacte-o. Ele cria uma pasta chamada cicdstarter.

  3. Execute o comando cd <user-home>/cicdproject/cicdstarter

  4. Configure o ambiente virtual Python executando o comando python3 -m venv .venv.

  5. Execute o comando source ./.venv/bin/activate.

  6. Configure seu ambiente da AWS executando o comando aws configure ou usando as seguintes variáveis de ambiente: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, infraestrutura de nuvem
TarefaDescriçãoHabilidades necessárias
Crie a infraestrutura compartilhada.
  1. No diretório de trabalho, execute o comando cd cicdvpcecs

  2. Execute o comando pip3 install -r requirements.txt para instalar todas as dependências necessárias do Python

  3. Execute o cdk bootstrap command para definir o ambiente da AWS para o AWS CDK. 

  4. Execute o comando cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region>

  5. Execute o comando cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region>.

  6. A CloudFormation pilha da AWS cria a seguinte infraestrutura:

    • Uma VPC que não é de produção chamada cicd-vpc-ecs/cicd-vpc-nonprod

    • Uma VPC de produção chamada cicd-vpc-ecs/cicd-vpc-prod

    • Um cluster Amazon ECS não de produção chamado cicd-ecs-nonprod

    • Um cluster Amazon ECS de produção chamado cicd-ecs-prod

AWS DevOps, infraestrutura de nuvem
Monitore a CloudFormation pilha da AWS.
  1. Faça login no Console de Gerenciamento da AWS, abra o CloudFormation console da AWS e escolha a cicd-vpc-ecs pilha na lista. 

  2. No painel de detalhes da pilha, clique na guia Eventos e monitore o progresso da criação da pilha.

AWS DevOps, infraestrutura de nuvem
Teste a CloudFormation pilha da AWS.
  1. Depois que a CloudFormation pilha cicd-vpc-ecs da AWS for criada, certifique-se de que as VPCs cicd-vpc-ecs/cicd-vpc-nonprod e as cicd-vpc-ecs/cicd-vpc-prod VPCs sejam criadas. 

  2. Certifique-se de que os clusters cicd-ecs-nonprod e cicd-ecs-prod do Amazon ECS sejam criados.

Importante: certifique-se de registrar as IDs das duas VPCs e as IDs do grupo de segurança dos grupos de segurança padrão nas duas VPCs.

AWS DevOps, infraestrutura de nuvem
TarefaDescriçãoHabilidades necessárias
Crie a infraestrutura para o microsserviço.
  1. Nomeie o microsserviço. Por exemplo, esse padrão usa myservice1 como o nome do microsserviço.

  2. No diretório de trabalho, execute o comando cd <working-directory>/cdkpipeline.

  3. Execute o comando pip3 install -r requirements.txt.

  4. Execute o comando cdk synth completo que está disponível na seção Informações adicionais deste padrão.

  5. Execute o comando cdk deploy completo que está disponível na seção Informações adicionais deste padrão.

Observação: você também pode fornecer os valores para ambos os comandos usando o arquivo cdk.json no diretório.

AWS DevOps, infraestrutura de nuvem
Monitore a CloudFormation pilha da AWS.

Abra o CloudFormation console da AWS e monitore o progresso da myservice1-cicd-stack pilha. Eventualmente, o status muda para CREATE_COMPLETE.

AWS DevOps, infraestrutura de nuvem
Teste a CloudFormation pilha da AWS.
  1. No CodeCommit console da AWS, verifique se um repositório chamado myservice1 existe e contém o código inicial.

  2. No CodeBuild console da AWS, verifique se myservice1 existe um projeto de construção chamado.

  3. No console do Amazon ECR, verifique se um repositório Amazon ECR chamado myservice1 existe.

  4. No console do Amazon ECS, verifique se um serviço Fargate chamado myservice1 existe em um cluster Amazon ECS não produtivo e de produção.

  5. No console do Amazon Elastic Compute Cloud (Amazon EC2), verifique se os Application Load Balancers, que são de produção e de não produção, foram criados. Registre os nomes DNS dos ALBs.

  6. No CodePipeline console da AWS, verifique se myservice1 existe um pipeline chamado. Deve ter os estágios Source, Build, Deploy-NonProd e Deploy-Prod. O pipeline também deve ter um status in progress.

  7. Monitore o pipeline até que todas as etapas estejam concluídas. 

  8. Aprove-o manualmente para produção.

  9. Em uma janela do navegador, insira os nomes DNS dos ALBs.

  10. O aplicativo deve exibir Hello World nos URLs de não produção e de produção.

Use o pipeline.
  1. Abra o CodeCommit repositório que você criou anteriormente e abra o index.js arquivo. 

  2. Substitua Hello World pelo Hello CI/CD.

  3. Salve e confirme as alterações na ramificação principal.

  4. Verifique se o pipeline é inicializado e se a alteração passa pelos estágios Build, Deploy-NonProd e Deploy-Prod 

  5. Aprove a produção manualmente.

  6. Agora, os URLs de produção e de não produção devem exibir Hello CICD.

AWS DevOps, infraestrutura de nuvem
Repita esse épico para cada microsserviço.

Repita as tarefas desse épico para criar um pipeline de CI/CD para cada um dos seus microsserviços.

AWS DevOps, infraestrutura de nuvem

Recursos relacionados

Mais informações

Comando da cdk synth

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy command

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip