som en nuværende bruger af Terraform CLI er du ansvarlig for at opretholde en tilstandsfil som en sandhedskilde for din skyinfrastruktur. Du kan migrere din lokale stat fil til Terraform Cloud uden at afbryde eller genskabe din eksisterende infrastruktur.
advarsel: når du uploader en tilstandsfil til Terraform Cloud ved hjælp af trinnene i denne vejledning, skal du altid bruge den samme version af Terraform CLI, som du brugte til at oprette ressourcerne. Ved hjælp af en nyere version af Terraform kan opdatere staten fil og forårsage tilstand fil korruption.
“forudsætninger
denne tutorial antager, at du har følgende:
- Terraform CLI installeret lokalt
- en Terraform Cloud-konto
Bemærk: da remote
backend ikke blev understøttet i ældre version af Terraform, skal du bruge 0.11.13 eller højere for at migrere din tilstand til Terraform Cloud. Uddragene i denne tutorial bruger 0.12 syntaks.
hvis du ikke har Terraform installeret lokalt, kan du gennemføre denne tutorial i et interaktivt laboratorium. Start det her.
“opret tilstand
Start med at klone dette GitHub-arkiv.
$ git clone https://github.com/hashicorp/learn-state-migration
Kopier
skift derefter til mappen.
$ cd learn-state-migration
Kopier
gennemgå main.tf
filen i arbejdsmappen for at få et overblik over de ressourcer, du skal oprette. Denne konfiguration bruger random_pet
– ressourcen til at generere og udsende et tilfældigt kæledyrsnavn med et givet antal ord. Længden af navnet bestemmes af værdien af name_length
variablen, som standard 3.
i en konfiguration i den virkelige verden kan du have yderligere variabler som f.eks cloud platform legitimationsoplysninger defineret i en .tfvars
fil. Vi dækker, hvordan du indstiller disse værdier i Terraform Cloud-arbejdsområdet senere i denne vejledning, efter at du har migreret tilstandsfilen.
## 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}
Kopier
Initialiser mappen.
$ terraform init
Kopier
når Terraform initialiserer, skal du anvende konfigurationen og godkende kørslen ved at skrive “ja” ved prompten.
$ terraform apply
kopi
Terraform udsender et tre ord tilfældigt genereret kæledyrsnavn.
“Indstil remote backend
nu hvor du har en lokal tilstandsfil, skal du oprette en backend-kodeblok i din konfiguration. Backends fortælle Terraform hvor at indlæse og gemme sin tilstand fil.
Terraform bruger som standard den lokale backend, hvis du ikke eksplicit definerer en backend-kodeblok i din konfiguration. Den lokale backend gemmer din tilstand som en terraform.tfstate
fil i den mappe, hvor du kører terraform apply
. For at migrere tilstandsfiler til Terraform Cloud skal du definere en remote
backend i din konfiguration ved at tilføje en ny kodeblok til begyndelsen af din main.tf
fil.
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" } }}
Kopier
Erstat attributværdierne organisation og arbejdsområder med navnet på din Terraform Cloud-organisation og det ønskede arbejdsområdenavn. Mens den organisation, der er defineret i backend-strofen, allerede skal eksistere, behøver arbejdsområdet ikke; Terraform Cloud opretter det om nødvendigt. Hvis du vælger at bruge et arbejdsområde, der allerede findes, må arbejdsområdet ikke have nogen eksisterende tilstande.
Bemærk: Hvis du er bekendt med at køre Terraform ved hjælp af CLI, har du muligvis brugt Terraform-arbejdsområder. Terraform Cloud-arbejdsområder opfører sig anderledes end Terraform CLI-arbejdsområder. Terraform CLI-arbejdsområder tillader, at der findes flere tilstandsfiler i en enkelt mappe, så du kan bruge en konfiguration til flere miljøer. Terraform Cloud-arbejdsområder indeholder alt, hvad der er nødvendigt for at styre et givet sæt infrastruktur, og fungerer som separate arbejdsmapper.
“godkend med Terraform Cloud
nu hvor du har defineret din backend, skal du godkende med Terraform Cloud for at fortsætte med initialisering. For at godkende med Terraform Cloud skal du køre underkommandoen terraform login
og følge vejledningen for at logge ind.
Bemærk: Hvis du bruger en version af Terraform før 0.12.21, er kommandoen terraform login
ikke tilgængelig. I stedet skal du oprette en CLI-konfigurationsfil, der skal godkendes.
$ 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:
kopi
svar på bekræftelsesprompten med en yes
.
For mere detaljerede instruktioner om at logge ind, se login tutorial.
“Overfør tilstandsfilen
når du har godkendt remote
backend, er du klar til at migrere din lokale tilstandsfil til Terraform Cloud. For at begynde migrationen skal du geninitialisere. Dette får Terraform til at genkende din ændrede backend-konfiguration.
$ 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:
kopi
under Reinitialisering præsenterer Terraform en prompt, der siger, at den vil kopiere tilstandsfilen til den nye backend. Indtast yes
og Terraform vil migrere staten fra din lokale maskine til Terraform Cloud.
“Konfigurer Terraform Cloud-arbejdsområdet
når du har migreret din tilstand til Terraform Cloud, skal du logge ind på Terraform Cloud-brugergrænsefladen, finde dit arbejdsområdenavn som defineret i din backend-konfiguration og klikke på det. Naviger til fanen” stater ” i arbejdsområdet, og se din første handling i arbejdsområdet.
Husk, at din konfiguration har en variabel, som du skal tilføje til det nyearbejdsområde. Klik på fanen” variabler “i arbejdsområdet og derefter på”Tilføj variabel”.Indtast navnet på variablen, name_length
, som nøglen. Indtast derefter en nyværdi, 5
, og gem variablen.
for konfigurationer i den virkelige verden skal du også tilføje cloud platform-legitimationsoplysninger og andre konfigurationsvariabler til arbejdsområdet.
“Start en kørsel i det nye arbejdsområde
efter at have verificeret, at tilstanden blev migreret til Terraform Cloud-arbejdsområdet, skal du fjerne den lokale tilstandsfil.
$ rm terraform.tfstate
Kopier
Anvend et nyt løb.
$ terraform apply
kopi
Terraform vil streame logfiler fra Terraform Cloud og give et link til kørslen i Terraform Cloud UI. Du indstiller en ny værdi for variablen name_length
, så ressourcen erstattes med en, der matcher de nye parametre.
“næste trin
Ødelæg de ressourcer, du oprettede til denne tutorial, ved først at klikke på”Indstillinger” i Terraform Cloud-arbejdsområdet, vælge “destruktion ogdeletion”, sikre afkrydsningsfeltet “Tillad destroy plans” er markeret, og derefterklik på “kø destroy plan”.
når ressourcerne er blevet ødelagt, skal du vende tilbage til siden “destruktion ogdeletion” og klikke på “Slet fra Terraform Cloud” for at slette arbejdsområdet.
i denne vejledning migrerede du en tilstandsfil fra din lokale maskine til et Terraform Cloud-arbejdsområde. Hvis du vil vide, hvordan du migrerer tilstandsfilerne for flere lokale arbejdsområder eller begrænser arbejdsområdeadgang til et bestemt team, skal du se følgende dokumentation.
- migrerende tilstand fra flere lokale arbejdsområder
- administration af Arbejdsområdeadgang
hvis du har et stort antal tilstandsfiler, som du gerne vil migrere til Terraform Cloud, kan du overveje at bruge Terraform Cloud API til at gøre det. Du kan finde oplysninger om upload af tilstandsversioner ved hjælp af API ‘ en i API-dokumentationen til Tilstandsversion.