

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

# Crea una CI/CD pipeline per convalidare le configurazioni Terraform utilizzando AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan e Vijesh Vijayakumaran Nair, Amazon Web Services*

## Riepilogo
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Questo modello mostra come testare le configurazioni HashiCorp Terraform utilizzando una pipeline di integrazione e distribuzione continua (CI/CD) distribuita da AWS. CodePipeline

Terraform è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. [La soluzione fornita in questo modello crea una CI/CD pipeline che ti aiuta a convalidare l'integrità delle tue configurazioni Terraform eseguendo cinque fasi: CodePipeline ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`estrae la configurazione Terraform che stai testando da un repository CodeCommit AWS.

1. `"validate"`[esegue strumenti di convalida dell'infrastruttura come codice (IaC), inclusi [tfsec](https://github.com/aquasecurity/tfsec) e checkov. [TFLint](https://github.com/terraform-linters/tflint)](https://www.checkov.io/) Lo stage esegue anche i seguenti comandi di convalida Terraform IAc: e. `terraform validate` `terraform fmt`

1. `"plan"`mostra quali modifiche verranno applicate all'infrastruttura se viene applicata la configurazione Terraform.

1. `"apply"`utilizza il piano generato per fornire l'infrastruttura richiesta in un ambiente di test.

1. `"destroy"`rimuove l'infrastruttura di test creata durante la `"apply"` fase.

## Prerequisiti e limitazioni
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ [AWS Command Line Interface (AWS CLI)[,](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) installata e configurata](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installato e configurato sul tuo computer locale
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), installato e configurato sul computer locale

**Limitazioni**
+ L'approccio di questo modello implementa AWS CodePipeline in un solo account AWS e in una sola regione AWS. Le modifiche alla configurazione sono necessarie per le distribuzioni con più account e più regioni.
+ Il ruolo AWS Identity and Access Management (IAM) fornito da questo modello (**codepipeline\_iam\_role**) segue il principio del privilegio minimo. Le autorizzazioni di questo ruolo IAM devono essere aggiornate in base alle risorse specifiche che la pipeline deve creare. ****

**Versioni del prodotto**
+ AWS CLI versione 2.9.15 o successiva
+ Terraform versione 1.3.7 o successiva

## Architecture
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Stack tecnologico Target**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Architettura Target**

Il diagramma seguente mostra un esempio di flusso di lavoro della CI/CD pipeline per testare le configurazioni Terraform. CodePipeline

![Architettura per testare le configurazioni Terraform utilizzando una pipeline CI/CD AWS.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Nel CodePipeline, un utente AWS avvia le azioni proposte in un piano Terraform eseguendo il `terraform apply` comando nella CLI AWS.

1. AWS CodePipeline assume un ruolo di servizio IAM che include le policy necessarie per l'accesso CodeCommit CodeBuild, AWS KMS e Amazon S3.

1. CodePipeline esegue la fase della `"checkout"` pipeline per estrarre la configurazione Terraform da un CodeCommit repository AWS per i test.

1. CodePipeline esegue la `"validate"` fase per testare la configurazione Terraform eseguendo strumenti di convalida IaC ed eseguendo comandi di convalida Terraform IAc in un progetto. CodeBuild 

1. CodePipeline esegue la `"plan"` fase per creare un piano nel CodeBuild progetto basato sulla configurazione Terraform. L'utente AWS può rivedere questo piano prima che le modifiche vengano applicate all'ambiente di test.

1. Code Pipeline esegue la `"apply"` fase di implementazione del piano utilizzando il CodeBuild progetto per fornire l'infrastruttura richiesta nell'ambiente di test.

1. CodePipeline esegue lo `"destroy"` stage, che utilizza CodeBuild per rimuovere l'infrastruttura di test creata durante la `"apply"` fase.

1. [Un bucket Amazon S3 archivia gli elementi della pipeline, che vengono crittografati e decrittografati utilizzando una chiave gestita dal cliente AWS KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)

## Tools (Strumenti)
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Strumenti**

*Servizi AWS*
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ti CodePipeline 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 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
+ [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 Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

*Altri servizi*
+ [HashiCorp Terraform](https://www.terraform.io/docs) è un'applicazione di interfaccia a riga di comando che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

**Codice**

Il codice per questo pattern è disponibile nel repository. GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples) Il repository contiene le configurazioni Terraform necessarie per creare l'architettura di destinazione delineata in questo modello.

## Epiche
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Fornisci i componenti della soluzione
<a name="provision-the-solution-components"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il GitHub repository. | Clona il GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repository eseguendo il seguente comando in una finestra di terminale:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre><br />Per ulteriori informazioni, consulta [Clonazione di un repository nella documentazione.](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) GitHub  | DevOps ingegnere | 
| Crea un file di definizioni variabili Terraform.  | Crea un `terraform.tfvars` file in base ai requisiti del tuo caso d'uso. Puoi aggiornare le variabili nel `examples/terraform.tfvars` file che si trova nel repository clonato.<br />Per ulteriori informazioni, consulta [Assegnazione di valori alle variabili del modulo root](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) nella documentazione di Terraform.Il `Readme.md` file del repository include ulteriori informazioni sulle variabili richieste. | DevOps ingegnere | 
| Configura AWS come provider Terraform. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Per ulteriori informazioni, consulta il [provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) nella documentazione di Terraform. | DevOps ingegnere | 
| Aggiorna la configurazione del provider Terraform per creare il bucket di replica Amazon S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)La replica attiva la copia automatica e asincrona degli oggetti tra i bucket Amazon S3. | DevOps ingegnere | 
| Inizializza la configurazione Terraform. | Per inizializzare la directory di lavoro che contiene i file di configurazione Terraform, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform init</pre> | DevOps ingegnere | 
| Crea il piano Terraform. | Per creare un piano Terraform, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform valuta i file di configurazione per determinare lo stato di destinazione per le risorse dichiarate. Quindi confronta lo stato di destinazione con lo stato attuale e crea un piano. | DevOps ingegnere | 
| Verifica il piano Terraform. | Rivedi il piano Terraform e conferma che configuri l'architettura richiesta nel tuo account AWS di destinazione. | DevOps ingegnere | 
| Distribuire la soluzione. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform crea, aggiorna o distrugge l'infrastruttura per raggiungere lo stato di destinazione dichiarato nei file di configurazione. | DevOps ingegnere | 

### Convalida le configurazioni Terraform eseguendo la pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il repository del codice sorgente. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps ingegnere | 
| Convalida le fasi della pipeline. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Per ulteriori informazioni, consulta [Visualizza i dettagli e la cronologia della pipeline (console)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) nella *AWS CodePipeline User Guide*.Quando viene apportata una modifica al ramo principale del repository di origine, la pipeline di test viene attivata automaticamente. | DevOps ingegnere | 
| Verifica l'output del rapporto. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Il `<project_name>-validate` CodeBuild progetto genera report di vulnerabilità per il codice durante la fase. `"validate"` | DevOps ingegnere | 

### Pulizia delle risorse
<a name="clean-up-your-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci la pipeline e le risorse associate. | Per eliminare le risorse di test dal tuo account AWS, esegui il seguente comando nella cartella principale del repository clonato:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps ingegnere | 

## risoluzione dei problemi
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Riceverai un **AccessDenied **errore durante lo `"apply"` stage. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Risorse correlate
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blocchi di moduli](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentazione Terraform)
+ [Come utilizzare CI/CD per distribuire e configurare i servizi di sicurezza AWS con Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (post sul blog AWS)
+ [Utilizzo di ruoli collegati ai servizi (documentazione IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html))
+ [create-pipeline (documentazione](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) AWS CLI)
+ [Configurare la crittografia lato server per gli artefatti archiviati in Amazon S3](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) per (documentazione AWS) CodePipeline CodePipeline 
+ [Quote per AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentazione AWS)
+ [Protezione dei dati in AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentazione AWS)

## Informazioni aggiuntive
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Moduli Terraform personalizzati**

Di seguito è riportato un elenco di moduli Terraform personalizzati utilizzati in questo modello:
+ `codebuild_terraform`crea i CodeBuild progetti che formano ogni fase della pipeline.
+ `codecommit_infrastructure_source_repo`acquisisce e crea il repository di origine CodeCommit .
+ `codepipeline_iam_role`crea i ruoli IAM richiesti per la pipeline.
+ `codepipeline_kms`crea la chiave AWS KMS richiesta per la crittografia e la decrittografia degli oggetti Amazon S3.
+ `codepipeline_terraform`crea la pipeline di test per il repository di origine. CodeCommit 
+ `s3_artifacts_bucket`crea un bucket Amazon S3 per gestire gli artefatti della pipeline.

**Crea file di specifiche**

Di seguito è riportato un elenco di file di specifiche di build (buildspec) utilizzati da questo pattern per eseguire ogni fase della pipeline:
+ `buildspec_validate.yml`gestisce il palco. `"validate"`
+ `buildspec_plan.yml`dirige il `"plan"` palco.
+ `buildspec_apply.yml`dirige il `"apply"` palco.
+ `buildspec_destroy.yml`dirige il `"destroy"` palco.

*Crea variabili del file di specificazione*

Ogni file buildspec utilizza le seguenti variabili per attivare diverse impostazioni specifiche della build:


| 
| 
| Variabile | Valore predefinito | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." |  CodeCommit Definisce la directory di origine | 
| `TF_VERSION` | «1.3.7" | Definisce la versione Terraform per l'ambiente di compilazione | 

Il `buildspec_validate.yml` file supporta anche le seguenti variabili per attivare diverse impostazioni specifiche della build:


| 
| 
| Variabile | Valore predefinito | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | ». /modelli/script» | Definisce la directory degli script | 
| `ENVIRONMENT` | «dev» | Definisce il nome dell'ambiente | 
| `SKIPVALIDATIONFAILURE` | «Y» | Salta la convalida in caso di errori | 
| `ENABLE_TFVALIDATE` | «Y» | Attiva Terraform validate  | 
| `ENABLE_TFFORMAT` | «Y» | Attiva il formato Terraform | 
| `ENABLE_TFCHECKOV` | «Y» | Attiva la scansione Check-Ov | 
| `ENABLE_TFSEC` | «Y» | Attiva la scansione tfsec | 
| `TFSEC_VERSION` | «v1.28.1" | Definisce la versione di tfsec | 