Crea un framework di orchestrazione delle risorse basato su API utilizzando Actions e Terragrunt GitHub - Prontuario AWS

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

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

Riepilogo

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

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. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.

Architettura

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.

Il diagramma dell'architettura mostra le seguenti azioni:

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

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

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

Strumenti

Servizi AWS

  • Amazon DynamoDB è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.

  • AWS Identity and Access Management (IAM) 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) è 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) 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 è 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 è 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 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.

Best practice

  • 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 e alla sicurezza nella documentazione IAM.

Epiche

AttivitàDescrizioneCompetenze richieste

Inizializza il GitHub repository.

Per inizializzare il GitHub repository, utilizzare i seguenti passaggi:

  1. Crea un nuovo GitHub repository per ospitare il codice della pipeline.

  2. Importa i workflow-trigger.yml file deployment.yml and che si trovano nella cartella.github/workflows del repository di origine.

DevOps ingegnere

Configura i ruoli e le autorizzazioni IAM.

Per configurare i ruoli e le autorizzazioni IAM, utilizza i seguenti passaggi:

  1. Crea un ruolo IAM con le relazioni di fiducia necessarie affinché GitHub Actions si connetta alle azioni AWS utilizzando un provider di identità (IdP) OpenID Connect (OIDC).

  2. Associa le autorizzazioni richieste al ruolo IAM per creare il backend e le risorse desiderate. Per ulteriori informazioni, consulta un esempio di policy per creare un VPC con Amazon VPC insieme al bucket di backend Amazon S3 e alla tabella DynamoDB.

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. GitHub Configura le seguenti variabili:

  • Segreti del repository

  • Variabili del repository

    • aws_role— Il ruolo IAM Amazon Resource Name (ARN) con le autorizzazioni appropriate per distribuire le risorse richieste e collegare GitHub le azioni alle azioni in AWS

DevOps ingegnere

Crea la struttura del repository.

Per creare la struttura del repository, attenersi alla seguente procedura:

  1. Crea una nuova cartella nel main ramo per archiviare il terragrunt.hcl file, nonché gli output e i log delle modifiche dopo la creazione delle risorse.

  2. Assegna un nome alla cartella in lettere minuscole in base al tipo di risorsa a cui desideri effettuare il provisioning tramite essa. La cartella viene utilizzata così com'è più avanti nel payload. Per ulteriori informazioni, consulta una struttura di esempio per Amazon S3 e Amazon VPC nel repository.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Esegui la pipeline usando curl.

Per eseguire la pipeline utilizzando curl, utilizzate i seguenti passaggi:

  1. Crea un file payload.json nella tua directory locale. Segui la struttura definita per il file payload e stringila prima di inviare la richiesta. Per ulteriori informazioni, consulta i payload di esempio nel repository.

  2. Inviate la richiesta sul vostro terminale utilizzando l' GitHub API, come illustrato nell'esempio seguente:

    curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -d @payload.json \ https://api.github.com/repos/OWNER/REPO/actions/workflows/workflow-trigger.yml/dispatches

    Nell'esempio, fornisci i tuoi valori per quanto segue:

    • YOUR_GITHUB_TOKENcon il tuo token di accesso GitHub personale

    • OWNERcon il nome del proprietario del repository

    • REPOcon il nome del repository

Per ulteriori informazioni sul processo di esecuzione della pipeline, vedere Informazioni aggiuntive.

DevOps ingegnere

Convalida i risultati dell'esecuzione della pipeline

Per convalidare i risultati, utilizzate i seguenti passaggi:

  1. Monitora l'esecuzione del flusso di lavoro GitHub Actions nella scheda Azioni del tuo repository.

  2. Dopo la corretta esecuzione dei flussi di lavoro, verifica la creazione delle risorse utilizzando AWS Management Console quanto segue:

    1. Per Amazon VPC:

      • Accedi al servizio Amazon VPC nel campo specificato. Regione AWS

      • Verifica la presenza di un nuovo VPC con tag che corrispondano ai parametri della richiesta.

      • Verifica il blocco CIDR e altre configurazioni.

    2. Per Amazon S3:

      • Passa ai bucket Amazon S3.

      • Nei bucket generici, verifica la presenza di un nuovo bucket che corrisponda ai parametri della richiesta.

      • Verifica il nome del bucket S3 e altre configurazioni.

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
AttivitàDescrizioneCompetenze richieste

Invia una richiesta di pulizia.

Per eliminare le risorse che non sono più necessarie, procedi nel seguente modo:

  1. Inviate la richiesta di eliminazione utilizzando lo stesso endpoint API, ma modificate il payload come segue:

    • Passa RequestType a delete in. RequestParameters

    • Mantieni tutti gli altri parametri identici alla create richiesta.

  2. Monitora il processo di eliminazione in GitHub Azioni.

  3. Dopo il completamento del flusso di lavoro, verifica che il changelog.json file all'interno della cartella delle risorse mostri lo stato dideleted.

  4. Verifica la rimozione delle risorse utilizzando AWS Management Console.

DevOps ingegnere

Risorse correlate

AWS Blog

Servizio AWS documentazione

GitHub resources

Informazioni aggiuntive

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

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

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

  4. 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 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" } } ] } }

RequestParametersvengono 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

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