Tabela skrótów Terraform - przydatne polecenia i przykłady

Lista wszystkich poleceń terraform

Page content

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.

student using terraform

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"
  • 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 lub TF_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