Terraform som infrastruktur som kode · Lektion

Refaktorering af state med moved og removed

Omdøb og omstrukturer ressourcer sikkert uden at ødelægge infrastrukturen ved hjælp af kommandoer til state-manipulation og de deklarative moved- og removed-blokke.

Lektion 4 af 413 trin

Refaktorering af state med moved og removed er en gratis Terraform som infrastruktur som kode-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Terraform som infrastruktur som kode, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Terraform som infrastruktur som kode-kurset indeholder 4 lektioner i alt.

Problemet med omdøbning

Når du omdøber en ressource i din konfiguration, ser Terraform den gamle adresse som fjernet og en ny som tilføjet. Som standard vil den ødelægge og oprette ressourcen igen, hvilket kan medføre nedetid eller datatab.

Værktøjer til refaktorering af tilstanden lader dig fortælle Terraform, at en ressource blot er flyttet.

Inspektion af tilstanden

Start med at vise, hvad der spores i tilstanden. Kommandoen terraform state list viser adressen på hver administreret ressource.

terraform state list

Imperativ state mv

Den klassiske metode er terraform state mv, som omskriver en ressources adresse i tilstanden. Her omdøber vi en instans fra aws_instance.web til aws_instance.app.

terraform state mv aws_instance.web aws_instance.app

Ulempen ved state mv

state mv er en manuel CLI-handling, der kun udføres én gang. Den registreres ikke i koden, så teammedlemmer, der udfører den samme ændring på deres maskiner, skal gentage den. Det giver let fejl i samarbejdsbaserede arbejdsgange.

Deklarative moved-blokke

Blokken moved registrerer en omdøbning i din konfiguration. Terraform anvender den automatisk for alle under den næste plan, hvorefter du senere kan fjerne blokken.

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

Flytning ind i et modul

moved-blokke håndterer også indpakning af ressourcer i et modul. Mål-adressen indeholder modulstien.

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

Kontrol med en plan

Efter tilføjelse af en moved-blok skal du køre terraform plan. En korrekt flytning viser ingen ødelæggelse eller oprettelse, kun en adresseændring. Hvis du stadig ser en udskiftning, er blokken forkert.

terraform plan

Fjernelse fra tilstanden

Nogle gange vil du have Terraform til at holde op med at administrere en ressource uden at ødelægge den faktiske infrastruktur. Den imperative kommando er terraform state rm.

terraform state rm aws_instance.legacy

Deklarative removed-blokke

Nyere versioner af Terraform understøtter en removed-blok. Med lifecycle { destroy = false } glemmer den ressourcen i tilstanden, men lader den faktiske infrastruktur være urørt.

removed {
  from = aws_instance.legacy

  lifecycle {
    destroy = false
  }
}

Opdeling af tilstandsfiler

I store projekter kan terraform state mv -state-out flytte ressourcer mellem separate tilstandsfiler. Det er nyttigt, når en monolit opdeles i stacks, der kan anvendes uafhængigt.

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

Sikkerhedskopier og sikkerhed

Terraform skriver en .backup-fil, før tilstanden ændres. Når du bruger remote backends, skal du dog altid kontrollere, at tilstanden ikke er låst af en kollega, før du udfører manuelle handlinger, så du undgår korruption.

Hurtigt tjek

Test din viden om refaktorering.

Opsummering: Sikker refaktorering af tilstanden

Du kan nu omstrukturere infrastruktur uden at ødelægge den:

  • state mv / state rm til imperative ændringer.
  • moved-blokke til deklarative omdøbninger.
  • removed-blokke til at glemme ressourcer uden at ødelægge dem.
  • Kontrollér altid med en plan, der ikke viser nogen udskiftning.
Gratis at komme i gang

Lær Terraform som infrastruktur som kode med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Refaktorering af state med moved og removed” gratis?

Ja — hele teksten til “Refaktorering af state med moved og removed” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Terraform som infrastruktur som kode-kurset, skal du opgradere til CoddyKit PRO. Terraform som infrastruktur som kode-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Refaktorering af state med moved og removed”?

Omdøb og omstrukturer ressourcer sikkert uden at ødelægge infrastrukturen ved hjælp af kommandoer til state-manipulation og de deklarative moved- og removed-blokke. Du øver dig i Terraform som infrastruktur som kode med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Terraform som infrastruktur som kode?

Der kræves ingen tidligere erfaring. Terraform som infrastruktur som kode på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Refaktorering af state med moved og removed”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Terraform som infrastruktur som kode-lektion?

Ja. Alle Terraform som infrastruktur som kode-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Fjernbaserede state-backends
  2. Låsning af tilstand og konsistens
  3. Import af eksisterende ressourcer
  4. Refaktorering af state med moved og removed
← Tilbage til Terraform som infrastruktur som kode