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.
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 listImperativ 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.appNackdelen 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 planTa 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.legacyDeklarativa 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.mainSä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 rmfö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.
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
- Fjärrbaserade state-backends
- State-låsning och konsekvens
- Importera befintliga resurser
- Refaktorera state med moved och removed