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
KrytycznePrzechowuj state w S3 + DynamoDB (locking) lub Terraform Cloud. Lokalny state nie nadaje się do pracy zespołowej.
Moduły dla reużywalności
WysokaEnkapsuluj powtarzające się wzorce w moduły (VPC, EKS cluster, RDS). Moduły z wersjonowaniem.
Workspace lub katalogi
WysokaSeparacja środowisk: osobne workspace (prod/staging/dev) lub osobne katalogi z różnymi tfvars.
Plan w CI/CD
Wysokaterraform 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 koduterraform 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.
Powiązane artykuły
Skontaktuj się z nami
Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.
Wyślij zapytanie
Telefon
+48 790 814 814
Pon-Pt: 9:00 - 18:00
adam@fotz.pl
Odpowiadamy w ciągu 24h
Adres
Plac Wolności 16
61-739 Poznań
Godziny pracy
Wolisz porozmawiać?
Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.
Zadzwoń teraz