Terraform – kilka słów wstępu

Każdy z nas choć raz w swoim życiu podjął się konfigurowania jakiegoś urządzenia. To mógł być nowy telefon, laptop, modem czy nawet telewizor. Na początku zawsze jest konfiguracja podstawowa a później to, na co czekają wszyscy, czyli szeroko pojęta customizacja. Dostosowanie wszystkiego dokładnie tak jak chcemy – czyli tak, żeby wszystko było idealne. W przypadku telefonu może to być na przykład ustawienie:

  • tapety;
  • wygaszacza ekranu;
  • wielkości czcionki;
  • włożenie dodatkowej karty pamięci; 
  • jasności wyświetlacza;
  • głośności dzwonków;
  • wybór sygnałów połączenia i wiadomości tekstowej…

Długo można wymieniać, a to tylko i wyłącznie same podstawowe ustawienia systemu urządzenia. Oczywiście kolejnym krokiem jest instalacja wszystkich dodatkowych aplikacji, gdzie znów można się spotkać z kolejną konfiguracją. W zależności od użytkownika może być to kilka, kilkanaście, a nawet i o wiele więcej aplikacji.

Z perspektywy konfiguracji jednego telefonu, te wszystkie akcje są do przeżycia. Wyobraźmy sobie jednak, że musimy powtórzyć to kilka razy i dodatkowo dla każdego urządzenia delikatnie zmienić ustawienia. Do tego oczywiście niezbędne jest zapamiętanie, gdzie, co i jak zmieniamy. Przecież ciężko byłoby się zalogować nie znając kodu PIN. Wygląda to już na trochę bardziej skomplikowane, prawda?

Zamieńmy teraz nasz telefon na infrastrukturę danej aplikacji. Czym jest infrastruktura? Jest to zespół komponentów niezbędnych do funkcjonowania usług i środowisk informatycznych, a także do zarządzania nimi. Dlatego też musimy pamiętać, że często za pojedynczą aplikacją, z której korzystamy stoi często cała infrastruktura niezbędna do jej uruchomienia, poprawnego działania i monitoringu.

I tu właśnie z pomocą przychodzi nam Terraform – narzędzie, dzięki któremu tworzenie, zarządzanie i utrzymanie infrastruktury będzie mniej bolesne. 

Infrastructure as Code

Dobrze pamiętam czasy, gdy całą konfigurację serwera oraz innych elementów środowiska w celu uruchomienia aplikacji robiło się ręcznie. Szaman zespołu wyciągał święty zwój, gdzie były zapisane wszelkie prawdy objawione jak ustawić wszystko tak aby zadziałało. Jak się pewnie domyślacie trwało to dosyć długo, a błędów było sporo. Teraz zostały po tym jedynie wspomnienia, święte zwoje zastąpiono zdefiniowaniem ustawień w postaci kodu, a szamanów wygnano na rzecz automatyzacji. 

IaC (Infrastructure as Code) jest paradygmatem, wprowadzającym założenie, że wszelkie ustawienia środowiska/infrastruktury są zdefiniowane w postaci kodu, który po uruchomieniu przygotuje opisaną nim infrastukturę. Nie wiem jak dla Was, ale dla mnie to jest magia. 

Zalety stosowania IaC:

  • Kontrola wersji – dzięki jej wykorzystaniu w łatwy sposób można prześledzić zmiany, przywrócić konkretne ustawienia czy też po prostu przeglądać konfigurację;
  • Oszczędność czasu – operacje manualne są sprowadzone do niezbędnego minimum; 
  • Powtarzalność wdrożeń – przygotowany kod może służyć do tworzenia kolejnych środowisk dając przy tym pewność, że będą one dokładnie takie same;
  • Testowanie – dzięki temu, że infrastruktura ma postać kodu, możemy już na wczesnym etapie wykryć błędy dzięki analizie statycznej lub testom. Dodatkowo, możemy testować zmiany na dedykowanym ku temu środowisku a nie od razu na środowisku produkcyjnym.

Czym jest Terraform?

Jest rozwiązaniem open source wprowadzonym przez firmę HashiCorp, dzięki któremu możemy podążyć za paradygmatem IaC. Pliki terraforma posiadają rozszerzenie .tf, a ich zawartość zapisana jest językiem HCL (HashiCorp Configuration Language), którego składnia bazuje na dobrze nam znanej z JSON.

Naprawdę polecam dokumentację, którą jest dostępna na oficjalnej stronie Terraform. Wszystko jest opisane przystępnie jak i jest tam zawartych wiele prostych przykładów.  Sama składnia i funkcje, który są zawarte w HCL nie są skomplikowane. Zabawa pojawi się w momencie, gdy zaczniemy tworzyć infrastrukturę z wykorzystaniem dostępnych providerów. 

Providery, to nic innego jak pluginy, które są rozszerzeniami terraforma, a co za tym idzie cegiełkami, przy pomocy których budujemy naszą infrastrukturę. Przykładowymi providerami są:

  • AWS,
  • Azure,
  • PagerDuty,
  • Grafana,
  • Kubernetes…

Pełna lista providerów dostępna jest tutaj: LINK Każdy z nich dostarcza inną funkcjonalność z całkowicie nową dokumentacją do poznania. Tak, pewnie część z Was się ze mną nie zgodzi, ale dokumentacja bardzo często jest kluczem do sukcesu. I to nie tylko przy składaniu mebli IKEA.

Podstawowymi komendami wykorzystywanymi przy wdrożeniu przygotowanej przez z nas konfiguracji są:

  • terraform init – inicjalizacja konfiguracji na podstawie przygotowanych plików – jest to pierwsza komenda, która powinna być wykonana po przygotowaniu/pobraniu konfiguracji;
  • terraform validate – sprawdza, czy przygotowana konfiguracja jest poprawna;
  • terraform plan – przygotowuje plan konfiguracji, dzięki czemu możemy na bieżąco monitorować jej stan przy wprowadzonych zmianach;
  • terraform apply – wdrożenie zmian zgodnie z wcześniej wygenerowanym planem; 
  • terraform destroy – usuwa wszelkie wcześniej utworzone zasoby;

Co dalej?

Ten artykuł jest krótkim wprowadzeniem do świata Terraform, języka HCL jak i integracji z providerami. W kolejnym artykule przejdziemy krok po kroku przez integrację z providerem PagerDuty. Zobaczymy, jak wprowadzane przez nas zmiany mają wpływ na istniejącą i działającą aplikację. A czym jest PagerDuty? O tym w kolejnym odcinku 🙂