Automatyzacja uruchamiania infrastruktury na przykładzie Terraform u dostawcy Hetzner. Powołamy do życia maszynę wirtualną z pozycji kodu. Czyli jak zacząć przygodę z Terraforom.
Terraform – co to właściwie jest?
Terraform to narzędzie do zarządzania infrastrukturą jako kodem (Infrastructure as Code, IaC), stworzone przez firmę HashiCorp. Umożliwia użytkownikom definiowanie, konfigurowanie i zarządzanie infrastrukturą w sposób zautomatyzowany i powtarzalny. Oto kluczowe cechy i zalety Terraform:
1. Definiowanie infrastruktury: Użytkownicy mogą opisać swoją infrastrukturę w plikach konfiguracyjnych (najczęściej w formacie HCL – HashiCorp Configuration Language). Dzięki temu infrastruktura może być łatwo wersjonowana i śledzona, podobnie jak kod źródłowy.
2. Obsługa wielu dostawców: Terraform wspiera wiele dostawców chmury (np. AWS, Azure, Google Cloud) oraz usług, co pozwala na zbudowanie złożonej infrastruktury z wykorzystaniem różnych technologii.
3. Zarządzanie cyklem życia: Terraform umożliwia automatyczne tworzenie, modyfikowanie i usuwanie zasobów w infrastrukturze. Użytkownicy mogą wprowadzać zmiany w plikach konfiguracyjnych, a Terraform oblicza różnice i wprowadza odpowiednie zmiany w infrastrukturze.
4. Planowanie zmian: Przed wprowadzeniem zmian w infrastrukturze, Terraform generuje plan działania, który pokazuje, jakie zasoby zostaną utworzone, zmodyfikowane lub usunięte. Dzięki temu użytkownicy mogą zobaczyć, jakie zmiany zostaną wprowadzone przed ich zastosowaniem.
5. Modularność: Terraform wspiera moduły, co pozwala na reużywanie kodu i organizowanie konfiguracji w bardziej zrozumiały i zarządzalny sposób.
6. Stanowanie: Terraform przechowuje stan infrastruktury w pliku stanu, co pozwala na śledzenie aktualnych zasobów i ich konfiguracji.
Terraform jest szeroko stosowany w DevOps i administracji systemami, ponieważ umożliwia automatyzację procesów zarządzania infrastrukturą, co prowadzi do większej efektywności i mniejszej liczby błędów.
Instalacja Terraform
Instalacja Terraform na systemie Windows
- Pobierz Terraform:
- Przejdź na stronę Terraform Downloads.
- Pobierz odpowiednią wersję dla systemu Windows (plik ZIP).
- Rozpakuj plik:
- Rozpakuj pobrany plik ZIP do folderu, w którym chcesz zainstalować Terraform (np.
C:\Program Files\Terraform
).
- Rozpakuj pobrany plik ZIP do folderu, w którym chcesz zainstalować Terraform (np.
- Dodaj Terraform do zmiennej PATH:
- Otwórz Panel sterowania > System i zabezpieczenia > System > Zaawansowane ustawienia systemu.
- Kliknij „Zmienne środowiskowe” i znajdź zmienną
Path
w sekcji „Zmienne systemowe”. - Kliknij „Edytuj” i dodaj ścieżkę do folderu, w którym umieściłeś plik
terraform.exe
.
- Sprawdź instalację:
- Otwórz wiersz poleceń (cmd) i wpisz:
terraform -version
- Otwórz wiersz poleceń (cmd) i wpisz:
Instalacja Terraform na systemie macOS
- Zainstaluj Homebrew:
- Otwórz terminal i wpisz:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Otwórz terminal i wpisz:
- Zainstaluj Terraform:
- W terminalu wpisz:
brew install terraform
- W terminalu wpisz:
- Sprawdź instalację:
- W terminalu wpisz:
terraform -version
- W terminalu wpisz:
Instalacja Terraform na systemie Linux
- Pobierz Terraform:
- Przejdź na stronę Terraform Downloads.
- Pobierz odpowiednią wersję dla systemu Linux (zazwyczaj plik ZIP lub tar.gz).
- Rozpakuj plik:
- W terminalu, użyj poniższego polecenia, aby rozpakować plik (zastąp
VERSION
odpowiednią wersją):unzip terraform_VERSION_linux_amd64.zip
- lub dla pliku tar.gz:
tar -xvf terraform_VERSION_linux_amd64.zip
- W terminalu, użyj poniższego polecenia, aby rozpakować plik (zastąp
- Przenieś plik do folderu
/usr/local/bin
:- W terminalu wpisz:
sudo mv terraform /usr/local/bin/
- W terminalu wpisz:
- Sprawdź instalację:
- W terminalu wpisz:
terraform -version
- W terminalu wpisz:
Wygeneruj swój klucz SSH
Klucze SSH. Jako administrator musisz umieć to robić. Wygeneruj swój klucz. Będzie on potrzebny do łączności z przyszłym dostawcą usług chmurowych.
ssh-keygen -t ed25519 -C "TwojaNazwa BezPolskichZnakow" -f ~/.ssh/TwojaNazwaIndetyfikujacaKlucz
Teraz wyświetl klucz publiczny i umieść go u swojego dostawcy.
cat ~/.ssh/TwojaNazwaIndentyfikujacaKlucz.pub
Generalnie nie jest to istotne czy używasz AWS, Google Cloud, OVH Cloud czy Hetzner. W większości przypadków wygląda to podobnie. Ważne by Twój dostawca wspierał obsługę Terraform.
Dodatkowa rekomendacja: Pamiętaj o zabezpieczeniu konta za pomocą kluczy fizycznych/OTP/Aplikacji do MFA.
Konfiguracja Terraform dla usług w Hetzner
Utworzymy sobie katalog: np. terraform:
mkdir terraform
Następnie w nim utworzymy kilka plików:
touch hcloud.tf
touch variables.tf
touch terraform.tfvars
Skonfigurujmy naszego dostawcę. W moim przypadku będzie to Hetzner. Utworzyłem wcześniej klucz API na portalu klienta oraz dodałem tam swój publiczny klucz SSH. Następnie do pliku hcloud.tf umieszczam taki zestaw:
# Set the variable value in *.tfvars file
# or using the -var="hcloud_token=..." CLI option
variable "hcloud_token" {}
# Configure the Hetzner Cloud Provider
provider "hcloud" {
token = "${var.hcloud_token}"
}
# Create a server
resource "hcloud_server" "web" {
# ...
}
W tym kodzie mówimy Terraform, że damy mu zmienną o nazwie hcloud_token
. Możesz określić wartość tej zmiennej, używając opcji CLI lub używając terraform.tfvars
pliku.
# Configure the Hetzner Cloud Provider
provider "hcloud" {
token = "${var.hcloud_token}"
}
Tutaj informujemy Terraform, że chcemy użyć dostawcy hcloud
. Terraform pobierze najnowszą wersję wtyczki dostawcy na terraform init
. Konfigurujemy również hcloud
wtyczkę dostawcy za pomocą zmiennej hcloud_token
.
Teraz przejdźmy do pliku variables.tf
Najpierw skopiujemy poniższy przykład do pliku.
terraform {
required_providers {
hcloud = {
source = "hetznercloud/hcloud"
}
}
required_version = ">= 0.13"
}
Każdy moduł Terraform musi zadeklarować, których dostawców potrzebuje, aby Terraform mógł ich zainstalować i używać. Wymagania dostawców są deklarowane w required_providers
.
Wymagania dostawców składają się z lokalnego name
( hcloud
), source
lokalizacji ( hetznercloud/hcloud
) i version
ograniczenia. W naszym przypadku dodajemy tylko: source
który wymusza na Terraform użycie najnowszej wersji dostawcy.
required_version = ">= 0.13"
Ustawienie required_version
akceptuje ciąg ograniczający wersję, który określa, które wersje Terraform mogą być używane w Twojej konfiguracji. W naszym przypadku używamy wersji v0.13 lub nowszej.
Teraz powinieneś utworzyć terraform.tfvars
plik, który będzie zawierał następującą zawartość:
hcloud_token = "YOUR_API_TOKEN"
W nim umieszczam TOKEN API, który wcześniej wygenerowałem w panelu klienta w Hetzner
Mamy to! Teraz możemy już zainicjajizować połączenie.
Aby to zrobić wykonaj polecenie:
terraform init
Gratulacje! Udało Ci się zainstalować hcloud
wtyczkę dostawcy!
Tworzenie serwera za pomocą Terraform
Otwieramy nasz hcloud.tf
plik i przechodzimy do resource "hcloud_server" "web"
sekcji. Zastąpimy ją następującym fragmentem kodu:
# Create a server
resource "hcloud_server" "dev" {
name = "Hello-Server"
image = "ubuntu-24.04"
server_type = "cx22"
}
Spowoduje to utworzenie nowego serwera o nazwie Hello-Server, obrazie ubuntu-24.04
i typie serwera cx22
. Gdy teraz uruchomisz polecenie:
terraform plan
Zobaczysz listę rzeczy zaplanowanych do uruchomienia/wykonania na liście, w naszym przykładzie:
Jeśli chcemy, aby słowo stało się maszyna wirtualna to wystarczy wprowadzić polecenie apply:
terraform apply
Powinieneś zobaczyć świeżo utworzony serwer CX22 w Hetner Cloud Console. Powinieneś otrzymać podobną odpowiedź, jak poniżej:
Aby zniszczyć, wystarczy wybrać
terraform destroy
To były tylko testy i nie chcemy płacić za maszynę pozostawioną bez opieki 😉
Prawda, że proste? W ten sposób możesz przygotowywać również konfiguracje sieci, firewalla i wielu innych. Dzięki temu powoływanie do życia środowiska po katastrofie czy w ramach backupu może być zdecydowanie łatwiejsze i przyjemniejsze 🙂
W następnym wpisie z tej serii, pokaże jak można zautomatyzować działania na wielu maszynach jednocześnie za pomocą Ansible.