Terraform Init polecenie w konsoli

Terraform – Infrastruktura jako kod. Jak zacząć? (Hetzner przykład)

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

  1. Pobierz Terraform:
    • Przejdź na stronę Terraform Downloads.
    • Pobierz odpowiednią wersję dla systemu Windows (plik ZIP).
  2. Rozpakuj plik:
    • Rozpakuj pobrany plik ZIP do folderu, w którym chcesz zainstalować Terraform (np. C:\Program Files\Terraform).
  3. 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.
  4. Sprawdź instalację:
    • Otwórz wiersz poleceń (cmd) i wpisz:
      terraform -version

Instalacja Terraform na systemie macOS

  1. Zainstaluj Homebrew:
    • Otwórz terminal i wpisz:
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Zainstaluj Terraform:
    • W terminalu wpisz:
      brew install terraform
  3. Sprawdź instalację:
    • W terminalu wpisz:
      terraform -version

Instalacja Terraform na systemie Linux

  1. Pobierz Terraform:
    • Przejdź na stronę Terraform Downloads.
    • Pobierz odpowiednią wersję dla systemu Linux (zazwyczaj plik ZIP lub tar.gz).
  2. 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
  3. Przenieś plik do folderu /usr/local/bin:
    • W terminalu wpisz:
      sudo mv terraform /usr/local/bin/
  4. Sprawdź instalację:
    • W terminalu wpisz:
      terraform -version

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.tfvarspliku.

# 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ż hcloudwtyczkę 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 namehcloud), 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

Terraform Init polecenie w konsoli

Gratulacje! Udało Ci się zainstalować hcloud wtyczkę dostawcy!

Tworzenie serwera za pomocą Terraform

Otwieramy nasz hcloud.tfplik 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.04i typie serwera cx22. Gdy teraz uruchomisz polecenie:

terraform plan

Zobaczysz listę rzeczy zaplanowanych do uruchomienia/wykonania na liście, w naszym przykładzie:

terraform plan

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:

Terraform create vm

 

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.

 

Rate this post

Autor

Dominik Piestrzyński

Specjalizuje się w działaniach SEO oraz wsparciu IT. Automatyzuje procesy i wykorzystuje technologie do poprawy wyników biznesowych w organizacjach. Od lat pracuje aktywnie w sektorze IT i przygotowuje strategie pomagające zwiększyć ruch organiczny na stronach. Rozwijam również środowiska automatyzacji o LLMy.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


The reCAPTCHA verification period has expired. Please reload the page.