Od początku roku przygotowałem kilka labów typu PoC (Proof of Concept), webinariów oraz prezentacji, w ramach których używałem rozwiązań w chmurze Azure. Dema i testy mają jedną wspólną cechę – wykonuje się je z modyfikacjami wielokrotnie. W takich sytuacjach staram się korzystać ze zautomatyzowanych narzędzi do budowy infrastruktury. Do takich należy choćby Terraform. Zanim jednak pokażę Ci fragmenty konfiguracji budujących środowisko do wspomnianych projektów, zobacz, w jaki sposób Terraform zainstalować i uruchomić.
Czym jest Terraform?
Terraform to narzędzie stworzone przez firmę HashiCorp pozwalające na zarządzanie infrastrukturą IT w modelu Infrastructure as a Code (IaaC). Jest to podejście, w którym budowa infrastruktury odbywa się poprzez oprogramowanie, a nie ręczną konfigurację. Celem jest stworzenie spójnego i przewidywalnego środowiska na podstawie wprowadzonych parametrów. Opis tworzonego środowiska zdefiniowany jest w kodzie, i najczęściej przechowany w systemach kontroli wersji, na przykład repozytoriach Gita.
Działanie Terrraforma opiera się na deklaratywnym modelu zarządzania. Jako administratorzy podajemy jaki stan chcemy osiągnąć i to od oprogramowania zależy, w jaki sposób cel zostanie osiągnięty. Nie musimy zatem martwić się jakie kolejne kroki musimy wykonać, aby osiągnąć zdefiniowany stan.
Instalacja Terraforma
W przeciwieństwie do wielu innych narzędzi do automatyzacji Terraform nie jest dostępny w postaci pakietów binarnych w dystrybucji Linuksa. Aby go zainstalować, wchodzimy na stronę terraform.io i pobramy binarny plik wykonywalny przygotowany dla naszego systemu operacyjnego. W przypadku takich dystrybucji jak FreeBSD i Linux zwracajmy uwagę, by wybrać odpowiednią platformę sprzętową – dostępne są wersje zarówno dla procesorów o architekturze i386, amd64, jak i arm. Pobrany plik wykonywalny umieszczamy w folderze, który znajduje się w ścieżce wpisanej w systemowej zmiennej PATH.
Terraform uruchamiamy z linii poleceń. Jeżeli używamy systemu Linux i powłoki bash lub zsh warto aktywować funkcję automatycznego uzupełniania nazw parametrów. Wystarczy, że wydamy polecenie terraform -install-autocomplete
, a następnie zrestartujemy wiersz poleceń.
Projekt w Terraform
W skład projektu Terraform może wchodzić jeden lub więcej plików, w których zdefiniowane są zarówno zmienne środowiskowe, jak i definicje zasobów, czyli konfiguracji, która ma zostać stworzona. Pliki te mają rozszerzenie .tf
. Działania opisane w nich mogą być wykonywane zarówno lokalnie, jak i na zdalnych systemach. Ich wykonywanie odbywa się za pomocą wtyczek, które pobierane są z serwerów Terraforma po wydaniu polecenia terraform init
w głównym katalogu projektu. Aplikacja pobiera jedynie wtyczki, które są niezbędne do wykonania projektu.
Aby osiągnąć stan opisany w projekcie, musimy wydać najpierw polecenie terraform plan
. Terraform dokonuje wtedy sprawdzenia, czy plik konfiguracyjny jest poprawny, a zaplanowane działania mogą być wdrożone i nie stoją w konflikcie do aktualnego stanu systemu. Takie sprawdzenie określa się jako dry run. Po poprawnej weryfikacji zaaplikujemy zmianę poleceniem terraform apply
.
Terraform działa w sposób stanowy. Każdorazowa modyfikacja infrastruktury zapisywana jest do pliku stanu o nazwie terraform.tfstate
. Pod żadnym pozorem nie powinniśmy tego pliku ręcznie edytować, a każda osoba czy system modyfikujący infrastrukturę za pomocą Terraforma musi dla naszego projektu mieć aktualną wersję pliku ze stanem zanim przystąpi do modyfikacji infroastruktury.
Stworzoną infrastrukturę w prosty sposób usuwamy wydając polecenie terraform destroy
.
W kolejnych artykułach pokażę Ci fragmenty kilku konfiguracji, które w ostatnim czasie wdrażałem.
Stawiasz już swoje pierwsze kroki w Terraform? Napisz do mnie jakie tematy dotyczące zarządzania infrastrukturą za pomocą tego narzędzia są dla Ciebie ciekawe i interesujące. Postaram się napisać o nich w kolejnych artykułach.
Były kolejne artykuły o terraform? bo coś nie mogę znaleźć
Jeszcze nie, bo Python był ostatnio na topie, ale są na roadmapie 🙂 Jakieś konkretne zagadnienia chciałbyś, abym poruszył?