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.

    Czytaj dalej

    Powiązane artykuły

    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

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

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

    Wolisz porozmawiać?

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

    Zadzwoń teraz

    Szanujemy Twoją prywatność

    Używamy plików cookies, aby zapewnić najlepsze doświadczenia na naszej stronie. Klikając "Akceptuję", zgadzasz się na ich użycie.