Crie automaticamente pipelines de CI/CD e ECS clusters da Amazon para microsserviços usando 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á.

Crie automaticamente pipelines de CI/CD e ECS clusters da Amazon para microsserviços usando AWS CDK

Criado por Varsha Raju () AWS

Ambiente: PoC ou piloto

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

AWSserviços: AWS CodeBuild; AWS CodeCommit; AWS CodePipeline; AmazonECS; AWS CDK

Resumo

Esse padrão descreve como criar automaticamente os pipelines de integração contínua e entrega contínua (CI/CD) e a infraestrutura subjacente para criar 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 ECS cluster da Amazon 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 as alterações de um repositório de origem, criam automaticamente as alterações e AWS CodeCommit, 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 usá-lo 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)

  • AWSCloud Development Kit (AWSCDK), instalado e configurado em sua conta. Para obter mais informações sobre isso, consulte Introdução ao AWS CDK na AWS CDK documentação.

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

  • Familiaridade com AWSCDK,, AWS CodePipeline, AWS CodeBuild CodeCommit, Amazon Elastic Container Registry (AmazonECR)ECS, Amazon e AWS Fargate.

  • Familiaridade com o Docker.

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

Limitações

  • Os limites gerais AWS da conta se aplicam. Para obter mais informações sobre isso, consulte cotas de AWS serviço na documentação de referência AWS geral.

Versões do produto

  • O código foi testado usando o Node.js versão 16.13.0 e a AWS CDK versão 1.132.0.

Arquitetura

Nuvem AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

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 da Amazon ECR

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

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

  6. O teste é realizado usando uma unidade de não produçãoURL.

  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 de produção da Amazon ECS

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

  10. Os usuários de produção acessam seu recurso usando uma produçãoURL.

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. AWS CloudFormation A automação pode criar mais de um ECS cluster da Amazon em cada um VPC e também criar pipelines para microsserviços implantados em um cluster compartilhado da Amazon. ECS No entanto, isso exige que você forneça novas informações de recursos como entradas para a pilha do pipeline.

Ferramentas

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

  • AWS CodeBuild— AWS CodeBuild é 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— AWS CodeCommit é um serviço de controle de versão que permite armazenar e gerenciar repositórios Git de forma privada na nuvem. 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— AWS CodePipeline é 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 (AmazonECS) é um serviço de gerenciamento de contêineres rápido e altamente escalável que é usado para executar, parar e gerenciar contêineres em um cluster. Você pode executar suas tarefas e serviços em uma infraestrutura sem servidor gerenciada pelo AWS Fargate. Como alternativa, para ter mais controle sobre sua infraestrutura, você pode executar suas tarefas e serviços em um cluster de instâncias do Amazon Elastic Compute Cloud (AmazonEC2) 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 AWSCDK.
  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 AWS ambiente executando o aws configure comando ou usando as seguintes variáveis de ambiente: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, Infraestrutura em 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 AWS ambiente para AWS CDK o. 

  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 AWS CloudFormation pilha cria a seguinte infraestrutura:

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

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

    • Um ECS cluster não produtivo da Amazon chamado cicd-ecs-nonprod

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

AWS DevOps, Infraestrutura em nuvem
Monitore a AWS CloudFormation pilha.
  1. Faça login no AWS Management Console, abra o AWS CloudFormation console 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 em nuvem
Teste a AWS CloudFormation pilha.
  1. Depois que a cicd-vpc-ecs AWS CloudFormation pilha for criada, verifique se cicd-vpc-ecs/cicd-vpc-nonprod e foram cicd-vpc-ecs/cicd-vpc-prod VPCs criados. 

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

Importante: Certifique-se de registrar o IDs para os dois VPCs e o grupo de segurança IDs para os grupos de segurança padrão em ambosVPCs.

AWS DevOps, Infraestrutura em 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 em nuvem
Monitore a AWS CloudFormation pilha.

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

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

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

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

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

  5. No console do Amazon Elastic Compute Cloud (AmazonEC2), verifique se os Application Load Balancers não produtivos e de produção foram criados. Registre os DNS nomes dosALBs.

  6. No AWS CodePipeline console, 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 DNS nomes doALBs.

  10. O aplicativo deve ser exibido Hello World na não produção e na produçãoURLs.

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. Tanto a produção quanto a não produção URLs devem agora ser exibidasHello CICD.

AWS DevOps, Infraestrutura em 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 em 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