

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

# Utilizzo CodePipeline per distribuire Terraform e modelli CloudFormation
<a name="using-codepipeline"></a>

Nel DPA, si utilizzano elementi costitutivi per creare acceleratori AWS CodePipeline per Terraform e IAc. CloudFormation Questa sezione descrive quanto segue per questo caso d'uso:
+ Struttura della tubazione standardizzata
+ Fasi e lavori riutilizzabili
+ Strumenti integrati per le scansioni di sicurezza

[L'archivio DPA contiene cartelle per Terraform e. [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/cloudformation)](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/terraform) Ciascuna di queste cartelle contiene le seguenti due sottocartelle:
+ **pipeline-modules**: questa cartella contiene il codice per la distribuzione della struttura di pipeline standardizzata.
+ **shared**: questa cartella contiene i file ready-to-use buildspec per le fasi e i job DPA.

## Prerequisiti
<a name="prerequisites-codepipeline"></a>
+ Un attivo Account AWS
+ Autorizzazioni per il provisioning di risorse utilizzando modelli IaC
+ Autorizzazioni per creare repository e componenti AWS CodeCommit CodePipeline 

## Tools (Strumenti)
<a name="tools-codepipeline"></a>
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) [è un linter che verifica i modelli CloudFormation YAML o JSON rispetto alle specifiche delle risorse.AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Esegue anche altri controlli, come la verifica di valori validi per le proprietà delle risorse e il rispetto delle migliori pratiche.
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) è uno strumento open source che identifica potenziali problemi di sicurezza nei CloudFormation modelli cercando modelli.
+ [Checkov è uno strumento statico di analisi del codice che verifica](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) la presenza di configurazioni errate di sicurezza e conformità in IaC.
+ [TFLint](https://github.com/terraform-linters/tflint)è un linter che controlla il codice Terraform per potenziali errori e il rispetto delle migliori pratiche.
+ [tfsec](https://github.com/aquasecurity/tfsec) è uno strumento statico di analisi del codice che controlla il codice Terraform per potenziali errori di configurazione.

## Istruzioni
<a name="instructions-codepipeline"></a>

### Crea repository CodeCommit
<a name="instructions-repo"></a>

1. Crea due CodeCommit repository separati come segue:
   + `common-repo`— Questo repository contiene le librerie condivise, i file buildspec e le dipendenze.
   + `app-repo`— Questo repository contiene Terraform o i modelli per implementare la tua infrastruttura. CloudFormation 

   Per istruzioni, consulta [Creare un](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) repository. AWS CodeCommit 

1. Nel `common-repo` repository, crea una cartella denominata. `shared` Copia i file buildspec dalla cartella [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/terraform/shared) o [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/cloudformation/shared)**condivisa** nel repository GitHub DPA nella nuova cartella. Per istruzioni, consulta [Creare o aggiungere](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-file.html) un file a un repository. AWS CodeCommit 

1. Nel `app-repo` repository, crea una cartella denominata. `entrypoint` Copia il file dalla cartella [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/examples/aws_codepipeline/terraform/entrypoint/terraform-infrastructure.json) o [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/examples/aws_codepipeline/cloudformation/entrypoint/config.json)**entrypoint** nel repository GitHub DPA nella nuova cartella. Per ulteriori informazioni su questi file, vedere. [Comprensione del file JSON del punto di ingresso](#understanding-json-file)

1. Esamina la directory [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/examples/aws_codepipeline/terraform) o [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/examples/aws_codepipeline/cloudformation)**examples**, quindi struttura la `app-repo` cartella in base a questi esempi. Queste directory contengono esempi per la distribuzione di un'istanza Amazon Elastic Compute Cloud (Amazon EC2) o un bucket Amazon Simple Storage Service (Amazon S3).

1. Continua con una delle due sezioni seguenti:
   + [Crea la pipeline e definisci le fasi (Terraform)](#instructions-terraform-pipeline)
   + [Crea la pipeline e definisci le fasi () CloudFormation](#instructions-cfn-pipeline)

### Crea la pipeline e definisci le fasi (Terraform)
<a name="instructions-terraform-pipeline"></a>

1. Clona il [repository DevOps Pipeline Accelerator (DPA)](https://github.com/aws-samples/aws-devops-pipeline-accelerator) dalla tua workstation locale. GitHub

1. Nel repository clonato, accedi alla cartella. `aws-codepipeline/terraform/pipeline-modules`

1. Nel file **terraform.tfvars**, aggiorna e convalida lo stato di Terraform e le variabili specifiche del ruolo (IAM). AWS Identity and Access Management 

1. Crea un'immagine Docker. Per istruzioni, consulta [Creazione di immagini Docker da usare in CodeBuild](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/shared-docker/docker-images/README.md) ()GitHub.

1. Aggiorna la `builder_image` variabile definita nel file **terraform.tfvars**.

1. Esegui i comandi seguenti: Questo inizializza, visualizza in anteprima e distribuisce l'infrastruttura tramite Terraform.

   ```
   terraform init
   terraform plan
   terraform apply
   ```

1. Accedi alla Account AWS. Nella [CodePipeline console](https://console.aws.amazon.com/codesuite/codepipeline/home), conferma che la nuova pipeline è stata creata.

   **Nota**: se la prima esecuzione è in uno `failed` stato, ripeti il passaggio precedente.

1. Quando viene creata la nuova CodePipeline pipeline, AWS CodeBuild viene creato automaticamente un nuovo ruolo IAM per. Il nome di questo ruolo creato automaticamente termina con. `-codebuild-role` Aggiorna questo ruolo con le autorizzazioni necessarie per implementare la tua infrastruttura.

### Crea la pipeline e definisci le fasi () CloudFormation
<a name="instructions-cfn-pipeline"></a>

1. Clona il [repository DevOps Pipeline Accelerator (DPA)](https://github.com/aws-samples/aws-devops-pipeline-accelerator) dalla tua workstation locale. GitHub

1. Nel repository clonato, accedi alla cartella. `aws-codepipeline/cloudformation/pipeline-modules`

1. **Distribuisci il modello pipeline-cft.yaml.** CloudFormation Di seguito sono riportati i parametri obbligatori che è necessario passare allo stack.
   + `ArtifactsBucket`— Nome del repository che contiene gli artefatti della pipeline da aggiornare
   + `EcrDockerRepository`— Uniform Resource Identifier (URI) del repository Amazon ECR con il tag `image`
   + `CodeCommitAppRepo`— Nome del CodeCommit repository che contiene i modelli
   + `CodeCommitBaseRepo`— Nome del CodeCommit repository che contiene i file condivisi
   + `CodeCommitRepoBranch`— Nome del ramo del CodeCommit repository
   + `SNSMailAddress`— Indirizzo e-mail che riceverà le notifiche di Amazon Simple Notification Service (Amazon SNS) sullo stato della pipeline

   Per istruzioni, consulta [Lavorare con gli stacks nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html). CloudFormation 

1. Accedi all'account AWS. Nella [CodePipeline console](https://console.aws.amazon.com/codesuite/codepipeline/home), conferma che la nuova pipeline è stata creata.  

1. Quando viene creata la nuova CodePipeline pipeline, viene creato automaticamente un nuovo ruolo IAM per AWS CodeBuild . Il nome di questo ruolo creato automaticamente termina con. `-codebuild-role` Aggiorna questo ruolo con le autorizzazioni necessarie per implementare la tua infrastruttura.

## Comprensione del file JSON del punto di ingresso
<a name="understanding-json-file"></a>

### File del punto di ingresso Terraform
<a name="entry-point-terraform"></a>

Questo è il file di configurazione principale. In questo file, puoi personalizzare e abilitare o disabilitare uno stage. Se disabilitate una fase, questa non elimina o rimuove la fase dalla pipeline. Al contrario, lo stage viene saltato durante l'esecuzione.

```
{
    "build_stage_required" : "true",
    "test_stage_required" : "true",
    "predeploy_stage_required": "true",
    "deploy_stage_required": "true",
    "postdeploy_stage_required": "true",
    "destroy_stage_required": "true",
    "bucket":"tf-state-dpa",                # S3 bucket used for Terraform backend
    "key":"terraform_test.tfstate",         # S3 key to be used
    "region":"us-east-1",       
    "dynamodb_table":"tf-state-dpa"         # DynamoDB Table for Terraform backend
}
```

### CloudFormation file del punto di ingresso
<a name="entry-point-cfn"></a>

Questo è il file di configurazione principale. In questo file, personalizzi le fasi e le abiliti o disabiliti. Se disabilitate una fase, questa non elimina o rimuove la fase dalla pipeline. Al contrario, la pipeline salta la fase durante l'esecuzione.

```
{
    "init_stage_required" : "true",
    "test_stage_required" : "true",
    "createinfra_stage_required": "true",
    "envType" : "cloudformation",
    "stage_required" : "true",
    "cft_s3_bucket" : "pipeline-bucket",               #S3 bucket from the destination account to keep CFT templates
    "stack_name" : "aws-cft-poc",                      #CloudFormation stack name
    "account" : "************",                        #Destination AWS account to deploy stack
    "roleName" : "codestack-poc-cross-account-role",   #Cross-account IAM role name
    "region" : "us-east-1",
    "destroy_stack" : "false"                          #To destroy the provisioned stack, set this value to "true"
}
```