Tabela skrótów Terraform - przydatne polecenia i przykłady
Lista wszystkich poleceń terraform
Oto kompletny Terraform cheatsheet z istotnymi komendami, elementami konfiguracji, zarządzaniem zasobami, modułami, zmiennymi, obsługa stanu oraz najlepszymi praktykami.
Terraform to open-source narzędzie do infrastruktury jako kod (IaC) opracowane przez HashiCorp, które umożliwia użytkownikom definiowanie i wdrażanie infrastruktury na wielu dostawcach chmurowych (np. AWS, Azure, GCP) przy użyciu deklaratywnych plików konfiguracyjnych. Głównym celem Terraform jest automatyzacja wdrażania infrastruktury, zapewnienie spójności oraz zmniejszenie błędów ręcznych. Terraform obsługuje multi-chmurę, modularne oraz stanowe przepływy pracy, co czyni z niego fundament współczesnych praktyk DevOps.
Główne zalety Terraform:
- Deklaracyjna składnia: Definiuj pożądany stan infrastruktury w kodzie.
- Neutralność wobec dostawców: Działa z AWS, Azure, GCP, Kubernetes i wielu innymi.
- Zarządzanie stanem: śledzi zmiany infrastruktury, aby uniknąć konfliktów.
Przewodnik instalacji i konfiguracji
https://developer.hashicorp.com/terraform/tutorials#get-started
Proces instalacji Terraform jest dość prosty.
-
Linux (Ubuntu/Debian):
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
-
Windows (WSL):
wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip unzip terraform.zip
-
macOS (Homebrew):
brew install terraform
Weryfikacja
terraform --version
Komendy CLI Terraform
Oto lista wszystkich komend Terraform:
Komenda | Opis |
---|---|
terraform init |
Inicjalizuje nowy lub istniejący katalog konfiguracji Terraform |
terraform validate |
Sprawdza, czy konfiguracja jest poprawna |
terraform plan |
Pokazuje plan wykonania bez wprowadzania zmian |
terraform apply |
Zastosuje zmiany wymagane do osiągnięcia pożądanego stanu |
terraform destroy |
Zniszczy infrastrukturę zarządzaną przez Terraform |
terraform fmt |
Przeformatuje pliki konfiguracyjne w standardowym stylu |
terraform show |
Pokazuje aktualny stan lub plan |
terraform refresh |
Aktualizuje stan z rzeczywistej infrastruktury |
terraform providers |
Wyświetla dostawców używanych w konfiguracji |
terraform graph |
Wizualizuje zależności zasobów jako graf |
terraform workspace list |
Wyświetla wszystkie dostępne przestrzenie robocze |
terraform workspace new |
Tworzy nową przestrzeń roboczą |
terraform workspace select |
Przełącza się na określoną przestrzeń roboczą |
terraform workspace show |
Pokazuje nazwę bieżącej przestrzeni roboczej |
terraform workspace delete |
Usuwa określoną przestrzeń roboczą |
terraform output |
Pokazuje wartości wyjściowe z pliku stanu |
terraform import |
Importuje istniejący zasób do Terraform |
terraform taint |
Oznacza zasób do ponownego utworzenia przy następnym apply |
terraform untaint |
Usuwa oznaczenie zasobu jako zatęchony |
terraform state list |
Lista zasobów w pliku stanu |
terraform state show |
Pokazuje atrybuty pojedynczego zasobu w stanie |
Esencjalne elementy konfiguracji
Rozszerzenia plików
.tf
: Główne pliki konfiguracyjne (syntax HCL).tfvars
: Wartości zmiennych
Typy bloków Terraform
- Przykład dostawcy
provider "aws" { region = "us-east-1" }
- Przykład zasobu
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" }
- Przykład zmiennej
variable "instance_count" { type = number default = 2 }
- Przykład wyjścia
output "instance_ip" { value = aws_instance.web.public_ip }
- Przykład modułu
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
Praca z zmiennymi
- Deklarowanie zmiennych
variable "region" { description = "AWS region" default = "us-east-1" }
- Przypisywanie wartości
- CLI:
terraform apply -var="region=us-west-2"
- plik tfvars:
terraform apply -var-file="prod.tfvars"
- CLI:
- Typy:
string
,number
,bool
,list
,map
,object
Zarządzanie stanem
- Plik stanu:
terraform.tfstate
- Stan zdalny (przykład S3)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" }
- Wyświetlanie stanu:
terraform show
terraform state list
Pętle i warunki
- Liczba
resource "aws_instance" "web" { count = 3 ... }
- For_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value }
- Warunki
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
Funkcje
- Interpolacja ciągów:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
- Przykłady list, map:
locals { my_map = { a = 1, b = 2 } }
Provisionery
Używane do wdrażania zasobów. Przykład:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo Instance created"
}
}
Najlepsze praktyki
- Kontroluj wersję wszystkich plików
.tf
- Zablokuj wersje dostawców, aby zapewnić spójne wdrożenia
- Zdalny backend do zarządzania stanem (S3, Azure Blob itp.)
- Szyfruj pliki stanu w zdalnych backendach
- Modularyzuj infrastrukturę przy użyciu ponownie wykorzystywalnych modułów
- Dokumentuj swoje konfiguracje
- Testuj w środowisku testowym przed produkcją
Dodatkowe odniesienia
- Pomoc:
terraform --help
lub[komenda] --help
dla pomocy specyficznej dla komendy - Debugowanie: Ustaw
TF_LOG=INFO
lubTF_LOG=DEBUG
dla szczegółowych logów - Formatowanie:
terraform fmt
Ten cheatsheet dostarcza szybkiego dostępu do najczęściej i zaawansowanych aspektów użycia Terraform – od komend do najlepszych praktyk – czyniąc go praktycznym zarówno dla początkujących, jak i zaawansowanych użytkowników. Mamy nadzieję, że spędzą Państwo przyjemny dzień!
Przydatne linki
- https://developer.hashicorp.com/terraform
- Docker Cheatsheet
- Docker Compose Cheatsheet - Najbardziej przydatne komendy z przykładami
- Kubernetes Cheatsheet
- Wdrażanie projektu Flutter z backendem na AWS Amplify
- Wdrażanie strony wygenerowanej przez Hugoa na AWS S3
- Wydajność AWS Lambda: JavaScript vs Python vs Golang
- Warstwowe Lambdy z AWS SAM i Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio jako alternatywa dla AWS S3. Omówienie i instalacja Minio