als huidige gebruiker van de Terraform CLI bent u verantwoordelijk voor het onderhouden van een statusbestand als bron van waarheid voor uw cloudinfrastructuur. U kunt uw lokale statusbestand migreren naar Terraform Cloud zonder uw bestaande infrastructuur te onderbreken of opnieuw aan te maken.
waarschuwing: bij het uploaden van een statusbestand naar Terraform Cloud met behulp van de stappen in deze tutorial, Gebruik altijd dezelfde versie van de Terraform CLI die u hebt gebruikt om de bronnen aan te maken. Met behulp van een nieuwere versie van Terraform kan de toestand bestand bij te werken en veroorzaken state file corruptie.
“vereisten
deze tutorial gaat ervan uit dat u het volgende hebt:
- de Terraform CLI lokaal geïnstalleerd
- een Terraform Cloud account
Opmerking: Omdat de remote
backend niet werd ondersteund in oudere versie van Terraform, moet u 0.11.13 of hoger gebruiken om uw status naar Terraform Cloud te migreren. De fragmenten in deze tutorial gebruiken 0.12 syntaxis.
Als u Terraform niet lokaal hebt geïnstalleerd, kunt u deze tutorial in een interactief lab van uw webbrowser voltooien. Lanceer het hier.
“Create state
begin met het klonen van deze GitHub repository.
$ git clone https://github.com/hashicorp/learn-state-migration
kopieer
volgende, Ga naar de map.
$ cd learn-state-migration
kopieer
Bekijk het main.tf
bestand in de werkmap om een overzicht te krijgen van de bronnen die u gaat aanmaken. Deze configuratie gebruikt de random_pet
bron om een willekeurige pet-naam met een bepaald aantal woorden te genereren en uit te voeren. De lengte van de naam wordt bepaald door de waarde van de variabele name_length
, die standaard 3 is.
in een real-world configuratie kunt u extra variabelen zoals Cloud platform referenties gedefinieerd in een .tfvars
bestand. We zullen later in deze tutorial bespreken hoe u deze waarden in de Terraform Cloud workspace kunt instellen, nadat u het statusbestand hebt gemigreerd.
## 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}
kopieer
Initialiseer de map.
$ terraform init
Copy
nadat Terraform initialiseert, pas de configuratie toe en keur de run goed door “yes” achter de prompt te typen.
$ terraform apply
Copy
Terraform zal een willekeurig gegenereerde pet-naam met drie woorden uitvoeren.
” remote backend instellen
Nu u een lokaal statusbestand hebt, moet u een backend-codeblok aanmaken in uw configuratie. Backends vertellen Terraform waar het statusbestand moet worden geladen en opgeslagen.
Terraform gebruikt standaard de lokale backend als u niet expliciet een backend code blok in uw configuratie definieert. De lokale backend slaat uw status op als een terraform.tfstate
bestand in de map waarin u terraform apply
uitvoert. Om statusbestanden naar Terraform Cloud te migreren, definieert u een remote
backend in uw configuratie door een nieuw codeblok toe te voegen aan het begin van uw main.tf
bestand.
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" } }}
kopieer
Vervang de waarden van het attribuut organisatie en workspaces door de naam van uw Terraform cloudorganisatie en de gewenste naam van de werkruimte. Hoewel de organisatie gedefinieerd in de backend strofe al moet bestaan, hoeft de werkruimte niet te bestaan; Terraform Cloud zal het indien nodig creëren. Als u ervoor kiest om een reeds bestaande werkruimte te gebruiken, mag de werkruimte geen bestaande status hebben.
Opmerking: Als u bekend bent met het draaien van Terraform met behulp van de CLI, kunt u Terraform werkbladen hebben gebruikt. Terraform Cloud workspaces gedragen zich anders dan Terraform CLI workspaces. Terraform CLI workspaces staan toe dat er meerdere statusbestanden bestaan binnen een enkele map, zodat u één configuratie kunt gebruiken voor meerdere omgevingen. Terraform Cloud workspaces bevatten alles wat nodig is om een bepaalde set infrastructuur te beheren en te functioneren als aparte werkmappen.
“authenticeren met Terraform Cloud
Nu u uw backend hebt gedefinieerd, moet u authenticeren met Terraform Cloud om verder te gaan met initialisatie. Om te authenticeren met Terraform Cloud, voert u de terraform login
subopdracht uit en volgt u de aanwijzingen om in te loggen.
Opmerking: Als u een versie van Terraform vóór 0.12.21 gebruikt, is het commando terraform login
niet beschikbaar. Stel in plaats daarvan een CLI-configuratiebestand in om te verifiëren.
$ 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:
kopie
antwoord op de bevestiging met een yes
.
voor meer gedetailleerde instructies over inloggen, zie de login tutorial.
” het statusbestand migreren
zodra u de backend remote
hebt geverifieerd, bent u klaar om uw lokale statusbestand te migreren naar Terraform Cloud. Om de migratie te beginnen, herinitialiseren. Dit zorgt ervoor dat Terraform uw gewijzigde backend configuratie herkent.
$ 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:
Copy
tijdens het herinitialiseren presenteert Terraform een prompt die zegt dat het het statusbestand naar de nieuwe backend zal kopiëren. Voer yes
in en Terraform zal de status van uw lokale machine naar Terraform Cloud migreren.
” Configureer de Terraform Cloud workspace
na het migreren van uw status naar Terraform Cloud, log in op de Terraform Cloud Web UI, zoek de naam van uw werkruimte zoals gedefinieerd in uw backend configuratie, en klik erop. Navigeer naar het tabblad “Staten” van het werkblad en zie uw eerste actie in het werkblad.
onthoud dat uw configuratie een variabele heeft die u aan de newworkspace moet toevoegen. Klik op het tabblad” variabelen “in de werkruimte en vervolgens op”variabele toevoegen”.Voer de naam van de variabele name_length
in als de sleutel. Voer vervolgens een newvalue in, 5
, en sla de variabele op.
voeg voor real-world configuraties cloud platform-referenties en andere configuratievariabelen ook toe aan de werkruimte.
” Start een run in de nieuwe werkruimte
nadat u hebt geverifieerd dat de status is gemigreerd naar de Terraform Cloud workspace, verwijdert u het lokale statusbestand.
$ rm terraform.tfstate
kopiëren
een nieuwe run toepassen.
$ terraform apply
Copy
Terraform streamt logs van Terraform Cloud en geeft een link naar de run in de Terraform Cloud UI. U stelt een nieuwe waarde in voor de variabele name_length
, zodat de bron wordt vervangen door een die overeenkomt met de nieuwe parameters.
“volgende stappen
vernietig de resources die u voor deze tutorial hebt aangemaakt door eerst op de”Settings” optie in de Terraform Cloud workspace te klikken, selecteer “Destruction andDeletion”, zorg ervoor dat het selectievakje “Allow destroy plans” is aangevinkt, en klik vervolgens op “Queue destroy plan”.
nadat de resources zijn vernietigd, ga terug naar de” Destruction and deletion “pagina en klik op” Delete from Terraform Cloud ” om de werkruimte te verwijderen.
in deze tutorial migreerde u een statusbestand van uw lokale machine naar een Terraform Cloud workspace. Zie de volgende documentatie voor meer informatie over het migreren van statusbestanden van meerdere lokale werkbladen of het beperken van de toegang tot werkruimten tot een bepaald team.
- Status migreren vanuit meerdere lokale werkruimten
- toegang tot werkruimte beheren
als u een groot aantal statusbestanden hebt die u naar Terraform Cloud wilt migreren, overweeg dan om hiervoor de Terraform Cloud API te gebruiken. Voor informatie over het uploaden van statusversies met behulp van de API, raadpleegt u de API-documentatie over Statusversie.