Wstęp

Terraform to potężne narzędzie do opisywania infrastruktury jako kodu (IaC), które umożliwia programistom i administratorom definiowanie i zarządzanie zasobami infrastruktury w sposób deklaratywny. Jednym z kluczowych aspektów skutecznej pracy z Terraformem jest zrozumienie koncepcji związanych z cyklem życia zasobów oraz metaargumentów. Te elementy stanowią klucz do precyzyjnego zarządzania zasobami w chmurze i zapewnienia, że nasza infrastruktura jest zawsze zgodna z zamierzonym stanem.

W tym artykule przyjrzymy się bliżej lifecycle meta-arguments, a dokładniej argumentowi create_before_destroy. Pozwoli nam to lepiej zrozumieć, jak kontrolować proces aktualizacji pewnych problematycznych zasobów. Warto poznać te zaawansowane techniki, aby efektywnie zarządzać infrastrukturą i osiągnąć wysoki poziom niezawodności i skalowalności wykorzystując Terraform jako narzędzie swojej pracy.

Lifecycle meta-arguments

Lifecycle metaarguments w Terraform to specjalne atrybuty, które można przypisać do zasobów w definicjach infrastruktury. Służą one do kontrolowania cyklu życia tych zasobów, określając, kiedy i jak Terraform ma zarządzać nimi podczas operacji takich jak tworzenie, aktualizacja lub usunięcie.

Jednym z Lifecycle meta argumentem jest tytułowy create_before_destroy. Ten metaargument jest często używany w przypadku zasobów, które wymagają przełączenia z istniejącej infrastruktury na nową. Określa, czy Terraform powinien najpierw utworzyć nowy zasób, a następnie usunąć stary (true), czy może usunąć stary zasób, a potem utworzyć nowy (false). Pomaga to uniknąć przerw w działaniu infrastruktury podczas aktualizacji czy w niektórych przypadkach w ogóle umożliwić aktualizacje.

W przypadku braku argumentu domyślnie Terraform najpierw usunie zasób, a następnie stworzy nowy. Korzystając jednak z argumentu możemy mieć wpływ na zachowanie Terraform’a. Zachowanie tagu create_before_destroy w pozycji false prezentuję się następująco.

W przypadku gdy wykorzystamy ten meta argument w pozycji true, to Terraform zachowa się w inny sposób i najpierw stworzy obiekt B, a następnie usunie pierwszy.

Przypadek użycia

Załóżmy, że mamy konkretny use-case, w którym posiadamy prostą infrastrukturę, w której znajduje się jedna wirtualna maszyna razem z przypisanym dyskiem oraz kartą sieciową. W związku z faktem, że karta sieciowa powstała ze złą nazwą jesteśmy proszeni o rekreacje karty nie wpływając na stan wirtualnej maszyny. Jak wiemy, operacja zmiany nazwy jest destruktywna co oznacza, że aby to wykonać karta musi być zniszczona, a następnie ponownie stworzona. Jednakże w tym wszystkim istnieje także wirtualna maszyna, do której podpięta jest ta karta. Całości sytuacji nie ułatwia fakt, że nasza organizacja pracuję tylko i wyłącznie na kodzie oraz wszelkie operacje ręczne są zakazane. Spróbujmy wykonać tę operację nie korzystając z żadnego argumentu i spróbujmy zrozumieć co się stało. Zmieniamy nazwę karty sieciowej w kodzie, puszczamy init oraz plan-na ten moment wszystko wygląda dobrze, więc z pewnością ruszamy z apply’em. Nagle zonk…. Dostajemy error informujący nas o fakcie, że nie możliwe jest usunięcie karty sieciowej, ponieważ jest przypisana do wirtualnej maszyny.

Jak poradzić sobie z takim problemem? A no najprościej stworzyć nową kartę, przypisać ją do wirtualnej maszyny oraz usunąc starą. Brzmi znajomo? Przypomina to dokładnie lifecycle metaargument create_before_destroy. Zastosujmy ten metaargument w kodzie i zerknijmy na efekt.

Ponownie puszczamy plan oraz apply i czekamy na rezultaty… po krótkiej chwili otrzymujemy informację, że operacja się udała. Zerknijmy jeszcze na kolejność, w jakiej Terraform obsługiwał operację.

Widzimy, że Terraform w pierwszej kolejności stworzył kartę sieciową, następnie zmodyfikował wirtualną maszynę w celu podmiany karty a dopiero w ostatnim kroku rozpoczął operację usunięcia starej karty sieciowej.

Podsumowanie

Jak zobaczyłeś w powyższym przykładzie lifecycle metaarguments mogą być bardzo przydatne podczas zarządzania infrastrukturą jako kod. Często pisząc swoje wzory terraform zapominamy właśnie o obsłudze cyklu życia infrastruktury, przez co możemy wpakować się w niemałe kłopoty. Mam nadzieję, że po tym wpisie tę kłopoty, nie będą już Ci straszne.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.