

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

# Fornisci un prodotto Terraform AWS Service Catalog utilizzando un repository di codice
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dott. Rahul Sharad Gaikwad e Tamilselvan P, Amazon Web Services*

## Riepilogo
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [supporta il provisioning self-service con governance per le configurazioni Terraform. HashiCorp ](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Se utilizzi Terraform, puoi utilizzare Service Catalog come strumento unico per organizzare, governare e distribuire le tue configurazioni Terraform su larga scala. AWS È possibile accedere alle funzionalità principali di Service Catalog, tra cui la catalogazione di modelli di infrastruttura come codice (IaC) standardizzati e preapprovati, il controllo degli accessi, il provisioning delle risorse cloud con accesso con privilegi minimi, il controllo delle versioni, la condivisione con migliaia di utenti e il tagging. Account AWS Gli utenti finali, come ingegneri, amministratori di database e data scientist, visualizzano un elenco di prodotti e versioni a cui hanno accesso e possono implementarli con una singola azione.

Questo modello ti aiuta a distribuire AWS le risorse utilizzando il codice Terraform. È possibile accedere al codice Terraform nel GitHub repository tramite Service Catalog. Utilizzando questo approccio, integri i prodotti con i flussi di lavoro Terraform esistenti. Gli amministratori possono creare portafogli Service Catalog e aggiungervi AWS Launch Wizard prodotti utilizzando Terraform.

Di seguito sono riportati i vantaggi di questa soluzione:
+ Grazie alla funzionalità di rollback di Service Catalog, in caso di problemi durante la distribuzione, è possibile ripristinare il prodotto a una versione precedente.
+ È possibile identificare facilmente le differenze tra le versioni del prodotto. Ciò consente di risolvere i problemi durante la distribuzione.
+ È possibile configurare una connessione al repository in Service Catalog, ad esempio a GitHub o GitLab. È possibile apportare modifiche al prodotto direttamente tramite il repository.

Per informazioni sui vantaggi complessivi di AWS Service Catalog, vedere [What is Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Prerequisiti e limitazioni
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS.
+ A GitHub BitBucket, o altro repository che contiene i file di configurazione Terraform in formato ZIP.
+ AWS Serverless Application Model [Interfaccia a riga di comando (AWS SAM CLI), installata.](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)
+ AWS Command Line Interface (AWS CLI), [installato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurato](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Vai, [installato](https://go.dev/doc/install).
+ [Python versione 3.9, installata.](https://www.python.org/downloads/release/python-3913/) AWS SAM CLI richiede questa versione di Python.
+ Autorizzazioni per scrivere ed eseguire AWS Lambda funzioni e autorizzazioni per accedere e gestire i prodotti e i portafogli Service Catalog.

## Architecture
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Diagramma dell'architettura del provisioning di un prodotto Terraform in Service Catalog da un repository di codice\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Quando una configurazione Terraform è pronta, uno sviluppatore crea un file.zip che contiene tutto il codice Terraform. Lo sviluppatore carica il file.zip nell'archivio di codice collegato a Service Catalog.

1. Un amministratore associa il prodotto Terraform a un portafoglio in Service Catalog. L'amministratore crea inoltre un vincolo di avvio che consente agli utenti finali di fornire il prodotto.

1. In Service Catalog, gli utenti finali avviano AWS le risorse utilizzando la configurazione Terraform. Possono scegliere quale versione del prodotto distribuire.

## Tools (Strumenti)
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**Servizi AWS**
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)ti aiuta a gestire centralmente i cataloghi dei servizi IT approvati. AWS Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.

**Altri servizi**
+ [Go](https://go.dev/doc/install) è un linguaggio di programmazione open source supportato da Google.
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Se hai bisogno di configurazioni Terraform di esempio da distribuire tramite Service Catalog, puoi utilizzare le configurazioni nell'Amazon Macie GitHub Organization Setup Using Terraform [repository](https://github.com/aws-samples/aws-macie-customization-terraform-samples). L'uso degli esempi di codice in questo repository non è richiesto.

## Best practice
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ Invece di fornire i valori per le variabili nel file di configurazione Terraform (`terraform.tfvars`), configura i valori delle variabili quando avvii il prodotto tramite Service Catalog.
+ Concedi l'accesso al portafoglio solo a utenti o amministratori specifici.
+ Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le [best practice relative alla [concessione dei privilegi minimi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e alla sicurezza](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) nella documentazione AWS Identity and Access Management (IAM).

## Epiche
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Configura la tua workstation locale
<a name="set-up-your-local-workstation"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| (Facoltativo) Installa Docker. | Se desideri eseguire AWS Lambda le funzioni nel tuo ambiente di sviluppo, installa Docker. Per ulteriori informazioni, consulta la sezione [Installazione del motore Docker](https://docs.docker.com/engine/install/) nella documentazione di Docker. | DevOps ingegnere | 
| Installa il AWS Service Catalog motore per Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingegnere, amministratore AWS | 

### Connect il GitHub repository
<a name="connect-the-github-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una connessione al GitHub repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 

### Crea un prodotto Terraform in Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea il prodotto Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Crea un portfolio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Aggiungi il prodotto Terraform al portafoglio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Creare la policy d'accesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Crea una politica di fiducia personalizzata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Aggiungi un vincolo di lancio al prodotto Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Concedi l'accesso al prodotto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 
| Avvia il prodotto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingegnere | 

### Verifica della distribuzione
<a name="verify-the-deployment"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida la distribuzione. | Esistono due macchine a AWS Step Functions stati per il flusso di lavoro di provisioning del Service Catalog:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Si controllano i registri della macchina a stati per confermare che il prodotto è `ManageProvisionedProductStateMachine` stato fornito.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingegnere | 

### Pulisci l'infrastruttura
<a name="clean-up-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Eliminare i prodotti forniti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps ingegnere | 
| Rimuovi il AWS Service Catalog motore per Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Amministratore AWS | 

## Risorse correlate
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS documentazione**
+ [Iniziare con un prodotto Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Documentazione Terraform**
+ [Installazione di Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Configurazione del backend Terraform](https://developer.hashicorp.com/terraform/language/backend)
+ [Documentazione Terraform Provider AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informazioni aggiuntive
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**Politica di accesso**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/servicecatalog:provisioning": "true"
                }
            }
        },
        {
            "Action": [
                "s3:CreateBucket*",
                "s3:DeleteBucket*",
                "s3:Get*",
                "s3:List*",
                "s3:PutBucketTagging"
            ],
            "Resource": "arn:aws:s3:::*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:ListGroupResources",
                "resource-groups:DeleteGroup",
                "resource-groups:Tag"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

**Policy di trust**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GivePermissionsToServiceCatalog",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_id:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*"
                    ]
                }
            }
        }
    ]
}
```