

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 un framework di orchestrazione delle risorse basato su API utilizzando Actions e Terragrunt GitHub
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande e Akash Kumar, Amazon Web Services*

## Riepilogo
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Questo modello sfrutta i flussi di lavoro di GitHub Actions per automatizzare l'approvvigionamento delle risorse tramite payload JSON standardizzati, eliminando la necessità di una configurazione manuale. Questa pipeline automatizzata gestisce l'intero ciclo di vita dell'implementazione e può integrarsi perfettamente con vari sistemi di frontend, dai componenti dell'interfaccia utente personalizzati a. ServiceNow La flessibilità della soluzione consente agli utenti di interagire con il sistema tramite le loro interfacce preferite, mantenendo processi standardizzati.

L'architettura configurabile della pipeline può essere adattata per soddisfare diversi requisiti organizzativi. L'implementazione di esempio si concentra sul provisioning di Amazon Virtual Private Cloud (Amazon VPC) e Amazon Simple Storage Service (Amazon S3). Il modello affronta efficacemente le sfide comuni di gestione delle risorse cloud standardizzando le richieste all'interno dell'organizzazione e fornendo punti di integrazione coerenti. Questo approccio semplifica la richiesta e la gestione delle risorse da parte dei team, garantendo al contempo la standardizzazione.

## Prerequisiti e limitazioni
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ Un GitHub account attivo con accesso al repository configurato

**Limitazioni**
+ Le nuove risorse richiedono l'aggiunta manuale di `terragrunt.hcl` file alla configurazione del repository.
+ Alcune Servizi AWS non sono disponibili in tutte Regioni AWS. Per la disponibilità regionale, vedi [AWS Servizi per regione](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Per endpoint specifici, consulta [Endpoints and quotas del servizio](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e scegli il link relativo al servizio.

## Architecture
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

Il diagramma seguente mostra i componenti e il flusso di lavoro di questo modello.

![Flusso di lavoro per automatizzare l'approvvigionamento delle risorse con GitHub Actions e Terraform.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Il diagramma dell'architettura mostra le seguenti azioni:

1. L'utente invia un payload JSON a GitHub Actions, attivando la pipeline di automazione.

1. La pipeline GitHub Actions recupera il codice delle risorse richiesto dai repository Terragrunt e Terraform, in base alle specifiche del payload.

1. La pipeline assume il ruolo (IAM) appropriato utilizzando l'ID specificato. AWS Identity and Access Management Account AWS Quindi, la pipeline distribuisce le risorse sulla destinazione Account AWS e gestisce lo stato di Terraform utilizzando il bucket Amazon S3 specifico dell'account e la tabella Amazon DynamoDB.

Ciascuno Account AWS contiene ruoli IAM per un accesso sicuro, un bucket Amazon S3 per lo storage dello stato Terraform e una tabella DynamoDB per il blocco dello stato. Questo design consente la distribuzione controllata e automatizzata delle risorse su tutto il territorio. Account AWS Il processo di distribuzione mantiene la corretta gestione dello stato e il controllo degli accessi tramite bucket Amazon S3 dedicati e ruoli IAM in ogni account.

## Tools (Strumenti)
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Servizi AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [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 AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

**Altri strumenti**
+ [GitHub Actions](https://docs.github.com/en/actions) è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.
+ [Terraform](https://www.terraform.io/) è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.
+ [Terragrunt è uno strumento di orchestrazione che estende](https://terragrunt.gruntwork.io/docs/getting-started/overview/) sia le funzionalità di Terraform che quelle di Terraform. OpenTofu Gestisce il modo in cui vengono applicati i modelli di infrastruttura generici, semplificando la scalabilità e la manutenzione di grandi infrastrutture.

**Archivio di codice**

Il codice per questo modello è disponibile nel repository GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Best practice
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Archivia AWS le credenziali e i dati sensibili utilizzando i segreti del GitHub repository per un accesso sicuro.
+ Configura il provider OpenID Connect (OIDC) for GitHub Actions per assumere il ruolo IAM, evitando credenziali statiche.
+ 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 nella documentazione](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) IAM.

## Epiche
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Crea e configura il repository
<a name="create-and-configure-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Inizializza il GitHub repository. | Per inizializzare il GitHub repository, utilizzare i seguenti passaggi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Configura i ruoli e le autorizzazioni IAM. | Per configurare i ruoli e le autorizzazioni IAM, utilizza i seguenti passaggi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Imposta GitHub segreti e variabili. | Per istruzioni su come impostare i segreti e le variabili del repository nel GitHub repository, consulta [Creazione di variabili di configurazione per un repository nella documentazione](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository). GitHub Configura le seguenti variabili:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 
| Crea la struttura del repository. | Per creare la struttura del repository, attenersi alla seguente procedura:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 

### Attiva la pipeline e convalida i risultati
<a name="trigger-the-pipeline-and-validate-results"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esegui la pipeline usando curl.  | Per eseguire la pipeline utilizzando [curl](https://curl.se/), utilizzate i seguenti passaggi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Per ulteriori informazioni sul processo di esecuzione della pipeline, vedere Informazioni [aggiuntive](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingegnere | 
| Convalida i risultati dell'esecuzione della pipeline | Per convalidare i risultati, utilizzate i seguenti passaggi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Puoi anche verificare in modo incrociato le risorse create utilizzando il `output.json` file creato nel repository che si trova all'interno della stessa risorsa del file. `terragrunt.hcl` | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia una richiesta di pulizia. | Per eliminare le risorse che non sono più necessarie, procedi nel seguente modo:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingegnere | 

## Risorse correlate
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blog**
+ [Usa i ruoli IAM per connettere GitHub le azioni alle azioni in AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Servizio AWS documentazione**
+ [creazione di ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Monitoraggio dei file di CloudTrail registro con Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Best practice di sicurezza per Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Crea un evento di invio del repository](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Creazione di webhook](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implementa forti controlli di accesso sul repository GitHub ](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Verifica regolarmente l'accesso al repository](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Controlli di sicurezza in corso CI/CD ](https://github.com/marketplace/actions/checkov-github-action)
+ [Utilizza l'autenticazione a più fattori per gli account GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informazioni aggiuntive
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Processo di esecuzione della pipeline**

Di seguito sono riportati i passaggi dell'esecuzione della pipeline:

1. **Convalida il formato del payload JSON**: assicura che la configurazione JSON in entrata sia strutturata correttamente e contenga tutti i parametri richiesti

1. **Presuppone il ruolo IAM specificato: autentica e assume il ruolo IAM** richiesto per le operazioni AWS 

1. **Scarica il codice Terraform e Terragrunt richiesto: recupera la versione specificata del codice risorsa** e delle dipendenze

1. **Esegue la distribuzione delle risorse**: applica la configurazione per distribuire o aggiornare le risorse nell'ambiente di destinazione AWS 

**Payload di esempio utilizzato per la creazione di VPC**

Di seguito è riportato un esempio di codice per la creazione di bucket di stato del backend Terraform:

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Di seguito è riportato un esempio di payload per la creazione di un VPC con Amazon VPC, `vpc_cidr` in cui definisce le specifiche del [blocco CIDR per il](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Il bucket di stato Terraform è mappato su una variabile definita nei file. `terraform` Il `ref` parametro contiene il nome del ramo del codice da eseguire.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

`RequestParameters`vengono utilizzati per tenere traccia dello stato della richiesta nella sezione pipeline e `tfstate` vengono creati sulla base di queste informazioni. I seguenti parametri contengono metadati e informazioni di controllo:
+ `RequestId`— Identificatore univoco per la richiesta
+ `RequestType`— Tipo di operazione (creazione, aggiornamento o eliminazione)
+ `ResourceType`— Tipo di risorsa da fornire
+ `AccountId`— Obiettivo Account AWS di implementazione
+ `AccountAlias`— Nome descrittivo per Account AWS
+ `RegionId`— Regione AWS per la distribuzione delle risorse
+ `ApplicationName`— Nome dell'applicazione
+ `DivisionName`— Divisione organizzativa
+ `EnvironmentId`— Ambiente (ad esempio, dev e prod)
+ `Suffix`— Identificatore aggiuntivo per le risorse

`ResourceParameters`contengono una configurazione specifica della risorsa che si associa alle variabili definite nei file Terraform. Tutte le variabili personalizzate che devono essere passate ai moduli Terraform devono essere incluse in. `ResourceParameters` Il parametro `vpc_cidr` è obbligatorio per Amazon VPC.