

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

# Configura una CI/CD pipeline utilizzando AWS CodePipeline e AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder e Cizer Pereira, Amazon Web Services*

## Home
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

L'automazione del processo di creazione e rilascio del software con integrazione e distribuzione continue (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDincorpora una cultura, una serie di principi operativi e una [raccolta](https://aws.amazon.com/devops/#cicd) di pratiche che aiutano i team di sviluppo delle applicazioni a fornire modifiche al codice con maggiore frequenza e affidabilità). *L'implementazione è anche nota come pipeline CI/CD.*

Questo modello definisce una pipeline riutilizzabile di integrazione continua e distribuzione continua (CI/CD) su Amazon Web Services (AWS) con un repository AWS. CodeCommit La CodePipeline pipeline AWS è scritta utilizzando [AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Utilizzando CodePipeline, puoi modellare le diverse fasi del processo di rilascio del software tramite l'interfaccia della Console di gestione AWS, l'AWS Command Line Interface (AWS CLI), AWS o CloudFormation AWS. SDKs Questo modello dimostra l'implementazione CodePipeline e i relativi componenti utilizzando AWS CDK. Oltre alle librerie di costruzione, AWS CDK include un toolkit (il comando CLI`cdk`), che è lo strumento principale per interagire con l'app AWS CDK. Tra le altre funzioni, il toolkit offre la possibilità di convertire uno o più stack in CloudFormation modelli e distribuirli su un account AWS.

La pipeline include test per convalidare la sicurezza delle librerie di terze parti e aiuta a garantire un rilascio rapido e automatico negli ambienti specificati. È possibile aumentare la sicurezza complessiva delle applicazioni sottoponendole a un processo di convalida.

Lo scopo di questo modello è accelerare l'uso delle CI/CD pipeline per distribuire il codice, garantendo al contempo che le risorse distribuite rispettino le migliori pratiche. DevOps Dopo aver implementato il [codice di esempio](https://github.com/aws-samples/aws-codepipeline-cicd), avrai un [AWS CodePipeline](https://aws.amazon.com/codepipeline/) con processi di linting, test, controllo di sicurezza, implementazione e post-distribuzione. Questo modello include anche i passaggi per Makefile. Utilizzando un Makefile, gli sviluppatori possono riprodurre CI/CD i passaggi localmente e aumentare la velocità del processo di sviluppo.

## Prerequisiti e limitazioni
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Una conoscenza di base di quanto segue:
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Limitazioni**

Questo modello utilizza [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html) TypeScript solo per. Non copre altre lingue supportate da AWS CDK.

**Versioni del prodotto**

Utilizza le versioni più recenti dei seguenti strumenti:
+ Interfaccia a riga di comando di AWS (CLI AWS)
+ cfn\_nag
+ git-remote-codecommit
+ Node.js

## Architecture
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Stack tecnologico Target**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Architettura Target**

La pipeline viene attivata da una modifica nel CodeCommit repository AWS (). `SampleRepository` All'inizio, CodePipeline crea artefatti, si aggiorna e avvia il processo di distribuzione. La pipeline risultante implementa una soluzione in tre ambienti indipendenti:
+ Dev: controllo del codice in tre fasi nell'ambiente di sviluppo attivo
+ Test: ambiente di test di integrazione e regressione
+ Prod — Ambiente di produzione

I tre passaggi inclusi nella fase di sviluppo sono il linting, la sicurezza e i test unitari. Questi passaggi vengono eseguiti in parallelo per accelerare il processo. Per garantire che la pipeline fornisca solo artefatti funzionanti, verrà interrotta ogni volta che una fase del processo fallisce. Dopo una fase di implementazione in fase di sviluppo, la pipeline esegue test di convalida per verificare i risultati. In caso di successo, la pipeline distribuirà quindi gli artefatti nell'ambiente di test, che contiene la convalida post-implementazione. Il passaggio finale consiste nel distribuire gli artefatti nell'ambiente Prod.

Il diagramma seguente mostra il flusso di lavoro dal CodeCommit repository ai processi di compilazione e aggiornamento eseguiti da CodePipeline, le tre fasi dell'ambiente di sviluppo e la successiva implementazione e convalida in ciascuno dei tre ambienti.

![L'ambiente di sviluppo include linting, sicurezza e unit testing, tutti con implementazione e convalida.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Tools (Strumenti)
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Servizi AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS. In questo modello CloudFormation i modelli possono essere utilizzati per creare un CodeCommit repository e una CodePipeline pipeline CI/CD.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) è un CI/CD servizio che ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

**Altri strumenti**
+ [cfn\_nag](https://github.com/stelligent/cfn_nag) è uno strumento open source che cerca modelli nei CloudFormation modelli per identificare potenziali problemi di sicurezza.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)è un'utilità per inviare ed estrarre codice dai CodeCommit repository estendendo Git.
+ [Node.js](https://nodejs.org/en/docs/) è un ambiente di JavaScript runtime basato sugli eventi progettato per la creazione di applicazioni di rete scalabili.

**Codice**

Il codice per questo modello è disponibile nel repository GitHub [AWS CodePipeline with CI/CD practices](https://github.com/aws-samples/aws-codepipeline-cicd).

## Best practice
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Esamina le risorse, come le policy di AWS Identity and Access Management (IAM), per confermare che siano in linea con le best practice della tua organizzazione.

## Epiche
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Installa strumenti
<a name="install-tools"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Installa strumenti su macOS o Linux. | Se utilizzi macOS o Linux, puoi installare gli strumenti eseguendo il seguente comando nel tuo terminale preferito o usando [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) per Linux.<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps ingegnere | 
| Configura AWS CLI. | Per configurare AWS CLI, usa le istruzioni per il tuo sistema operativo:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingegnere | 

### Configura la distribuzione iniziale
<a name="set-up-the-initial-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Scarica o clona il codice. | Per ottenere il codice utilizzato da questo pattern, effettuate una delle seguenti operazioni:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre><br />Rimuovi la `.git` directory dal repository clonato.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre><br />Successivamente, utilizzerai un CodeCommit repository AWS appena creato come origine remota. | DevOps ingegnere | 
| Connect all'account AWS. | Puoi connetterti utilizzando un token di sicurezza temporaneo o l'autenticazione delle landing zone. Per confermare che stai utilizzando l'account e la regione AWS corretti, esegui i seguenti comandi.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps ingegnere | 
| Avvia l'ambiente. | Per avviare un ambiente AWS CDK, esegui i seguenti comandi.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre><br />Dopo aver avviato correttamente l'ambiente, dovrebbe essere visualizzato il seguente output.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre><br />Per ulteriori informazioni sul bootstrap di AWS CDK, consulta la documentazione di [AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) CDK. | DevOps ingegnere | 
| Sintetizza un modello. | Per sintetizzare un'app AWS CDK, usa il comando. `cdk synth`<pre>npm run cdk synth</pre><br />Vedrai il seguente output.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps ingegnere | 
| Distribuisci lo CodePipeline stack. | Ora che hai avviato e sintetizzato il CloudFormation modello, puoi distribuirlo. La distribuzione creerà la CodePipeline pipeline e un CodeCommit repository, che saranno l'origine e il trigger della pipeline.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre><br />Dopo aver eseguito il comando, dovresti vedere una corretta distribuzione dello CodePipeline stack e delle informazioni di output. ti `CodePipeline.RepositoryName` dà il nome del CodeCommit repository nell'account AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps ingegnere | 
| Configura l' CodeCommit archivio e la filiale remoti. | Dopo una distribuzione di successo, CodePipeline avvierà la prima esecuzione della pipeline, che puoi trovare nella console [ CodePipeline AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Poiché AWS CDK e io CodeCommit non avviamo un ramo predefinito, questa esecuzione iniziale della pipeline fallirà e restituirà il seguente messaggio di errore.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre><br />Per correggere questo errore, configura un'origine remota come `SampleRepository` e crea il ramo richiesto. `main`<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps ingegnere | 

### Testa la pipeline implementata CodePipeline
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Apporta una modifica per attivare la pipeline. | Dopo una corretta implementazione iniziale, dovresti disporre di una CI/CD pipeline completa con un `main` ramo `SampleRepository` come ramo di origine. Non appena confermate le modifiche al `main` ramo, la pipeline avvierà ed eseguirà la seguente sequenza di azioni:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps ingegnere | 

### Esegui il test localmente utilizzando un Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui il processo di sviluppo utilizzando un Makefile. | È possibile eseguire l'intera pipeline localmente utilizzando il `make` comando oppure eseguire un singolo passaggio (ad esempio,`make linting`).<br />Per testare l'utilizzo`make`, effettuate le seguenti azioni:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Sviluppatore di app, DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina le risorse dell'app AWS CDK. | Per pulire l'app AWS CDK, esegui il comando seguente.<pre>cdk destroy --all</pre><br />Tieni presente che i bucket Amazon Simple Storage Service (Amazon S3) creati durante il bootstrap non vengono eliminati automaticamente. Hanno bisogno di una policy di conservazione che consenta l'eliminazione, oppure devi eliminarli manualmente nel tuo account AWS. | DevOps ingegnere | 

## risoluzione dei problemi
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Il modello non funziona come previsto. | Se qualcosa va storto e il modello non funziona, assicurati di avere quanto segue:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Risorse correlate
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Nozioni di base delle attività comuni nel Centro identità IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Documentazione AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/home.html)