

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á.

# Detecte alterações automaticamente e inicie diferentes CodePipeline pipelines para um monorepo em CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha e Ricardo Morais, Amazon Web Services*

## Resumo
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Aviso**: não AWS Cloud9 está mais disponível para novos clientes. Os clientes existentes do AWS Cloud9 podem continuar usando o serviço normalmente. [Saiba mais](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Esse padrão ajuda você a detectar automaticamente alterações no código-fonte de um aplicativo baseado em monorepo AWS CodeCommit e, em seguida, iniciar um pipeline AWS CodePipeline que executa a integração contínua e a entrega contínua (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), o que garante melhor visibilidade, compartilhamento mais fácil do código e melhor colaboração, padronização e capacidade de descoberta.

A solução descrita neste padrão não realiza nenhuma análise de dependência entre os microsserviços presentes no Monorepo. Ele só detecta alterações no código-fonte e inicia o pipeline correspondente CI/CD .

O padrão é usado AWS Cloud9 como ambiente de desenvolvimento integrado (IDE) e AWS Cloud Development Kit (AWS CDK) para definir uma infraestrutura usando duas CloudFormation pilhas: `MonoRepoStack` e. `PipelinesStack` A `MonoRepoStack` pilha cria o monorepo in AWS CodeCommit e a AWS Lambda função que inicia os pipelines. CI/CD A pilha `PipelinesStack` define sua infraestrutura de pipeline.

**Importante**  
O fluxo de trabalho deste padrão é uma prova de conceito (PoC, na sigla em inglês). Recomendamos que você o utilize somente em um ambiente de teste. Se você quiser usar a abordagem desse padrão em um ambiente de produção, consulte [as melhores práticas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação AWS Identity and Access Management (IAM) e faça as alterações necessárias em suas funções do IAM Serviços da AWS e. 

## Pré-requisitos e limitações
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Pré-requisitos **
+ Uma AWS conta ativa.
+ AWS Command Line Interface (AWS CLI), instalado e configurado. Para obter mais informações, consulte [Instalação, atualização e desinstalação do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) na AWS CLI documentação.  
+ Python 3 e `pip`, instalado na sua máquina local. Para obter mais informações, consulte a [Documentação do Python](https://www.python.org/). 
+ O AWS CDK instalado e configurado. Para obter mais informações, consulte [Introdução ao AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) na AWS CDK documentação. 
+ Um AWS Cloud9 IDE, instalado e configurado. Para obter mais informações, consulte [Configuração AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) na AWS Cloud9 documentação. 
+ O GitHub [AWS CodeCommit monorepo multi-pipeline aciona](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) o repositório, clonado em sua máquina local. 
+ Um diretório existente contendo o código do aplicativo com o qual você deseja criar e implantar CodePipeline.
+ Familiaridade e experiência com as DevOps melhores práticas no Nuvem AWS. Para aumentar sua familiaridade com DevOps, você pode usar o padrão [Crie uma arquitetura fracamente acoplada com microsserviços usando DevOps práticas e AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) no site de orientação prescritiva. AWS  

## Arquitetura
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

O diagrama a seguir mostra como usar o AWS CDK para definir uma infraestrutura com duas AWS CloudFormation pilhas: `MonoRepoStack` e. `PipelinesStack`

![\[Fluxo de trabalho para usar o AWS CDK para definir uma infraestrutura com duas CloudFormation pilhas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O processo de bootstrap usa o AWS CDK para criar as AWS CloudFormation pilhas e. `MonoRepoStack` `PipelinesStack`

1. A `MonoRepoStack` pilha cria o CodeCommit repositório para seu aplicativo e a função `monorepo-event-handler` Lambda que é iniciada após cada confirmação.

1. A `PipelinesStack` pilha cria os pipelines CodePipeline que são iniciados pela função Lambda. Cada microsserviço deve ter um pipeline de infraestrutura definido.

1. O pipeline para `microservice-n` é iniciado pela função Lambda e inicia seus CI/CD estágios isolados baseados no código-fonte em. CodeCommit

1. O pipeline para `microservice-1` é iniciado pela função Lambda e inicia seus CI/CD estágios isolados baseados no código-fonte em. CodeCommit

O diagrama a seguir mostra a implantação das AWS CloudFormation pilhas `MonoRepoStack` e `PipelinesStack` em uma conta.

![\[Implantação das CloudFormation pilhas MonoRepoStack e PipelinesStack em uma conta da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Um usuário altera o código em um dos microsserviços do aplicativo.

1. O usuário envia as alterações de um repositório local para um CodeCommit repositório.

1. A atividade push inicia a função Lambda que recebe todos os push no repositório. CodeCommit 

1. A função do Lambda realiza a leitura de um parâmetro no Parameter Store, uma funcionalidade do AWS Systems Manager, para recuperar o ID da confirmação mais recente. O parâmetro tem o formato de nomenclatura:`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Se o parâmetro não for encontrado, a função Lambda lê o último ID de confirmação do CodeCommit repositório e salva o valor retornado no Parameter Store.

1. Depois de identificar o ID do commit e os arquivos alterados, a função Lambda identifica os pipelines para cada diretório de microsserviços e inicia o pipeline necessário. CodePipeline 

## Ferramentas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio dela. CloudFormation
+ O [Python](https://www.python.org/) é uma linguagem de programação que facilita o trabalho ágil e a integração eficiente de sistemas.

**Código **

O código-fonte e os modelos desse padrão estão disponíveis no repositório de gatilhos [multipipeline GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Práticas recomendadas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Esta arquitetura de amostra não inclui uma solução de monitoramento para a infraestrutura implantada. Se você deseja implantar esta solução em um ambiente de produção, recomendamos que habilite o monitoramento. Para obter mais informações, consulte [Monitore seus aplicativos sem servidor com o CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) na documentação AWS Serverless Application Model (AWS SAM).
+ Ao editar o código de amostra fornecido por esse padrão, siga as [melhores práticas para desenvolver e implantar a infraestrutura de nuvem](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) na AWS CDK documentação.
+ Ao definir seus pipelines de microsserviços, revise as [melhores práticas de segurança](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) na AWS CodePipeline documentação.
+ Você também pode verificar as melhores práticas em seu AWS CDK código usando o utilitário [cdk-nag](https://github.com/cdklabs/cdk-nag). Essa ferramenta usa um conjunto de regras, agrupadas em pacotes, para avaliar seu código. Os pacotes disponíveis são:
  + [AWS Biblioteca de soluções](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Health Insurance Portability and Accountability Act (HIPAA) security](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [National Institute of Standards and Technology (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Payment Card Industry Data Security Standard (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Épicos
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configurar o ambiente
<a name="set-up-the-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um ambiente virtual Python. | Em seu AWS Cloud9 IDE, crie um ambiente virtual em Python e instale as dependências necessárias executando o seguinte comando:`make install` | Desenvolvedor | 
| Inicialize o Conta da AWS e Região da AWS para o. AWS CDK | Inicialize o necessário Conta da AWS e a região executando o seguinte comando:`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Desenvolvedor | 

### Adicione um novo pipeline para um microsserviço
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Adicione seu código de amostra ao diretório do aplicativo. | Adicione o diretório que contém o código do aplicativo de amostra ao `monorepo-sample` diretório no repositório clonado de gatilhos de [vários GitHub AWS CodeCommit pipelines monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger). | Desenvolvedor | 
| Edite o arquivo `monorepo-main.json`. | Adicione o nome do diretório do código da sua aplicação e o nome do pipeline ao arquivo `monorepo-main.json` no repositório clonado. | Desenvolvedor | 
| Criar o pipeline. | No diretório `Pipelines` do repositório, adicione a `class` do pipeline para sua aplicação. O diretório contém dois arquivos de amostra, nomeadamente `pipeline_hotsite.py` e `pipeline_demo.py`. Cada arquivo conta com três estágios: origem, desenvolvimento e implantação.Você pode copiar um dos arquivos e alterá-lo de acordo com os requisitos do seu aplicativo.  | Desenvolvedor | 
| Edite o arquivo `monorepo_config.py`. | Em `service_map`, adicione o nome do diretório do seu aplicativo e a classe que você criou para o pipeline.Por exemplo, o código a seguir mostra uma definição de pipeline no diretório `Pipelines` que usa um arquivo nomeado `pipeline_mysample.py` com uma classe `MySamplePipeline`:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Desenvolvedor | 

### Implante a MonoRepoStack pilha
<a name="deploy-the-monorepostack-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a AWS CloudFormation pilha. | Implante a AWS CloudFormation `MonoRepoStack` pilha com valores de parâmetros padrão no diretório raiz do repositório clonado executando o comando. `make deploy-core`Você pode alterar o nome do repositório executando o comando `make deploy-core monorepo-name=<repo_name>`.Você pode implantar simultaneamente ambos os pipelines usando o comando `make deploy monorepo-name=<repo_name>`. | Desenvolvedor | 
| Valide o CodeCommit repositório. | Valide se seus recursos foram criados executando o comando `aws codecommit get-repository --repository-name <repo_name>`. Como a CloudFormation pilha cria o CodeCommit repositório em que o monorepo é armazenado, não execute o `cdk destroy MonoRepoStack ` comando se você tiver começado a fazer modificações nele. | Desenvolvedor | 
| Valide os resultados da CloudFormation pilha. | Valide se a CloudFormation `MonoRepoStack` pilha foi criada e configurada corretamente executando o seguinte comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Desenvolvedor | 

### Implante a PipelinesStack pilha
<a name="deploy-the-pipelinesstack-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a CloudFormation pilha. | A AWS CloudFormation `PipelinesStack` pilha deve ser implantada após a implantação da `MonoRepoStack` pilha. A pilha aumenta de tamanho quando novos microsserviços são adicionados à base de código do monorepo e é reimplantada quando um novo microsserviço é integrado.Implante a PipelinesStack pilha executando o `make deploy-pipelines` comando.Você também pode implantar ambos os pipelines simultaneamente executando o comando `make deploy monorepo-name=<repo_name>`.O exemplo de saída a seguir mostra como a `PipelinesStacks` implantação imprime URLs os microsserviços no final da implementação:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Desenvolvedor | 
| Valide os resultados da AWS CloudFormation pilha. | Valide se a AWS CloudFormation `PipelinesStacks` pilha foi criada e configurada corretamente executando o seguinte comando:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Desenvolvedor | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua suas AWS CloudFormation pilhas. | Execute o comando `make destroy`. | Desenvolvedor | 
| Exclua os buckets do S3 dos pipelines. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Desenvolvedor | 

## Solução de problemas
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Eu encontrei AWS CDK problemas. | Consulte [Solução de AWS CDK problemas comuns](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) na documentação do AWS CDK. | 
| Eu enviei o código do meu microsserviço, mas o pipeline do microsserviço não foi executado. | **Validação da configuração***Verifique a configuração da ramificação:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Valide os arquivos de configuração:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Solução de problemas no console***AWS CodePipeline verificações:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda solução de problemas:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Preciso implantar novamente todos os meus microsserviços.  | Existem duas abordagens para aplicar a reimplantação de todos os microsserviços. Escolha a opção que melhor se adequa às suas necessidades.**Abordagem 1: excluir um parâmetro no Parameter Store**Este método envolve excluir um parâmetro específico no Systems Manager Parameter Store, que rastreia o último ID de confirmação utilizado para a implantação. Ao remover esse parâmetro, o sistema será forçado a reimplantar todos os microsserviços no próximo acionamento, pois o considera um novo estado.Etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Prós:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Abordagem 2: enviar uma confirmação em cada subpasta do Monorepo**Este método envolve fazer uma alteração pequena e enviá-la em cada subpasta de microsserviço no Monorepo para iniciar os pipelines individuais.Etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Prós:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Contras:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Recursos relacionados
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integração e entrega contínuas (CI/CD) usando CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentação)AWS CDK 
+ [módulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (referência de API)AWS CDK 