Terraform to narzędzie open source służące do deklaratywnego zarządzania infrastrukturą w chmurze. Pozwala na automatyzację procesu wdrażania i zarządzania zasobami, takimi jak wirtualne maszyny, sieci, kontenery, bazy danych, itp. Narzędzie to działa na zasadzie deklaratywnego języka programowania, który pozwala na opisanie pożądanej konfiguracji infrastruktury, a następnie tworzy, modyfikuje lub usuwa zasoby w chmurze w sposób konsekwentny i przewidywalny.  

Terraform może być wykorzystywany do zarządzania infrastrukturą w chmurze publicznej (takiej jak Amazon Web Services, Microsoft Azure, Google Cloud Platform, itp.) lub w prywatnej. Pozwala na zarządzanie infrastrukturą w sposób programistyczny, co oznacza, że ​​programiści mogą traktować infrastrukturę jak kod i zarządzać nią za pomocą procesów takich jak wersjonowanie kodu, testowanie jednostkowe, itp. 

Jednym z największych atutów Terraform jest to, że pozwala na zarządzanie infrastrukturą jako kodem. Oznacza to, że ​​proces tworzenia, modyfikowania lub usuwania zasobów jest w pełni zautomatyzowany i przewidywalny. Narzędzie to pozwala na tworzenie wersji infrastruktury, dzięki czemu można łatwo przenieść całą konfigurację z jednej chmury do innej lub na przykład uruchamiać różne środowiska (produkcja, testowe, staging) na tym samym kodzie. 

Terraform jest łatwy w obsłudze, posiada duże wsparcie społeczności i może być używany na wielu systemach operacyjnych, a jego konfiguracja jest zapisywana w prostych plikach tekstowych, co ułatwia kontrolę wersji i automatyzację. 

Terraform – zalety  

Terraform oferuje wiele korzyści i zalet dla osób i organizacji zajmujących się zarządzaniem infrastrukturą w chmurze. Jakie są najważniejsze zalety Terraform? 

  1. Deklaratywny język programowania:  
    Dzięki deklaratywnemu językowi programowania programiści mogą traktować infrastrukturę jak kod i zarządzać nią za pomocą procesów takich jak wersjonowanie kodu, testowanie jednostkowe, itp.  
  2. Automatyzacja:  
    Dzięki automatyzacji można zaoszczędzić czas i uniknąć błędów wynikających z ręcznego zarządzania infrastrukturą.  
  3. Przenośność:  
    Dzięki temu, że Terraform pozwala na zarządzanie infrastrukturą w różnych chmurach publicznych, takich jak Amazon Web Services, Microsoft Azure, Google Cloud Platform, itp. można łatwo przenieść całą konfigurację z jednej chmury do innej lub na przykład uruchamiać różne środowiska (produkcja, testowe, staging) na tym samym kodzie. 
  4.  Konsekwencja:  
    Terraform zapewnia konsekwentne tworzenie, modyfikowanie i usuwanie zasobów w chmurze. Dzięki temu, można uniknąć błędów związanych z niewłaściwą konfiguracją zasobów i zapewnić spójność pomiędzy różnymi środowiskami. 
  5. Łatwość nauki i używania:  
    Narzędzie to jest łatwe w nauce i obsłudze. Posiada dużo wsparcie społeczności, co oznacza, że ​​dostępne są wiele źródeł informacji i dokumentacji, a także setki modułów gotowych do użycia. Terraform może być używany na wielu systemach operacyjnych, a jego konfiguracja jest zapisywana w prostych plikach tekstowych, co ułatwia kontrolę wersji i automatyzację. 
  6. Bezpieczeństwo:  
    Kontrola dostępu do zasobów w chmurze poprzez integrację z mechanizmami autoryzacji i uwierzytelniania, takimi jak OAuth, IAM, Active Directory zapewnia bezpieczeństwo.  
  7. Modułowość:  
    Tworzenie modułów, które można ponownie wykorzystywać w różnych projektach lub środowiskach pozwala na zwiększenie efektywności pracy i chroni przed duplikacją kodu.
  8.  Szybkość i skuteczność:  
    W przypadku tego narzędzia możliwe jest szybkie tworzenie, modyfikowanie i usuwanie zasobów w chmurze. Można dzięki temu łatwo skalować infrastrukturę zależnie od aktualnych potrzeb.  
  9. Śledzenie zmian:  
    Narzędzie Terraform pozwala na śledzenie zmian w konfiguracji infrastruktury i automatyczne stosowanie tych zmian. Dzięki temu można szybko reagować na zmieniające się wymagania biznesowe i uniknąć błędów związanych z niewłaściwą konfiguracją. 
  10. Współpraca:  
    Współpraca pomiędzy różnymi członkami zespołu i organizacjami poprzez integrację z narzędziami kontroli wersji, takimi jak Git. pozwala na dzielenie się kodem oraz śledzenie i weryfikację zmian.  
  11. Wizualizacja:  
    Wizualizacja infrastruktury za pomocą grafów zależności pozwala na zrozumienie jak różne zasoby są ze sobą powiązane i jakie występują między nimi zależności.  
  12. Ciągła integracja i dostarczanie:  
    Terraform pozwala na integrację z narzędziami ciągłej integracji i dostarczania, takimi jak Jenkins, Travis CI czy CircleCI. Dzięki temu można łatwo wdrożyć infrastrukturę w chmurze i przyspieszyć proces wdrażania aplikacji. 
  13. Bezpieczeństwo:  
    Szyfrowanie danych, zarządzanie kluczami dostępu i ograniczanie uprawnień zapewniają bezpieczeństwo użytkowania narzędzia. 
  14. Elastyczność:  
    Terraform pozwala na elastyczne zarządzanie infrastrukturą, umożliwiając zmiany na poziomie kodu. Dzięki temu można łatwo dostosować infrastrukturę do zmieniających się potrzeb biznesowych
  15. Rozszerzalność:  
    Dzięki łatwemu dodawaniu nowych dostawców usług chmurowych oaz własnych modułów i wtyczek rozszerzalność nie jest problemem. Można z łatwością dostosować narzędzie do indywidualnych potrzeb organizacji. 
  16. Dokumentacja:  
    Narzędzie posiada dobrą dokumentację, która zawiera wiele przykładów użycia, co ułatwia naukę i korzystanie z narzędzia.
  17. Społeczność: 
    Aktywna społeczność użytkowników, która dzieli się wiedzą i doświadczeniem oraz rozwija narzędzie poprzez tworzenie nowych modułów i wtyczek to niepodwarzalna zaleta Terraform. Dzięki temu, można łatwo uzyskać pomoc i wsparcie w razie problemów z narzędziem. 

Terraform – kod

Niżej przedstawiamy przykładowy fragment kodu Terraform. To bardzo prosty kod pozwalający na uruchomienie maszyny wirtualnej z systemem Linux – Debian, z niewielkim dyskiem oraz możliwością podłączenia się po SSH. 

To tylko fragment kodu stanowiący podstawowy zarys jak wygląda sposób zapisu. Nie jest to kompletny kod, gdyż wykracza ona poza ogólny zarys wiedzy o narzędziu. 

Kod ten zawiera definicję maszyny wirtualnej na platformie vSphere. Wewnątrz definicji, znajduje się blok provisioner, który zawiera polecenia do zainstalowania wymaganych usług. Po instalacji, Terraform umożliwia połączenie z maszyną wirtualną przy użyciu połączenia SSH i wykonanie dalszych kroków konfiguracyjnych, takich jak dodanie użytkowników, ustawienie konfiguracji sieciowej itp. 

Terraform to język deklaratywny, co oznacza, że w kodzie definiujemy stan docelowy infrastruktury, a nie kroki, jakie należy wykonać, aby osiągnąć ten stan. Składnia języka jest tutaj bardzo czytelna i opiera się na definicji bloków i zmiennych.

Podstawowym elementem składni Terraform jest blok. Blok definiuje konstrukcję, która określa pewien aspekt infrastruktury, tak jak np. instancja wirtualna w chmurze. Blok składa się z nagłówka, który określa typ bloku oraz jego atrybuty, które definiują cechy danego bloku.

Przykład np. dla chmury AWS.

Narzędzie posiada również szereg funkcji umożliwiających manipulację wartościami w trakcie przetwarzania konfiguracji. Do najważniejszych z nich należą:

output:

umożliwia zwrócenie wartości zdefiniowanych w bloku jako wynik działania konfiguracji.

locals:

umożliwia definiowanie zmiennych lokalnych wewnątrz bloku, co pozwala na ich wielokrotne wykorzystanie.

module:

umożliwia wielokrotne wykorzystanie określonego zestawu bloków w różnych częściach konfiguracji.

W powyższym przykładzie output zwraca identyfikator instancji, locals definiuje zmienną lokalną instance_type, a module definiuje użycie modułu web_server, który przyjmuje jako argumenty typ instancji oraz region.

Terraform pozwala również na użycie warunków i pętli, co umożliwia bardziej elastyczne i złożone definiowanie konfiguracji.

W powyższym przykładzie count definiuje liczbę instancji, która ma zostać utworzona w zależności od wartości zmiennej instance_count.

Składnia języka Terraform jest bardzo elastyczna i pozwala na definiowanie niemal każdej infrastruktury w chmurze w sposób zdeklarowany i powtarzalny. Odpowiednie wykorzystanie bloków, zmiennych i modułów pozwala na budowanie konfiguracji w sposób modułowy i skalowalny.

Terraform – podsumowanie

Mając świadomość tego jak bardzo duże możliwości posiada Terraform i jak wiele można dzięki niemu zyskać nie sposób nie stwierdzić, że niniejszy artykuł stanowi jedynie zarys możliwości i wstęp do prawdziwej zabawy i pracy z językiem Terraform.