#1 Terraform instalacja i konfiguracja

Dzisiejszy świat IT coraz bardziej opiera się na automatyzacji, w sumie kierunek słuszny, pytanie tylko czego do niej użyć. Dlaczego mamy tracić czas na klikanie, skoro można przygotować bardzo uniwersalne skrypty, które w „chwilę” zrobią to samo automatycznie, stąd słów kilka o Terraform.

Na końcu tego wpisu link do krótkiego nagrania dotyczącego konfiguracji.

Czym jest Terraform?

Właśnie, na blogu pokazuję nieco pracy z Ansible, jednak poza nim są jeszcze takie narzędzia jak Chief, Puppet czy Saltstack. Warto również wspomnieć przy tej okazji o Terraform od firmy HashiCorp, które działa jako IaaC, czyli Infrastructure as a Code. Podejście takie powoduje, że infrastrukturę IT szczególnie w odniesieniu do chmury publicznej, buduje się nie tak jak wspomniałem na początku, poprzez klikanie opcji, a poprzez przygotowanie odpowiedniego oprogramowania – skryptu w Terraform. Skrypty takie są w stanie zbudować praktycznie każdą opcję dostępną w chmurze. Terraform posiada wsparcie dla największych dostawców chmury, czyli AWS, Azure czy GCP, poza tym min. dla Vmware oraz Kubernetesa.

Zbudowany w ten sposób skrypt/skrypty można przechowywać oraz udostępniać innym przy pomocy repozytorium Git. Dzięki takiemu podejściu można pomóc innym udostępniając swoje skrypty. Wiele skryptów staje się uniwersalnymi lub wymaga niewielu zmian, aby takimi się stały.

Działanie Terrraform opiera się na deklaratywnym modelu zarządzania. My jako administrator definiujemy jaki stan ma zostać osiągnięty 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 Terraform

Terraform dostępny jest obecnie na 6 różnych platform, pobrać pakiety instalacyjne można ze strony Terraform.io. Sam proces instalacji opisany jest bardzo dobrze w dokumentacji Terraform.io.

Platformy na której Terraform jest dostępny.

Ważne jest, aby pobrać właściwą wersję w zależności od platformy systemowej.

Instalacji manualna w systemach GNU/Linux nie dokonamy poprzez uruchomienie instalatora, pliki muszą zostać przeniesione we wskazane miejsce, które znajduje się w zmiennej PATH.

Paczkę terraform można pobrać z repozytorium po jego wcześniejszym dodaniu do systemu lub skompilować ręcznie z repozytorium dostępnego na Git.

Użycie Terraform

Oczywiście przy budowie infrastruktury możesz użyć innych narzędzi, poczynając od ręcznego klikania, poprzez wsparcie PowerShell, CLI etc. Jednak prawdziwą siłą Terraform jest możliwość oddziaływania na środowisko na kilka sposobów. Poza instalacją możliwe są również zmiany oraz całkowite usunięcie wcześniejszej konfiguracji, dokładnie tej, która została utworzona przy pomocy konkretnego skryptu.

Terraform pozwala na współdziałanie z innymi narzędzie, poza wspomnianą chmurą publiczną mam tutaj na myśli Dockera, Kubernetesa czy Grafanę. Takie podejście daje znacznie większe możliwości konfiguracji środowiska, którego wymaga konkretna projekt.

Schemat infrastruktury, która ma zostać wdrożona zostaje zapisany w jednym lub (lepiej) w kilku plikach z rozszerzeniem .tf. Podział na kilka plików jest wygodniejszy. Takie podejście pozwala na rozdzielenie zmiennych, które tworzone są globalnie dla całego projektu. Możemy pójść dalej, jeżeli środowisko jest mocno skomplikowane każdy jego element można zapisać w oddzielnym pliku. Budując infrastrukturę w chmurze podział może być następujący:

  • Przygotowanie kontenera do przetrzymywania infrastruktury wraz z wybraniem lokalizacji,
  • Przygotowanie przestrzeni adresowej IP,
  • Budowa maszyn wirtualnych,
  • Dodanie do nich wymaganych komponentów, aplikacji, dodatkowych ustawień etc.

Tak przygotowane pliki możesz poddać krótkiej ścieżce sprawdzenia czy wszystko co zostało opisane działa poprawnie, ale bez konieczności wdrożenia. Gdy wszystkie pliki znajdują się we właściwych miejscach należy wydać kolejno polecenia:

  • terraform init – tutaj z serwerów Terraform pobrane zostaną wtyki, które są niezbędne do startu wdrożenia projektu.
  • terraform plan – sprawdzenie całego skryptu czy nie zawiera błędów
  • terraform apply – na koniec jeżeli wszystko w poprzednim punkcie przebiegło pomyślnie, możliwe jest wdrożenie całej infrastruktury produkcyjnie.

Gdyby jakaś część skryptu została zmieniona warto w pierwszym kroku przetestować czyli wykonać terraform plan a następnie wdrożyć czyli uruchomić polecenie terraform apply, o czym nieco później.

Warto wiedzieć, że Terraform przy każdym wdrożeniu zmian w infrastrukturze tworzy swoisty log w postaci pliku terraform.tfstate. Tego pliku nie powinno się modyfikować ręcznie, chyba że jesteśmy w 101% pewni, że wiemy co robimy inaczej będą problemy w przyszłości. Dostęp do tego pliku jest potrzebny przy kolejnych modyfikacjach z raczej oczywistego względu.

Co w przypadku gdy projekt został zakończony i nie chcemy już płacić za infrastrukturę? Tutaj należy zaprzyjaźnić się z poleceniem terraform destroy. Tak jak budowa i modyfikacje są automatyczne, tak samo możemy zrobić przy „zniszczeniu” infrastruktury. Działanie Terraform destroy jest odwrotne do terraform apply, to co zostało wdrożone zostanie teraz usunięte do ostatniej części konfiguracji.

Wdrożenie pierwszego projektu Terraform

Projekt jak to dumnie brzmi, ale chcę pokazać, że szybciej niż klikając będzie napisać (przekleić) kilka linii i osiągnąć zamierzony efekt. Szczególnie jeżeli czynności są powtarzalne i różnią się drobiazgami. W tej części wpisu nie chodzi o wdawanie się w szczegóły, ale o proces.

Czym będzie ten projekt? Stworzymy ResourceGroup (RG) w Microsoft Azure. Ok, teraz pytanie czym jest RG?, jest to mówiąc najprościej katalog w którym możemy trzymać naszą konfiguracje, która będzie rozdzielna z pozostałymi RG, ale jednocześnie będzie można jej zasoby przenosić. Co może przechowywać RG? Praktycznie wszystko poczynając od konfiguracji sieci, dysków kończąc na maszynach wirtualnych.

Pierwszym krokiem jest instalacja CLI (lokalnej linii poleceń, która wykona polecenia na koncie) dla Azure, aby możliwe było wykonanie naszego skryptu we właściwy sposób. Instalacja dla Windows oraz GNU/Linux w zależności od dystrybucji została opisana w dokumentacji. Po instalacji w konsoli/terminalu należy wykonać polecenie

po podaniu loginu oraz hasła powinno pojawić się potwierdzenie uwierzytelnienia w subskrybcji dla konta w chmurze.

Potwierdzenie zalogowania do konta w chmurze

Kolejnym krokiem jest stworzenie miejsca, które będzie przechowywać konfigurację Terraform. Tym miejscem niech będzie najzwyklejszy katalog na lokalnej maszynie. Katalog można stworzyć ręcznie lub w przypadku pracy w środowisku GNU/Linux oraz Windows przy pomocy polecenia.

Powyższe polecenia tworzą taki katalog dla GNU/Linux przy pomocy Bash oraz przy pomocy PowerShell (PS) w środowisku Windows.

Mając zainstalowane narzędzie do podłączenia do Azure, możemy przejść do wdrożenia naszego projektu. Wewnątrz utworzonego katalogu tworzymy plik main.tf do niego dodajemy

Powyższy kod ustawi jako dostawcę usługi chmurowej, Microsoft Azure, pozwoli na korzystanie z metod azurerm. Jednak najważniejszą częścią dla nas jest „azurerm_resource_group” „rg”, te 3 linijki utworzą ResourceGroup (RG) w lokalizacji westus2 wraz z nazwą myTFResourceGroup. „RG” jest również nazwą tego przedmiotu (itemu), ale wyłącznie dla Terraform, jako referencji (odnośnika) przy rozbudowie skryptu o kolejne elementy.

Mając prosty kod możemy zająć się jego wdrożeniem. Będąc nadal wewnątrz katalogu musimy pobrać zależne pakiety dla Terraform, w tym przypadku hashicorp/azurerm, potrwa to kilka minut, więc nie zamykaj okna.

w odpowiedzi powinna pojawić odpowiedź podobna do tej.

Pobranie zależnych pakietów dla Terraform

Po pobraniu zależności czas na przetestowanie kodu, czyli

Skrypt jest poprawny. Na tym etapie pominiemy ostrzeżenie o braku parametru -out.

Testowanie skryptu Terraform

Ostatnim krokiem będzie wdrożenie produkcyjne naszego skryptu, z pomocą przyjdzie

W odpowiedzi pojawi się poniższy widok

Akceptacja wdrożenia skryptu Terraform

Na samym końcu po frazie Enter a value należy wpisać yes. Dopiero wtedy zaplanowana infrastruktura czyli w tym przypadku RG zostanie dodana.

Potwierdzenie utworzenia ResourceGroup na koncie Microsoft Azure

W tym samym czasie Terraform doda plik stanu (terraform.tfstate), w nim znajdą się informacje o utworzonym rozwiązaniu. Można się do niego dostać przy pomocy polecenia

W odpowiedzi powinien pojawić się „log” z dotychczasowych działań.

Obecny status Terraform

I gotowe, jednak okazuje się, że zapomnieliśmy dodać dodatkowych informacji, które na liście naszych RG pozwolą łatwiej znaleźć świeżo stworzoną grupę. Co zrobić? Usunąć i zaczynać od nowa, czy może… W łatwy sposób dokonać update naszej grupy.

Chcemy dodać opcjonalną rzecz jaką jest tag w konfiguracji ResourceGroup, pozwala on na filtrowanie naszych zasobów po dodatkowych opisach.

Jako że wykonujemy update naszej konfiguracji trzeba o tym poinformować Terraform. Pomijamy w tym przypadku init, ponieważ nie dodajemy nowych funkcjonalności z listy Terraform Azure, a jedynie rozszerzamy to co mamy już zrobione, dlatego utworzymy dodatkowy plik z aktualizacją przy pomocy -out.

W odpowiedzi informacja co zostanie dodane do poprzedniej wersji.

Planowanie dodania nowej wersji skryptu

Następnie musimy wdrożyć dodatkową konfigurację używając nowego planu (newplan).

Pojawi się potwierdzenie, że tym razem dokonane zostały zmiany w infrastrukturze.

Rozszerzenie infrastruktury o tag w ResourceGroup

Ponownie możliwe jest podejrzenie obecnego stanu przy pomocy

Potwierdzenie aktualizacji statusu RG

Na koniec możemy usunąć grupę, jeżeli nie jest potrzebna. W tym celu wykorzystamy

Terraform zaznaczy co zostanie usunięte poprzez znak „-” przy każdym wierszu naszego skryptu.

Usunięcie RG z naszego konta

W wierszu Enter a value należy dodatkowo potwierdzić poprzez yes te kroki, jest to zabezpieczenie przed przypadkowym usunięciem działającej i potrzebnej infrastruktury.

Podsumowanie

W ten sposób można przyspieszyć sobie zarówno tworzenie, aktualizację jak i usunięcie infrastruktury IT w chmurze publicznej.


Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT