DevOps-bootcamp · Lektion

Refaktorera state med moved och removed

Byt namn på och strukturera om resurser säkert utan att förstöra infrastrukturen genom att använda kommandon för state-manipulering samt de deklarativa blocken moved och removed.

Lektion 4 av 413 steg

Refaktorera state med moved och removed är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Problemet med namnbyten

När du byter namn på en resurs i konfigurationen ser Terraform den gamla adressen som borttagen och en ny som tillagd. Som standard kommer Terraform att förstöra och återskapa resursen, vilket kan leda till driftstopp eller dataförlust.

Verktyg för refaktorering av state låter dig tala om för Terraform att resursen bara har flyttats.

Inspektera state

Börja med att lista det som finns registrerat i state. Kommandot terraform state list visar adressen till varje hanterad resurs.

terraform state list

Imperativ state mv

Det klassiska tillvägagångssättet är terraform state mv, som skriver om en resurs adress i state. Här byter vi namn på en instans från aws_instance.web till aws_instance.app.

terraform state mv aws_instance.web aws_instance.app

Nackdelen med state mv

state mv är en manuell CLI-åtgärd som utförs en gång. Den dokumenteras inte i koden, så teammedlemmar som genomför samma ändring på sina datorer måste upprepa den. Det är felbenäget i samarbetande arbetsflöden.

Deklarativa moved-block

Blocket moved registrerar ett namnbyte i din konfiguration. Terraform tillämpar det automatiskt för alla under nästa planering, och därefter kan du ta bort blocket.

moved {
  from = aws_instance.web
  to   = aws_instance.app
}

Flytta in i en modul

moved-block hanterar även att kapsla in resurser i en modul. Mål adressen innehåller modulens sökväg.

moved {
  from = aws_instance.app
  to   = module.compute.aws_instance.app
}

Verifiera med en plan

När du har lagt till ett moved-block kör du terraform plan. En korrekt flytt visar varken förstöring eller skapande, utan bara en adressändring. Om du fortfarande ser att resursen ska ersättas är blocket felaktigt.

terraform plan

Ta bort från state

Ibland vill du att Terraform ska sluta hantera en resurs utan att den verkliga infrastrukturen förstörs. Det imperativa kommandot är terraform state rm.

terraform state rm aws_instance.legacy

Deklarativa removed-block

Nyare versioner av Terraform stöder ett removed-block. Med lifecycle { destroy = false } glömmer Terraform resursen från state men lämnar den verkliga infrastrukturen orörd.

removed {
  from = aws_instance.legacy

  lifecycle {
    destroy = false
  }
}

Dela upp state-filer

För stora projekt kan terraform state mv -state-out flytta resurser mellan separata state-filer. Det är användbart när en monolit delas upp i stackar som tillämpas oberoende av varandra.

terraform state mv -state-out=network.tfstate \
  aws_vpc.main aws_vpc.main

Säkerhetskopior och säkerhet

Terraform skriver en .backup-fil innan state ändras. Med fjärranslutna backends bör du ändå alltid bekräfta att state inte är låst av en teammedlem innan manuella åtgärder, för att undvika korruption.

Snabb kontroll

Testa dina kunskaper om refaktorering.

Sammanfattning: Säker refaktorering av state

Nu kan du strukturera om infrastrukturen utan att förstöra den:

  • state mv / state rm för imperativa ändringar.
  • moved-block för deklarativa namnbyten.
  • removed-block för att glömma resurser utan att förstöra dem.
  • Verifiera alltid med en plan som inte visar någon ersättning.
Gratis att börja

Lär dig DevOps-bootcamp med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
142
Lektioner
568

Vanliga frågor

Är lektionen ”Refaktorera state med moved och removed” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”Refaktorera state med moved och removed”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad lär jag mig i ”Refaktorera state med moved och removed”?

Byt namn på och strukturera om resurser säkert utan att förstöra infrastrukturen genom att använda kommandon för state-manipulering samt de deklarativa blocken moved och removed. Ni övar på DevOps-bootcamp med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig DevOps-bootcamp?

Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Refaktorera state med moved och removed”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här DevOps-bootcamp-lektionen?

Ja. Varje DevOps-bootcamp-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Fjärrbaserade state-backends
  2. State-låsning och konsekvens
  3. Importera befintliga resurser
  4. Refaktorera state med moved och removed
← Tillbaka till DevOps-bootcamp