L’autore ha selezionato il Fondo per il Software Libero e Open Source per ricevere una donazione come parte del programma Scrivi per le Donazioni.
Introduzione
Quando più persone lavorano contemporaneamente sullo stesso progetto Terraform da posizioni diverse, è importante gestire correttamente il codice dell’infrastruttura e lo stato del progetto per evitare errori di sovrascrittura. La soluzione è memorizzare lo stato in remoto invece che localmente. Un sistema remoto è disponibile per tutti i membri del tuo team ed è possibile bloccare lo stato mentre lavorano.
Uno di questi backend remoti è pg
, che memorizza lo stato in un database PostgreSQL. Nel corso di questo tutorial, lo userai con un Database Gestito DigitalOcean per garantire la disponibilità dei dati.
Terraform supporta anche l’offerta cloud ufficiale e gestita da Hashicorp chiamata Terraform Cloud — un’applicazione proprietaria che sincronizza il lavoro del tuo team in un unico posto e offre un’interfaccia utente per la configurazione e la gestione.
In questo tutorial, creerai un’organizzazione in Terraform Cloud a cui connetterai il tuo progetto. Utilizzerai quindi la tua organizzazione per configurare spazi di lavoro e risorse. Archivierai il tuo stato nel cloud gestito in modo che sia sempre disponibile. Configurerai anche il backend pg
con un database PostgreSQL gestito correlato.
Prerequisiti
- A DigitalOcean Personal Access Token, which you can create via the DigitalOcean Control Panel. You can find instructions in the DigitalOcean product documents, How to Create a Personal Access Token.
- Terraform installato sul tuo computer locale. Completa il Passaggio 1 del tutorial Come Utilizzare Terraform con DigitalOcean.
- Se desideri utilizzare un backend
pg
, avrai bisogno di un cluster di database PostgreSQL Gestito creato e accessibile. Per ulteriori informazioni, visita la guida introduttiva. Puoi utilizzare un database separato per questo tutorial. - Se desideri utilizzare il cloud gestito da Hashicorp, avrai bisogno di un account con Terraform Cloud. Puoi crearne uno sulla loro pagina di registrazione.
Nota: Abbiamo testato specificamente questo tutorial utilizzando Terraform 1.1.3
.
Memorizzazione dello stato in un database PostgreSQL gestito
In questa sezione, configurerai un progetto che distribuisce un Droplet e memorizza lo stato in un database PostgreSQL gestito da DigitalOcean utilizzando il provider pg
. Questo provider supporta il blocco dello stato, quindi lo stato non verrà mai sovrascritto da due o più modifiche che avvengono contemporaneamente.
Inizia creando una directory chiamata terraform-team-pg
in cui memorizzerai il progetto:
Naviga al suo interno:
Prima definirai il provider e poi passerai la stringa di connessione per il database e il modulo digitalocean
. Crea e apri provider.tf
per modificarlo:
Aggiungi le seguenti righe:
Qui richiedi il provider digitalocean
e definisci il backend pg
, che accetta una stringa di connessione. Successivamente, definisci la variabile do_token
e la passi all’istanza del provider digitalocean
.
Ricorda di sostituire your_db_connection_string
con la stringa di connessione per il tuo database gestito dal tuo Pannello di controllo DigitalOcean, che puoi trovare premendo Azioni , selezionando Dettagli connessione , e scegliendo Stringa di connessione dal menu a discesa. Quindi salva e chiudi il file
Avviso: Per continuare, nelle Impostazioni del tuo database , assicurati di avere l’indirizzo IP della macchina da cui stai eseguendo Terraform su una lista di autorizzazioni.
Inizializza il progetto eseguendo:
L’output sarà simile al seguente:
OutputInitializing the backend...
Successfully configured the backend "pg"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.16.0...
- Installed digitalocean/digitalocean v2.16.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
...
Terraform ha inizializzato correttamente il backend, il che significa che si è connesso al database.
Successivamente, definisci il Droplet in un file chiamato droplets.tf
. Crea e aprilo per modificarlo eseguendo:
Aggiungi le seguenti righe:
Questo codice distribuirà un Droplet chiamato web-1
nella regione fra1
, eseguendo Ubuntu 20.04 su 1 GB di RAM e un core CPU. Questo è tutto ciò che devi definire, quindi salva e chiudi il file.
Avrai bisogno del tuo token DigitalOcean in una variabile di ambiente. Creane uno, sostituendo your_do_token
con il tuo token:
Per verificare che la connessione al database funzioni, prova a pianificare la configurazione:
L’output sarà simile al seguente:
Terraform non ha segnalato errori e ha pianificato le azioni come al solito. Si è connesso con successo al tuo database PostgreSQL e ha memorizzato il suo stato. Ora più persone possono lavorare contemporaneamente su questo progetto mantenendo la sincronizzazione.
Memorizzazione dello stato in Terraform Cloud
In questo passaggio, creerai un progetto che distribuisce un Droplet e utilizza Terraform Cloud come suo backend con il provider cloud
. Questo comporta la creazione dell’organizzazione e del spazio di lavoro in Terraform Cloud, la scrittura del codice infrastrutturale e la sua pianificazione.
Creazione di un’Organizzazione
Terraform Cloud ti permette di avere più organizzazioni, che contengono i tuoi spazi di lavoro e moduli. Le organizzazioni a pagamento possono avere più team con funzionalità di controllo dei livelli di accesso, mentre il piano gratuito che userai fornisce solo un team per organizzazione. Puoi invitare membri del team a unirsi all’organizzazione.
Inizia dirigendoti a Terraform Cloud e accedi. Se non hai ancora creato un’organizzazione, ti verrà chiesto di farlo.
Inserisci un nome per l’organizzazione a tua scelta e ricorda che deve essere unico tra tutti i nomi in Terraform Cloud. Riceverai un errore se il nome esiste già. L’indirizzo email dovrebbe già essere compilato con l’indirizzo del tuo account. Una volta finito, clicca sul Crea organizzazione per continuare.
Ti chiederà quindi di selezionare il tipo di spazio di lavoro.
Dato che interagirai con Terraform Cloud tramite la riga di comando, clicca sull’opzione Flusso di lavoro basato su CLI. Poi, inserisci un nome per il tuo spazio di lavoro e lascia la descrizione vuota.
Inserisci un nome per lo spazio di lavoro a tua scelta (lo chiameremo sammy
), poi clicca su Crea spazio di lavoro per finalizzare il processo di creazione dell’organizzazione. Ti indirizzerà quindi a una pagina delle impostazioni dello spazio di lavoro.
Hai ora creato il tuo spazio di lavoro, che fa parte della tua organizzazione. Poiché lo hai appena creato, il tuo spazio di lavoro non contiene codice infrastrutturale. Nella parte centrale dell’interfaccia, Terraform Cloud ti fornisce istruzioni di avvio per connetterti a questo spazio di lavoro.
Prima di connetterti ad esso, dovrai configurare la versione di Terraform che il cloud utilizzerà per eseguire i tuoi comandi. Per impostarlo, clicca sul menu a discesa Impostazioni accanto a Panoramica e seleziona Generale dalla lista. Quando la pagina si apre, vai al menu a discesa Versione di Terraform e seleziona 1.1.3
(per questo tutorial).
Quindi, clicca sul pulsante Salva impostazioni per salvare le modifiche.
Per connettere il tuo progetto alla tua organizzazione e spazio di lavoro, dovrai prima effettuare l’accesso tramite la riga di comando. Prima di eseguire il comando, vai alla pagina dei token per creare un nuovo token di accesso per il tuo server, che fornirà l’accesso al tuo account. Riceverai un prompt per creare un token API.
La descrizione predefinita va bene, quindi clicca su Crea token API per crearlo.
Fai clic sul valore del token o sull’icona accanto ad esso per copiare il token API. Utilizzerai questo token per collegare il tuo progetto al tuo account Terraform Cloud.
Nella riga di comando, esegui il seguente comando per effettuare l’accesso:
Riceverai il seguente output:
OutputTerraform will request an API token for app.terraform.io using your browser.
If login is successful, Terraform will store the token in plain text in
the following file for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Do you want to proceed?
Only 'yes' will be accepted to confirm.
...
Terraform ti avvisa che il token verrà memorizzato localmente. Inserisci yes
quando ti viene richiesto:
Output---------------------------------------------------------------------------------
Open the following URL to access the tokens page for app.terraform.io:
https://app.terraform.io/app/settings/tokens?source=terraform-login
---------------------------------------------------------------------------------
Generate a token using your browser, and copy-paste it into this prompt.
Terraform will store the token in plain text in the following file
for use by subsequent commands:
/home/sammy/.terraform.d/credentials.tfrc.json
Token for app.terraform.io:
Enter a value:
Incolla il token che hai copiato e conferma con ENTER
. Terraform mostrerà un messaggio di successo:
Output...
-
----- -
--------- --
--------- - -----
--------- ------ -------
------- --------- ----------
---- ---------- ----------
-- ---------- ----------
Welcome to Terraform Cloud! - ---------- -------
--- ----- ---
Documentation: terraform.io/docs/cloud -------- -
----------
----------
---------
-----
-
New to TFC? Follow these steps to instantly apply an example configuration:
$ git clone https://github.com/hashicorp/tfc-getting-started.git
$ cd tfc-getting-started
$ scripts/setup.sh
Hai configurato la tua installazione locale di Terraform per accedere al tuo account Terraform Cloud. Ora creerai un progetto che distribuisce un Droplet e lo configura per utilizzare Terraform Cloud per memorizzare il suo stato.
Impostare il Progetto
Innanzitutto, crea una directory chiamata terraform-team-cloud
dove memorizzerai il progetto:
Naviga fino ad essa:
Per configurare il tuo progetto, avrai bisogno di:
- definire e configurare il provider
cloud
, che interagisce con Terraform Cloud. - richiedere il provider
digitalocean
per poter distribuire risorse DigitalOcean. - definire e inizializzare le variabili che userai.
Memorizzerai le specifiche dei requisiti del provider e del modulo in un file chiamato provider.tf
. Crealo e aprilo per la modifica eseguendo:
Aggiungi le seguenti righe:
Qui, specifica prima la tua versione di Terraform. Poi, specifica il provider digitalocean
come richiesto e impostalo sul backend cloud
. Per organization
e workspaces.name
, sostituisci i valori evidenziati con i nomi che hai specificato.
Successivamente, definisci una variabile chiamata do_token
, che passi al provider digitalocean
creato dopo di essa. Hai ora configurato il tuo progetto per connettersi alla tua organizzazione, quindi salva e chiudi il file.
Inizializza il tuo progetto con il seguente comando:
Il risultato sarà simile a questo:
OutputInitializing Terraform Cloud...
Initializing provider plugins...
- Finding digitalocean/digitalocean versions matching "~> 2.0"...
- Installing digitalocean/digitalocean v2.18.0...
- Installed digitalocean/digitalocean v2.18.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform Cloud has been successfully initialized!
...
Poiché la definizione del Droplet è la stessa del progetto precedente, puoi copiarla eseguendo:
Infine, definirai i valori delle variabili. Il fornitore cloud
non supporta il passaggio dei valori alle variabili tramite la riga di comando, quindi dovrai passarli utilizzando file di variabili o impostarli in Terraform Cloud. Terraform legge i valori delle variabili da file con un nome che termina in .auto.tfvars
. Crea e apri un file chiamato vars.auto.tfvars
per la modifica, in cui definirai la variabile do_token
:
Aggiungi la seguente riga, sostituendo your_do_token
con il tuo token API di DigitalOcean:
Quando hai finito, salva e chiudi il file. Terraform leggerà automaticamente questo file durante la pianificazione delle azioni.
Il tuo progetto è ora completo e configurato per utilizzare Terraform Cloud come backend. Ora pianificherai e applicherai il Droplet e verificherai come ciò si riflette nell’app Cloud.
Applicare la configurazione
Nel Passaggio 1 di questo tutorial, hai pianificato un progetto utilizzando il comando terraform plan
. Poiché il progetto di Terraform Cloud ha le stesse risorse definite, puoi saltare direttamente l’applicazione e applicarlo direttamente a Terraform Cloud.
Applica il progetto eseguendo il seguente comando per aggiornarlo:
Noterai che l’output è diverso quando si utilizza locale
come backend:
Quando si utilizza il backend cloud
, Terraform non pianifica o applica la configurazione dalla macchina locale. Invece, delega questi compiti a Terraform Cloud e trasmette solo l’output alla console in tempo reale.
Inserisci sì
quando richiesto. Terraform completerà presto l’applicazione della configurazione e potrai navigare nello spazio di lavoro sul sito web di Terraform Cloud per vedere che è stata applicata una nuova azione.
È ora possibile distruggere le risorse distribuite eseguendo quanto segue:
In questa sezione, hai collegato il tuo progetto a Terraform Cloud, rendendo lo stato del tuo progetto accessibile al tuo team in un luogo centrale. Ciò consente di condividere e sincronizzare lo stato per tutti coloro che hanno accesso al progetto, garantendo un’esperienza più fluida.
Conclusione
In questo tutorial, hai utilizzato due diversi back-end: Terraform Cloud, che è l’offerta cloud gestita da Hashicorp per Terraform; e pg
, che ti consente di memorizzare lo stato del progetto in un database PostgreSQL. Hai utilizzato un database PostgreSQL gestito da DigitalOcean, che puoi provisionare e utilizzare con Terraform in pochi minuti.
Per ulteriori informazioni sulle funzionalità di Terraform Cloud, visita la documentazione ufficiale.
Questo tutorial fa parte della serie Come Gestire l’Infrastruttura con Terraform. La serie copre vari argomenti di Terraform, dall’installazione di Terraform per la prima volta alla gestione di progetti complessi.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-terraform-within-your-team