

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Rileva automaticamente le modifiche e avvia diverse CodePipeline pipeline per un monorepo in 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*

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

**Avviso**: AWS Cloud9 non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Cloud9 possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Questo modello consente di rilevare automaticamente le modifiche al codice sorgente di un'applicazione basata su monorepo AWS CodeCommit e quindi di avviare una pipeline AWS CodePipeline che esegua l'integrazione continua e la distribuzione continua (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), che garantisce una migliore visibilità, una condivisione più semplice del codice e una migliore collaborazione, standardizzazione e reperibilità.

La soluzione descritta in questo modello non esegue alcuna analisi delle dipendenze tra i microservizi all'interno del monorepo. Rileva solo le modifiche nel codice sorgente e avvia la pipeline corrispondente. CI/CD 

Il modello viene utilizzato AWS Cloud9 come ambiente di sviluppo integrato (IDE) e AWS Cloud Development Kit (AWS CDK) per definire un'infrastruttura utilizzando due CloudFormation stack: e. `MonoRepoStack` `PipelinesStack` Lo `MonoRepoStack` stack crea il monorepo in AWS CodeCommit e la AWS Lambda funzione che avvia le pipeline. CI/CD Lo `PipelinesStack` stack definisce l'infrastruttura della pipeline.

**Importante**  
Il flusso di lavoro di questo pattern è un proof of concept (PoC). Si consiglia di utilizzarlo solo in un ambiente di test. Se desideri utilizzare l'approccio di questo modello in un ambiente di produzione, consulta [le migliori pratiche di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella documentazione AWS Identity and Access Management (IAM) e apporta le modifiche necessarie ai tuoi ruoli IAM e Servizi AWS. 

## Prerequisiti e limitazioni
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Prerequisiti**
+ Un AWS account attivo.
+ AWS Command Line Interface (AWS CLI), installato e configurato. Per ulteriori informazioni, vedere [Installazione, aggiornamento e disinstallazione di AWS CLI nella](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) AWS CLI documentazione.  
+ Python 3 e`pip`, installato sul computer locale. Per ulteriori informazioni, consulta la documentazione di [Python](https://www.python.org/). 
+ AWS CDK, installato e configurato. Per ulteriori informazioni, vedere [Guida introduttiva AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) a nella AWS CDK documentazione. 
+ Un AWS Cloud9 IDE, installato e configurato. Per ulteriori informazioni, consulta [Configurazione AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) nella AWS Cloud9 documentazione. 
+ Il repository GitHub [AWS CodeCommit monorepo multi-pipeline Triggers](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), clonato sul computer locale. 
+ Una directory esistente contenente il codice dell'applicazione che si desidera creare e utilizzare. CodePipeline
+ Familiarità ed esperienza con le DevOps migliori pratiche su. Cloud AWS Per aumentare la tua familiarità con DevOps, puoi utilizzare il modello [Costruisci un'architettura ad accoppiamento libero con microservizi utilizzando DevOps pratiche 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) sul sito Web Prescriptive Guidance. AWS  

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

Il diagramma seguente mostra come utilizzare per definire un'infrastruttura con due AWS CDK stack: e. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

![Flusso di lavoro per utilizzare il CDK AWS per definire un'infrastruttura con due CloudFormation stack.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Il processo di bootstrap utilizza AWS CDK per creare gli stack e. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

1. Lo `MonoRepoStack` stack crea il CodeCommit repository per l'applicazione e la funzione `monorepo-event-handler` Lambda che viene avviata dopo ogni commit.

1. Lo `PipelinesStack` stack crea le pipeline CodePipeline avviate dalla funzione Lambda. Ogni microservizio deve avere una pipeline di infrastruttura definita.

1. La pipeline for `microservice-n` viene avviata dalla funzione Lambda e inizia le sue CI/CD fasi isolate basate sul codice sorgente in. CodeCommit

1. La pipeline for `microservice-1` viene avviata dalla funzione Lambda e inizia le sue CI/CD fasi isolate basate sul codice sorgente in. CodeCommit

Il diagramma seguente mostra la distribuzione degli AWS CloudFormation stack `MonoRepoStack` e in un account. `PipelinesStack`

![Distribuzione degli CloudFormation stack MonoRepoStack e PipelinesStack in un account AWS.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un utente modifica il codice in uno dei microservizi dell'applicazione.

1. L'utente invia le modifiche da un repository locale a un repository. CodeCommit 

1. L'attività push avvia la funzione Lambda che riceve tutti i push al repository. CodeCommit 

1. La funzione Lambda legge un parametro in Parameter Store, una funzionalità di AWS Systems Manager, per recuperare l'ID di commit più recente. Il parametro ha il formato di denominazione:. `/MonoRepoTrigger/{repository}/{branch_name}/LastCommit` Se il parametro non viene trovato, la funzione Lambda legge l'ultimo ID di commit dal CodeCommit repository e salva il valore restituito in Parameter Store.

1. Dopo aver identificato l'ID di commit e i file modificati, la funzione Lambda identifica le pipeline per ogni directory di microservizi e avvia la pipeline richiesta. CodePipeline 

## Tools (Strumenti)
<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)è un framework di sviluppo software per definire l'infrastruttura cloud in codice e fornirla tramite. CloudFormation
+ [Python](https://www.python.org/) è un linguaggio di programmazione che consente di lavorare rapidamente e integrare i sistemi in modo più efficace.

**Codice**

Il codice sorgente e i modelli per questo pattern sono disponibili nel repository GitHub [AWS CodeCommit monorepo multi-pipeline](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) triggers.

## Best practice
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Questa architettura di esempio non include una soluzione di monitoraggio per l'infrastruttura implementata. Se desideri implementare questa soluzione in un ambiente di produzione, ti consigliamo di abilitare il monitoraggio. Per ulteriori informazioni, consulta [Monitoraggio delle applicazioni serverless con CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) nella documentazione AWS Serverless Application Model (AWS SAM).
+ Quando modifichi il codice di esempio fornito da questo modello, segui le [migliori pratiche per lo sviluppo e la distribuzione dell'infrastruttura cloud riportate](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) nella AWS CDK documentazione.
+ Quando definisci le tue pipeline di microservizi, consulta le [migliori pratiche di sicurezza nella documentazione](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html). AWS CodePipeline 
+ Puoi anche verificare le migliori pratiche nel AWS CDK codice utilizzando l'utilità [cdk-nag](https://github.com/cdklabs/cdk-nag). Questo strumento utilizza una serie di regole, raggruppate per pacchetti, per valutare il codice. I pacchetti disponibili sono:
  + [AWS Libreria di soluzioni](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Sicurezza dell'Health Insurance Portability and Accountability Act (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Istituto nazionale di standard e tecnologia (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)
  + [Standard di sicurezza dei dati del settore delle carte di pagamento (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

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

### Configura l'ambiente
<a name="set-up-the-environment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un ambiente Python virtuale. | Nel tuo AWS Cloud9 IDE, crea un ambiente Python virtuale e installa le dipendenze richieste eseguendo il seguente comando:<br />`make install` | Developer | 
| Avvia il comando Account AWS e per. Regione AWS AWS CDK | Esegui il bootstrap di required Account AWS e Region eseguendo il seguente comando:<br />`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Aggiungi una nuova pipeline per un microservizio
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
|  Aggiungete il codice di esempio alla directory dell'applicazione. | Aggiungi la directory che contiene il codice dell'applicazione di esempio alla `monorepo-sample` directory del repository GitHub [AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) multi-pipeline triggers clonato. | Developer | 
| Modificare il file `monorepo-main.json`. | Aggiungi il nome della directory del codice dell'applicazione e il nome della pipeline al file nel repository clonato. `monorepo-main.json` | Developer | 
| Crea la pipeline. | Nella `Pipelines` directory del repository, aggiungi la pipeline `class` per la tua applicazione. La directory contiene due file di esempio e. `pipeline_hotsite.py` `pipeline_demo.py` Ogni file ha tre fasi: origine, compilazione e distribuzione.<br />È possibile copiare uno dei file e modificarlo in base ai requisiti dell'applicazione.  | Developer | 
| Modificare il file `monorepo_config.py`. | In`service_map`, aggiungi il nome della directory per la tua applicazione e la classe che hai creato per la pipeline.<br />Ad esempio, il codice seguente mostra una definizione di pipeline nella `Pipelines` directory che utilizza un file denominato `pipeline_mysample.py` con una `MySamplePipeline` classe:<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> | Developer | 

### Distribuisci lo stack MonoRepoStack
<a name="deploy-the-monorepostack-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci lo AWS CloudFormation stack. | Distribuisci lo AWS CloudFormation `MonoRepoStack` stack con i valori dei parametri predefiniti nella directory principale del repository clonato eseguendo il comando. `make deploy-core`<br />È possibile modificare il nome del repository eseguendo il comando. `make deploy-core monorepo-name=<repo_name>`È possibile distribuire contemporaneamente entrambe le pipeline utilizzando il comando. `make deploy monorepo-name=<repo_name>` | Developer | 
| Convalida il repository. CodeCommit  | Verifica che le tue risorse siano state create eseguendo il comando. `aws codecommit get-repository --repository-name <repo_name>` Poiché lo CloudFormation stack crea il CodeCommit repository in cui è archiviato il monorepo, non eseguire il `cdk destroy MonoRepoStack ` comando se hai iniziato a inserire modifiche al monorepo. | Developer | 
| Convalida i risultati dello stack. CloudFormation  | Verifica che lo CloudFormation `MonoRepoStack` stack sia stato creato e configurato correttamente eseguendo il comando seguente:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Implementa lo stack PipelinesStack
<a name="deploy-the-pipelinesstack-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Distribuisci lo CloudFormation stack. | Lo AWS CloudFormation `PipelinesStack` stack deve essere distribuito dopo aver distribuito lo stack. `MonoRepoStack` Lo stack aumenta di dimensioni quando vengono aggiunti nuovi microservizi alla base di codice di monorepo e viene ridistribuito quando viene integrato un nuovo microservizio.<br />Distribuisci lo stack PipelinesStack eseguendo il comando. `make deploy-pipelines`È inoltre possibile distribuire contemporaneamente entrambe le pipeline eseguendo il comando. `make deploy monorepo-name=<repo_name>`<br />Il seguente output di esempio mostra come la `PipelinesStacks` distribuzione stampa i dati URLs per i microservizi alla fine dell'implementazione:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Convalida i risultati dello AWS CloudFormation stack. | Verifica che lo AWS CloudFormation `PipelinesStacks` stack sia stato creato e configurato correttamente eseguendo il comando seguente:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

### Eseguire la pulizia delle risorse
<a name="clean-up-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina i tuoi AWS CloudFormation stack. | Esegui il comando `make destroy`. | Developer | 
| Elimina i bucket S3 per le tue pipeline. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## risoluzione dei problemi
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Ho riscontrato dei problemi. AWS CDK  | Consulta [Risoluzione dei AWS CDK problemi più comuni](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) nella documentazione di AWS CDK. | 
| Ho inviato il mio codice di microservizio, ma la pipeline dei microservizi non ha funzionato. | **Convalida della configurazione**<br />*Verifica la configurazione della filiale:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*Convalida i file di configurazione:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Risoluzione dei problemi sulla console**<br />*AWS CodePipeline controlli:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*AWS Lambda risoluzione dei problemi:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Devo ridistribuire tutti i miei microservizi.  | Esistono due approcci per forzare la ridistribuzione di tutti i microservizi. Scegliete l'opzione più adatta alle vostre esigenze.<br />**Approccio 1: Eliminare un parametro in Parameter Store**<br />Questo metodo prevede l'eliminazione di un parametro specifico in Systems Manager Parameter Store che tiene traccia dell'ultimo ID di commit utilizzato per la distribuzione. Quando si rimuove questo parametro, il sistema è costretto a ridistribuire tutti i microservizi al successivo trigger, perché lo percepisce come uno stato nuovo.<br />Fasi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Pro:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Contro:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Approccio 2: invia un commit in ogni sottocartella monorepo**<br />Questo metodo prevede di apportare una modifica minore e di inserirla in ciascuna sottocartella di microservizi all'interno del monorepo per avviare le relative pipeline individuali.<br />Fasi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Pro:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Contro:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Risorse correlate
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integrazione e distribuzione continue (CI/CD) con CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentazione)AWS CDK 
+ [modulo aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (riferimento API)AWS CDK 