Gestione dell'infrastruttura come codice con Terraform, Cloud Build e GitOps

Questo tutorial spiega come gestire l'infrastruttura come codice con Terraform e Cloud Build utilizzando la popolare metodologia GitOps. Il termine GitOps è stato coniato per la prima volta da Weaveworks e il suo concetto chiave è l'utilizzo di un repository Git per archiviare lo stato dell'ambiente che desideri. Terraform è uno strumento HashiCorp che consente di creare, modificare e migliorare in modo prevedibile l'infrastruttura cloud utilizzando il codice. In questo tutorial utilizzi Cloud Build (un Google Cloud servizio di integrazione continua) per applicare automaticamente i manifest Terraform al tuo ambiente.

Questo tutorial è rivolto a sviluppatori e operatori che cercano una strategia elegante per apportare modifiche prevedibili all'infrastruttura. L'articolo presuppone che tu abbia dimestichezza con Google Cloud, Linux e GitHub.

I report State of DevOps hanno identificato le funzionalità che migliorano le prestazioni di distribuzione del software. Questo tutorial ti aiuterà a utilizzare le seguenti funzionalità:

Architettura

Per mostrare in che modo questo tutorial applica le pratiche GitOps per la gestione delle esecuzioni di Terraform, considera il seguente diagramma dell'architettura. Tieni presente che utilizza i rami GitHub dev e prod per rappresentare gli ambienti effettivi. Questi ambienti sono definiti dalle reti Virtual Private Cloud (VPC) dev e prod, rispettivamente, in un progetto Google Cloud .

Infrastruttura con ambienti di sviluppo e produzione.

La procedura inizia quando esegui il push del codice Terraform sul ramo dev o prod. In questo scenario, Cloud Build attiva e poi applica i manifest Terraform per raggiungere lo stato desiderato nel rispettivo ambiente. D'altra parte, quando esegui il push del codice Terraform su un altro ramo, ad esempio su un ramo delle funzionalità, Cloud Build viene eseguito per eseguire terraform plan, ma non viene applicato nulla a nessun ambiente.

Idealmente, gli sviluppatori o gli operatori devono presentare proposte di infrastruttura ai rami non protetti e quindi inviarle tramite richieste pull. L'app GitHub di Cloud Build, descritta più avanti in questo tutorial, attiva automaticamente i job di build e collega i report terraform plan a queste richieste di pull. In questo modo, puoi discutere e rivedere le potenziali modifiche con i collaboratori e aggiungere commit di follow-up prima che le modifiche vengano unite al ramo di base.

Se non vengono sollevati problemi, devi prima unire le modifiche al ramo dev. Questa unione attiva un deployment dell'infrastruttura nell'ambiente dev, consentendoti di testarlo. Dopo aver eseguito i test e aver verificato il deployment, devi unire il ramo dev al ramo prod per attivare l'installazione dell'infrastruttura nell'ambiente di produzione.

Obiettivi

  • Configura il repository GitHub.
  • Configura Terraform in modo da archiviare lo stato in un bucket Cloud Storage.
  • Concedi le autorizzazioni al account di servizio Cloud Build.
  • Connetti Cloud Build al tuo repository GitHub.
  • Modifica la configurazione dell'ambiente in un ramo della funzionalità.
  • Promuovi le modifiche nell'ambiente di sviluppo.
  • Promuovi le modifiche nell'ambiente di produzione.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prerequisiti

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Recupera l'ID del progetto appena selezionato:
    gcloud config get-value project
    Se questo comando non restituisce l'ID progetto, configura la shell locale in modo che utilizzi il tuo progetto. Sostituisci PROJECT_ID con l'ID progetto.
    gcloud config set project PROJECT_ID
  4. Abilita le API richieste:
    gcloud services enable cloudbuild.googleapis.com compute.googleapis.com
    Il completamento di questo passaggio potrebbe richiedere alcuni minuti.
  5. Configura le tue credenziali Git con il tuo nome e indirizzo email:
    git config --global user.email "YOUR_EMAIL_ADDRESS"
    git config --global user.name "YOUR_NAME"
    
    Git utilizza queste informazioni per identificarti come autore dei commit che crei nella shell locale.

Configurazione del repository GitHub

In questo tutorial utilizzi un singolo repository Git per definire la tua infrastruttura cloud. Orchestri questa infrastruttura con rami diversi corrispondenti a ambienti diversi:

  • Il ramo dev contiene le ultime modifiche applicate all'ambiente di sviluppo.
  • Il ramo prod contiene le ultime modifiche applicate all'ambiente di produzione.

Con questa infrastruttura, puoi sempre fare riferimento al repository per sapere quale configurazione è prevista in ogni ambiente e per proporre nuove modifiche unendole prima all'ambiente dev. Quindi promuovi le modifiche unendo il ramo dev al ramo prod successivo.

Per iniziare, esegui il fork del repository solutions-terraform-cloudbuild-gitops.