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 .
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.
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
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Recupera l'ID del progetto appena selezionato:
Se questo comando non restituisce l'ID progetto, configura la shell locale in modo che utilizzi il tuo progetto. Sostituiscigcloud config get-value project
PROJECT_IDcon l'ID progetto.gcloud config set project PROJECT_ID
- Abilita le API richieste:
Il completamento di questo passaggio potrebbe richiedere alcuni minuti.gcloud services enable cloudbuild.googleapis.com compute.googleapis.com
- Configura le tue credenziali Git con il tuo nome e indirizzo email:
Git utilizza queste informazioni per identificarti come autore dei commit che crei nella shell locale.git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_NAME"
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
devcontiene le ultime modifiche applicate all'ambiente di sviluppo. - Il ramo
prodcontiene 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.