#1 Terraform instalacja i konfiguracja

Print Friendly, PDF & Email

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