Refaktoryzacja stanu za pomocą moved i removed
Bezpiecznie zmieniaj nazwy i strukturę zasobów bez niszczenia infrastruktury, korzystając z poleceń manipulowania stanem oraz deklaratywnych bloków moved i removed.
Refaktoryzacja stanu za pomocą moved i removed to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Problem zmiany nazwy
Po zmianie nazwy zasobu w konfiguracji Terraform widzi, że stary adres zniknął, a pojawił się nowy. Domyślnie usunie i utworzy ponownie zasób, co może oznaczać przestój lub utratę danych.
Narzędzia refaktoryzacji stanu pozwalają poinformować Terraform, że zasób został jedynie przeniesiony.
Inspekcja stanu
Najpierw wyświetl elementy śledzone w stanie. Polecenie terraform state list pokazuje adres każdego zarządzanego zasobu.
terraform state listImperatywne state mv
Klasyczne podejście polega na użyciu terraform state mv, które przepisuje adres zasobu w stanie. Tutaj zmieniamy nazwę instancji z aws_instance.web na aws_instance.app.
terraform state mv aws_instance.web aws_instance.appWada state mv
state mv to ręczna, jednorazowa operacja w CLI. Nie jest zapisana w kodzie, dlatego członkowie zespołu wykonujący tę samą zmianę na swoich komputerach muszą ją powtórzyć. Współpraca w takim modelu jest podatna na błędy.
Deklaratywne bloki moved
Blok moved zapisuje zmianę nazwy w konfiguracji. Terraform zastosuje ją automatycznie u wszystkich podczas następnego planowania, a później można usunąć ten blok.
moved {
from = aws_instance.web
to = aws_instance.app
}Przenoszenie do modułu
Bloki moved obsługują również umieszczanie zasobów w module. Adres docelowy zawiera ścieżkę modułu.
moved {
from = aws_instance.app
to = module.compute.aws_instance.app
}Weryfikacja za pomocą planu
Po dodaniu bloku moved uruchom terraform plan. Prawidłowe przeniesienie nie powoduje usunięcia ani utworzenia zasobu, a jedynie zmianę adresu. Jeśli nadal widzisz zastąpienie zasobu, blok jest nieprawidłowy.
terraform planUsuwanie ze stanu
Czasami chcesz, aby Terraform przestał zarządzać zasobem bez niszczenia rzeczywistej infrastruktury. Służy do tego polecenie imperatywne terraform state rm.
terraform state rm aws_instance.legacyDeklaratywne bloki removed
Nowsze wersje Terraform obsługują blok removed. W połączeniu z lifecycle { destroy = false } usuwa on zasób ze stanu, ale pozostawia rzeczywistą infrastrukturę bez zmian.
removed {
from = aws_instance.legacy
lifecycle {
destroy = false
}
}Dzielenie plików stanu
W dużych projektach terraform state mv -state-out może przenosić zasoby między oddzielnymi plikami stanu. Jest to przydatne podczas dzielenia monolitu na niezależnie stosowane stosy.
terraform state mv -state-out=network.tfstate \
aws_vpc.main aws_vpc.mainKopie zapasowe i bezpieczeństwo
Terraform zapisuje plik .backup przed modyfikacją stanu. Mimo to w przypadku zdalnych backendów zawsze upewnij się przed ręcznymi operacjami, że stan nie jest zablokowany przez członka zespołu, aby uniknąć jego uszkodzenia.
Szybki test
Sprawdź swoją wiedzę na temat refaktoryzacji stanu.
Podsumowanie: bezpieczna refaktoryzacja stanu
Możesz teraz zmieniać strukturę infrastruktury bez jej niszczenia:
state mv/state rmdo zmian imperatywnych.- Bloki
moveddo deklaratywnej zmiany nazw. - Bloki
removeddo zapominania o zasobach bez ich niszczenia. - Zawsze weryfikuj plan, aby upewnić się, że nie pokazuje zastąpienia zasobu.
Często zadawane pytania
Czy lekcja „Refaktoryzacja stanu za pomocą moved i removed” jest bezpłatna?
Tak — pełny tekst „Refaktoryzacja stanu za pomocą moved i removed” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „Refaktoryzacja stanu za pomocą moved i removed”?
Bezpiecznie zmieniaj nazwy i strukturę zasobów bez niszczenia infrastruktury, korzystając z poleceń manipulowania stanem oraz deklaratywnych bloków moved i removed. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Refaktoryzacja stanu za pomocą moved i removed”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zdalne backendy stanu
- Blokowanie stanu i spójność
- Importowanie istniejących zasobów
- Refaktoryzacja stanu za pomocą moved i removed