Przejdź do treści

Manipulacja stanem – usuwanie | terraform state rm

terraform stat rm - code refactoring 2023

Dzisiaj szybki wpis na temat usuwania zasobów z Terraform state za pomocą terraform state rm. Miałem kilka razy taką sytuację, że ktoś usunął ręcznie zasoby z chmury bez usuwania kodu, a Terraform nie mógł sobie z tym poradzić. Dopiero po usunięciu stanu zasobu TF mógł od nowa utworzyć zasób. Istnieje też kilka innych sytuacji, w których może być przydatne używanie terraform state rm:

Usuwanie nieaktualnych zasobów. Jeśli już nie chcesz zarządzać pewnym zasobem przy użyciu Terraforma. Na przykład, jeśli przestałeś korzystać z konkretnej maszyny wirtualnej i chcesz przestać nią zarządzać za pomocą Terraforma, możesz ją usunąć ze stanu.

Przenoszenie zasobów do innego pliku konfiguracyjnego albo innego workspace. Jeśli chcesz przenieść pewne zasoby do innego Terraform workspace, możesz użyć terraform state rm, aby najpierw usunąć je z bieżącego stanu, a następnie dodać je ponownie w nowym workspace i nowym pliku konfiguracyjnym. To pozwoli uniknąć konfliktów w stanie.

Naprawa problemów ze stanem czyli to o czym wspomniałem na początku. Czasem stan Terraforma może ulec uszkodzeniu lub być nieaktualny. Terraform state rm może być używane jako narzędzie do naprawy stanu poprzez ręczne usuwanie problematycznych zasobów i ponowne ich dodawanie.

terraform stat rm - code refactoring 2023

Za pomocą polecenia terraform state rm możesz sprawić, że stan się zmieni, a zasoby zostaną w AWS nienaruszone. Na początku zalecam wykonanie backupu na wszelki wypadek. Możesz też wykonać dry-run. Przykład znajdziesz poniżej:

#backup
terraform state pull > backup.tfstate

#dry-run
terraform state rm -dry-run 'module.s3.module.aws_s3_bucket["my-s3-bucket"].bucket_s3.this[0]'

#rm
terraform state rm 'module.s3.module.aws_s3_bucket["my-s3-bucket"].bucket_s3.this[0]'

Uwaga! Dobra rada. Podczas wykonywania tych operacji musisz być bardzo ostrożny. Dlatego zawsze, przed każdą manipulacją stanem wykonaj backup, żebyś mógł łatwo wrócić do tego, co było.

It's good to have a backup

Do identyfikacji zasobów może przydać ci się polecenie:

terraform state list

W niektórych przypadkach niektóre zasoby mogą być trudne do usunięcia za pomocą samego Terraforma, np. zasoby tworzone przez ręczne akcje lub zasoby utworzone poza Terraformem, albo gdy ktoś ręcznie usunął zasoby, od których zależą inne zasoby. Może brzmi skomplikowanie, ale prostym przykładem może być aviatrix. Gdy ktoś usunie instancje zawierającą controller przed usunięciem zasobów, którymi on zarządza, to będzie miał problem z usunięciem np. security group, gatewayów itp. zasobów zarządzanych przez aviatrix.

Wtedy najszybszym sposobem jest manipulacja stanem za pomocą terraform state rm i ręczne usunięcie zasobów.

Więcej informacji znajdziesz w dokumentacji terraforma Command: state rm | Terraform | HashiCorp Developer

Więcej porad o manipulacji stanem znajdziesz w artykule Terraform – Manipulacja Stanem – Refaktoryzacja – Wojciech Lepczyński – DevOps Cloud Architect (lepczynski.it).

Jak stworzyć politykę oraz rolę IAM w terraform – 3 sposoby | 2022
K8S – wieczny stan ‘Terminating’

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *