Terraform — co to jest i jak działa?

Terraform to narzędzie Infrastructure as Code do zarządzania chmurą jako kodem. Poznaj HCL, kluczowe pojęcia (Provider, Resource, Module, State) i workflow wdrożeń.

Czym jest Terraform?

Terraform to open-source'owe narzędzie Infrastructure as Code (IaC) firmy HashiCorp. Pozwala definiować infrastrukturę chmurową (AWS, Azure, GCP, Kubernetes i ponad 1700 innych providerów) w deklaratywnym języku HCL (HashiCorp Configuration Language).

Zamiast ręcznie tworzyć zasoby w konsolach chmurowych — opisujesz pożądany stan w plikach .tf i Terraform sam oblicza różnicę między aktualnym a pożądanym stanem, po czym wykonuje niezbędne zmiany. Infrastructure as Code to dziś standard w DevOps i Platform Engineering.

# Przykład: tworzenie EC2 i S3 na AWS

resource "aws_instance" "web" {

ami = "ami-0c55b159cbfafe1f0"

instance_type = "t3.micro"

tags = { Name = "web-server" }

}


resource "aws_s3_bucket" "assets" {

bucket = "my-company-assets-2024"

}

Kluczowe pojęcia Terraform

Provider

Plugin łączący Terraform z zewnętrznym API (AWS, Azure, GCP, GitHub, Kubernetes, Cloudflare, itp.). Każdy provider dodaje zasoby i data sources.

provider "aws" {
  region = "eu-west-1"
}

Resource

Podstawowy budulec infrastruktury — instancja EC2, bucket S3, baza RDS. Każdy resource ma typ (aws_instance) i konfigurację.

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-company-assets"
  tags   = { Environment = "production" }
}

Variable

Zmienne wejściowe parametryzujące konfigurację. Typy: string, number, bool, list, map, object. Wartości z CLI, .tfvars lub environment.

variable "environment" {
  type        = string
  default     = "staging"
  description = "Deployment environment"
}

Output

Wartości eksportowane po apply — np. IP serwera, ARN zasobu. Używane do przekazywania danych między modułami.

output "instance_ip" {
  value       = aws_instance.web.public_ip
  description = "Public IP of web server"
}

Module

Wielokrotnego użytku paczka konfiguracji. Enkapsuluje grupę zasobów z wejściami i wyjściami. Może być lokalny lub z Terraform Registry.

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"
  cidr    = "10.0.0.0/16"
}

State

Terraform śledzi stan infrastruktury w terraform.tfstate. Dla teamów — remote state (S3 + DynamoDB locking). Terraform Cloud oferuje managed state.

terraform {
  backend "s3" {
    bucket         = "tf-state-prod"
    key            = "app/terraform.tfstate"
    region         = "eu-west-1"
    dynamodb_table = "tf-locks"
  }
}

Workflow Terraform

terraform init

Inicjalizuje katalog roboczy, pobiera providery i moduły z registry. Uruchom po każdej zmianie providerów.

Kiedy: Raz na projekt, po dodaniu nowych providerów

terraform validate

Sprawdza poprawność składni HCL. Szybki check bez łączenia z API.

Kiedy: Przed każdym planem, w CI pipeline

terraform plan

Pokazuje plan zmian: co zostanie created (+), modified (~), destroyed (-). Nic nie zmienia — tylko analiza.

Kiedy: Przed każdym apply, review przez team

terraform apply

Wykonuje zmiany z planu. Pyta o potwierdzenie (lub -auto-approve w CI). Aktualizuje state file.

Kiedy: Po zaakceptowaniu planu przez team

terraform destroy

Usuwa wszystkie zarządzane zasoby. Używaj ostrożnie! Dobry do teardown środowisk dev/test.

Kiedy: Teardown środowisk, oszczędność kosztów

Best Practices Terraform

Remote State

Krytyczne

Przechowuj state w S3 + DynamoDB (locking) lub Terraform Cloud. Lokalny state nie nadaje się do pracy zespołowej.

Moduły dla reużywalności

Wysoka

Enkapsuluj powtarzające się wzorce w moduły (VPC, EKS cluster, RDS). Moduły z wersjonowaniem.

Workspace lub katalogi

Wysoka

Separacja środowisk: osobne workspace (prod/staging/dev) lub osobne katalogi z różnymi tfvars.

Plan w CI/CD

Wysoka

terraform plan automatycznie w pull requestach — diff infra zmiany widoczny w code review.

Nie commituj .tfstate

Bezpieczeństwo

.gitignore dla terraform.tfstate i .tfvars z sekretami. State zawiera sensitive data.

Terraform fmt i validate

Standardy kodu

terraform fmt --recursive formatuje kod. Pre-commit hooks dla automatycznego formatowania.

FAQ — Terraform

Co to jest Terraform?

Terraform to open-source'owe narzędzie Infrastructure as Code (IaC) firmy HashiCorp, wydane w 2014 roku. Terraform pozwala definiować, planować i tworzyć infrastrukturę chmurową (AWS, Azure, GCP, Kubernetes i setki innych) w deklaratywnym języku HCL (HashiCorp Configuration Language). Zamiast ręcznie klikać w konsoli — opisujesz pożądany stan infrastruktury w plikach .tf, a Terraform sam tworzy/modyfikuje/usuwa zasoby.

Czym jest IaC (Infrastructure as Code)?

Infrastructure as Code (IaC) to podejście do zarządzania infrastrukturą IT jak kodem: przechowywanie w systemie kontroli wersji (Git), code review, testowanie, automatyzacja. IaC eliminuje ręczne konfigurowanie serwerów ('snowflake servers'), zapewnia powtarzalność (identyczne środowiska dev/staging/prod), audytowalność (historia zmian w Git) i możliwość szybkiego odtworzenia infrastruktury. Główne narzędzia IaC: Terraform, Pulumi, AWS CloudFormation, Ansible.

Jak działa terraform plan i terraform apply?

Terraform działa w trzech krokach: terraform init — pobiera wymagane providery (AWS, Azure, Google), terraform plan — pokazuje co zostanie zmienione (created/modified/destroyed) bez faktycznego wykonania — 'dry run', terraform apply — faktycznie tworzy/modyfikuje/usuwa zasoby zgodnie z planem i aktualizuje state file. State file (terraform.tfstate) przechowuje aktualny stan infrastruktury. Dla pracy zespołowej state przechowuje się zdalnie (S3 + DynamoDB, Terraform Cloud).

Co to są Terraform Modules?

Terraform Modules to wielokrotnego użytku paczki konfiguracji Terraform — jak funkcje w programowaniu. Moduł enkapsuluje zestaw zasobów z wejściami (variables) i wyjściami (outputs). Przykład: moduł 'vpc' przyjmuje parametry (cidr_block, region) i tworzy cały VPC z subnetami, routing tables, NAT Gateway. Terraform Registry (registry.terraform.io) oferuje setki gotowych modułów dla AWS, Azure, GCP. Moduły zapewniają DRY (Don't Repeat Yourself) i standaryzację infrastruktury.

Terraform vs Ansible — różnice?

Terraform i Ansible służą różnym celom. Terraform to narzędzie do provisioningu infrastruktury — tworzy i zarządza zasobami cloud (EC2, VPC, RDS). Jest deklaratywne: opisujesz CO chcesz, Terraform wie JAK to zrobić. Ansible to narzędzie do configuration management i deployment — konfiguruje istniejące serwery (instalacja pakietów, konfiguracja nginx, deploy aplikacji). Działa na istniejących hostach przez SSH. W praktyce często używane razem: Terraform tworzy infrastrukturę, Ansible ją konfiguruje.

Kontakt

Skontaktuj się z nami

Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

Wyślij zapytanie

Bezpłatna wycena w 24h
Bez zobowiązań
Indywidualne podejście
Ekspresowa realizacja

Telefon

+48 790 814 814

Pon-Pt: 9:00 - 18:00

Email

adam@fotz.pl

Odpowiadamy w ciągu 24h

Adres rejestrowy

Poznańska 117/11

62-023 Kamionki · obsługa zdalna

Godziny pracy

Pon - Pt9:00 - 18:00
Sob - NdzZamknięte

Wolisz porozmawiać?

Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

Zadzwoń teraz