Articles

Migrate State to Terraform Cloud

Posted by admin

Come utente corrente della CLI Terraform, sei responsabile del mantenimento di un file di stato come fonte di verità per la tua infrastruttura cloud. È possibile migrare il file di stato locale a Terraform Cloud senza interrompere o ricreare l’infrastruttura esistente.

Attenzione: quando si carica un file di stato su Terraform Cloud utilizzando i passaggi di questo tutorial, utilizzare sempre la stessa versione della CLI Terraform utilizzata per creare le risorse. Utilizzando una versione più recente di Terraform può aggiornare il file di stato e causare il danneggiamento del file di stato.

“Prerequisiti

Questo tutorial presuppone che si abbia il seguente:

  • Il Terraforma CLI installato in locale
  • Un Terraforma account Cloud

Nota: Poiché i remote backend non è supportato nella versione precedente di Terraforma, è necessario utilizzare 0.11.13 o superiore per poter migrare il vostro stato di Terraforma Cloud. I frammenti in questo tutorial usano la sintassi 0.12.

Se non hai Terraform installato localmente, puoi completare questo tutorial in un laboratorio interattivo dal tuo browser web. Lanciala qui.

“Crea stato

Inizia clonando questo repository GitHub.

$ git clone https://github.com/hashicorp/learn-state-migration

Copia

Quindi, cambia nella directory.

$ cd learn-state-migration

Copia

Rivedi il file main.tf nella directory di lavoro per ottenere una panoramica delle risorse che stai per creare. Questa configurazione utilizza la risorsa random_pet per generare e generare un nome pet casuale con un determinato numero di parole. La lunghezza del nome è determinata dal valore della variabile name_length, il cui valore predefinito è 3.

In una configurazione del mondo reale è possibile disporre di variabili aggiuntive come le credenziali della piattaforma cloud definite in un file .tfvars. Spiegheremo come impostare questi valori nell’area di lavoro Terraform Cloud più avanti in questo tutorial, dopo aver migrato il file di stato.

## Terraform configurationterraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14"}variable "name_length" { description = "The number of words in the pet name" default = "3"}resource "random_pet" "pet_name" { length = var.name_length separator = "-"}output "pet_name" { value = random_pet.pet_name.id}

Copia

Inizializza la directory.

$ terraform init

Copia

Dopo l’inizializzazione di Terraform, applica la configurazione e approva l’esecuzione digitando “sì” al prompt.

$ terraform apply

Copia

Terraform produrrà un nome di animale generato in modo casuale di tre parole.

“Imposta il backend remoto

Ora che hai un file di stato locale, devi creare un blocco di codice backend nella tua configurazione. I backend dicono a Terraform dove caricare e salvare il suo file di stato.

Terraform utilizza il backend locale per impostazione predefinita se non si definisce esplicitamente un blocco di codice backend nella configurazione. Il backend locale salva il tuo stato come un file terraform.tfstatenella directory in cui esegui terraform apply. Per migrare i file di stato in Terraform Cloud, definire un backend remote nella configurazione aggiungendo un nuovo blocco di codice all’inizio del file main.tf.

terraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14" backend "remote" { hostname = "app.terraform.io" organization = "<YOUR-ORG-NAME>" workspaces { name = "state-migration" } }}

Copia

Sostituire i valori degli attributi organization e workspaces con il nome dell’organizzazione Terraform Cloud e il nome dell’area di lavoro desiderata. Mentre l’organizzazione definita nella stanza di backend deve già esistere, l’area di lavoro non deve; Terraform Cloud la creerà se necessario. Se si sceglie di utilizzare un’area di lavoro già esistente, l’area di lavoro non deve avere stati esistenti.

Nota: se si ha familiarità con l’esecuzione di Terraform utilizzando la CLI, è possibile che si siano utilizzate aree di lavoro Terraform. Le aree di lavoro Terraform Cloud si comportano in modo diverso rispetto alle aree di lavoro Terraform CLI. Le aree di lavoro CLI Terraform consentono l’esistenza di più file di stato all’interno di una singola directory, consentendo di utilizzare una configurazione per più ambienti. Le aree di lavoro Terraform Cloud contengono tutto il necessario per gestire un determinato set di infrastrutture e funzionano come directory di lavoro separate.

“Autenticazione con Terraform Cloud

Dopo aver definito il backend, è necessario autenticarsi con Terraform Cloud per procedere con l’inizializzazione. Per autenticarsi con Terraform Cloud, eseguire il sottocomando terraform login e seguire le istruzioni per accedere.

Nota: se si utilizza una versione di Terraform precedente alla 0.12.21, il comando terraform login non è disponibile. Impostare invece un file di configurazione CLI per l’autenticazione.

$ terraform loginTerraform will request an API token for app.terraform.io using your browser.If login is successful, Terraform will store the token in plain text inthe following file for use by subsequent commands: /Users/username/.terraform.d/credentials.tfrc.jsonDo you want to proceed? Only 'yes' will be accepted to confirm. Enter a value:

Copia

Rispondi al prompt di conferma con un yes.

Per istruzioni più dettagliate sull’accesso, vedere il tutorial di accesso.

“Migra il file di stato

Una volta autenticato il backend remote, sei pronto per migrare il file di stato locale su Terraform Cloud. Per iniziare la migrazione, reinizializzare. Ciò fa sì che Terraform riconosca la configurazione del backend modificata.

$ terraform initInitializing the backend...Do you want to copy existing state to the new backend? Pre-existing state was found while migrating the previous "local" backend to the newly configured "remote" backend. No existing state was found in the newly configured "remote" backend. Do you want to copy this state to the new "remote" backend? Enter "yes" to copy and "no" to start with an empty state. Enter a value:

Copia

Durante la reinizializzazione, Terraform presenta un prompt che dice che copierà il file di stato nel nuovo backend. Immettere yes e Terraform migrerà lo stato dal computer locale a Terraform Cloud.

“Configura l’area di lavoro Terraform Cloud

Dopo aver migrato lo stato a Terraform Cloud, accedi all’interfaccia utente Web Terraform Cloud, trova il nome dell’area di lavoro come definito nella configurazione del backend e fai clic su di esso. Passare alla scheda “Stati” dell’area di lavoro e vedere la prima azione all’interno dell’area di lavoro.

Una vista della scheda "Stati" nell

Ricorda che la tua configurazione ha una variabile che devi aggiungere al newworkspace. Fare clic sulla scheda “Variabili” nell’area di lavoro e quindi su “Aggiungi variabile”.Immettere il nome della variabile, name_length, come chiave. Quindi immettere un newvalue, 5, e salvare la variabile.

Scheda Variabili di Terraform Cloud workspace con aggiunta di una variabile

Per le configurazioni reali, aggiungere all’area di lavoro anche le credenziali di cloud platform e qualsiasi altra variabile di configurazione.

“Avviare un’esecuzione nella nuova area di lavoro

Dopo aver verificato che lo stato è stato migrato nell’area di lavoro Terraform Cloud, rimuovere il file di stato locale.

$ rm terraform.tfstate

Copia

Applica una nuova esecuzione.

$ terraform apply

Copia

Terraform trasmetterà i log da Terraform Cloud e fornirà un collegamento all’esecuzione nell’interfaccia utente Terraform Cloud. Si imposta un nuovo valore per la variabile name_length, quindi la risorsa verrà sostituita con una corrispondente ai nuovi parametri.

 Immagine di una conferma in attesa di esecuzione, il registro indica che la risorsa verrà sostituita

“Passi successivi

Distruggi le risorse create per questo tutorial facendo prima clic sull’opzione”Impostazioni” nell’area di lavoro Terraform Cloud, selezionando “Distruzione e eliminazione”, assicurando che la casella di controllo “Consenti piani di distruzione” sia selezionata e quindi selezionando “Coda distruggi piano”.

Dopo che le risorse sono state distrutte, tornare alla pagina “Distruzione e eliminazione” e fare clic su “Elimina da Terraform Cloud” per eliminare l’area di lavoro.

In questo tutorial, è stato migrato un file di stato dal computer locale a un’area di lavoro Terraform Cloud. Per informazioni su come migrare i file di stato di più aree di lavoro locali o limitare l’accesso all’area di lavoro a un determinato team, consultare la seguente documentazione.

  • Migrazione dello stato da più aree di lavoro locali
  • Gestione dell’accesso all’area di lavoro

Se si dispone di un numero elevato di file di stato che si desidera migrare a Terraform Cloud, è consigliabile utilizzare l’API Terraform Cloud per farlo. Per informazioni sul caricamento delle versioni di stato utilizzando l’API, fare riferimento alla documentazione dell’API della versione di stato.

Related Post

Leave A Comment