Powrót do strony głównej

Jak używać Terraform z AWS: Kompletny przewodnik

Ten kompleksowy przewodnik uczy, jak używać Terraform z AWS do zarządzania infrastrukturą chmurową jako kod. Obejmując konfigurację providera, definiowanie zasobów, zarządzanie stanem, najlepsze praktyki bezpieczeństwa i integrację CI/CD, zdobędziesz praktyczne umiejętności do produkcyjnych wdrożeń na AWS.

Jak używać Terraform z AWS: Samouczek krok po kroku
Advertisement 728x90

Używanie Terraform z AWS: Kompletny przewodnik

Używanie Terraform z AWS: Kompletny przewodnik

Zarządzanie infrastrukturą ewoluowało od ręcznych kliknięć w konsoli i kruchych skryptów do deklaratywnego kodu, który można wersjonować, testować i udostępniać. Dla zespołów pracujących na Amazon Web Services, Terraform stał się standardem dla infrastruktury jako kodu (IaC), a znajomość jak efektywnie używać terraform z aws jest teraz kluczową umiejętnością dla inżynierów chmury. Ten przewodnik przeprowadzi Cię przez pełny przepływ pracy — od konfiguracji dostawcy AWS do wdrażania rzeczywistych zasobów z użyciem praktyk na poziomie produkcyjnym.

Czego się nauczysz

Pod koniec tego przewodnika zrozumiesz pełny przepływ pracy Terraform na AWS — od konfiguracji dostawcy i definiowania zasobów po zarządzanie stanem i pracę zespołową. Będziesz w stanie pewnie wdrażać, aktualizować i niszczyć infrastrukturę AWS, używając deklaratywnego podejścia Terraform, i zdobędziesz jasny model mentalny do strukturyzowania własnych projektów. Poznasz również praktyczne środki bezpieczeństwa, aby uniknąć kosztownych błędów, takich jak wdrożenie na niewłaściwym koncie AWS.

Google AdInline article slot

Zrozumienie podstawowych koncepcji: dostawcy, zasoby i stan

Zanim napiszesz jakąkolwiek konfigurację, warto zrozumieć fundamentalne elementy składowe Terraform. W przeciwieństwie do AWS CloudFormation, który jest natywny dla AWS i zakłada tworzenie zasobów w ramach konta AWS, Terraform jest niezależny od chmury i wymaga jawnego zadeklarowania dostawców, którzy komunikują się z konkretnymi API.

Czym jest dostawca?

Dostawca to wtyczka, która działa jako pomost między Terraform a platformą docelową. AWS Provider pozwala Terraform wywoływać API AWS w celu tworzenia, odczytywania, aktualizowania i usuwania zasobów. Ponieważ Terraform obsługuje wielu dostawców — AWS, Kubernetes, Helm, a nawet zewnętrzne narzędzia SaaS — możesz przygotować klaster Amazon EKS i wdrożyć w nim wykresy Helm w ramach jednej konfiguracji.

Zasoby i źródła danych

Zasób definiuje komponent Twojej infrastruktury: instancję EC2, bucket S3 lub grupę bezpieczeństwa. Zasoby są deklarowane deklaratywnie — określasz co chcesz, a Terraform ustala jak to utworzyć.

Google AdInline article slot

Źródło danych z kolei pobiera z AWS informacje o istniejących zasobach. Na przykład, zamiast kodować na stałe identyfikator AMI, który może się zmienić lub różnić w zależności od regionu, możesz użyć źródła danych do dynamicznego pobrania najnowszej wersji Amazon Linux 2023 AMI.

Stan: źródło prawdy

Terraform utrzymuje plik stanu, który śledzi zarządzane przez niego zasoby. Ten stan mapuje Twoją konfigurację na rzeczywistą infrastrukturę i jest niezbędny do planowania aktualizacji, wykrywania odchyleń i czystego usuwania zasobów. Do pracy zespołowej zdecydowanie zaleca się przechowywanie stanu w zdalnym backendzie, takim jak Amazon S3, aby zapobiec konfliktom i zapewnić spójność.


Rozpoczęcie pracy: instalacja narzędzi i konfiguracja danych uwierzytelniających AWS

Wymagania wstępne

Zanim napiszesz choć jedną linię konfiguracji, skonfiguruj lokalne środowisko:

Google AdInline article slot
  1. Terraform CLI w wersji 1.5 lub nowszej — pobierz plik binarny i dodaj go do PATH.
  2. AWS CLI — zainstaluj i skonfiguruj go z danymi uwierzytelniającymi IAM, które mają wystarczające uprawnienia.
  3. Konto AWS — użyj Free Tier do ćwiczeń, aby uniknąć nieoczekiwanych kosztów.

Uwierzytelnianie dostawcy AWS

Dostawca AWS Terraform uwierzytelnia się tymi samymi metodami co AWS CLI. Najprostszym sposobem jest ustawienie zmiennych środowiskowych z danymi uwierzytelniającymi IAM:

export AWS_ACCESS_KEY_ID=<twój_klucz_dostępu>
export AWS_SECRET_ACCESS_KEY=<twój_sekretny_klucz>

Alternatywnie Terraform może odczytać dane z domyślnego pliku danych uwierzytelniających ~/.aws/credentials.


Krok 1: Napisz swoją pierwszą konfigurację Terraform

Utwórz nowy katalog dla swojego projektu i zdefiniuj dostawcę oraz zasoby. Pliki konfiguracyjne Terraform używają HashiCorp Configuration Language (HCL) i mają rozszerzenie .tf.

Blok terraform

Blok terraform konfiguruje samego Terraform, w tym źródła dostawców i ograniczenia wersji. Ustalenie wersji dostawcy zapobiega nieoczekiwanym odchyleniom podczas aktualizacji dostawcy.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
  required_version = ">= 1.2"
}

Argument source wskazuje na dostawcę w rejestrze Terraform. HashiCorp utrzymuje dostawcę AWS, więc jego źródłem jest hashicorp/aws.

Blok provider

Blok provider konfiguruje dostawcę AWS, w tym domyślny region:

provider "aws" {
  region = "us-west-2"
}

Definiowanie instancji EC2

Blok resource deklaruje komponent infrastruktury. Oto jak zdefiniować instancję EC2, używając źródła danych do pobrania najnowszej AMI Ubuntu:

data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
  }
}

resource "aws_instance" "app_server" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  tags = {
    Name = "terraform-demo"
  }
}

Użycie źródła danych dla AMI sprawia, że Twoja konfiguracja jest dynamiczna i przenośna między regionami.


Krok 2: Inicjalizacja, planowanie i stosowanie

Przepływ pracy Terraform składa się z trzech głównych poleceń:

terraform init

Zainicjuj katalog roboczy. To ładuje niezbędne wtyczki dostawcy i konfiguruje backend:

terraform init

Terraform odczytuje blok required_providers i instaluje określoną przez Ciebie wersję dostawcy AWS.

terraform plan

Podgląd zmian, które Terraform wprowadzi w Twojej infrastrukturze:

terraform plan

Plan pokazuje dodania, zmiany i usunięcia — to Twoja szansa na zauważenie błędów przed zastosowaniem.

terraform apply

Zastosuj konfigurację, aby utworzyć zasoby. Terraform ponownie pokaże plan i poprosi o potwierdzenie:

terraform apply

Wpisz yes, aby kontynuować. Terraform przygotuje instancję EC2 i wyświetli wyniki.

terraform destroy

Po zakończeniu wykonaj czyszczenie, aby uniknąć kosztów:

terraform destroy

Terraform oblicza, co należy usunąć, na podstawie pliku stanu i prosi o potwierdzenie.


Krok 3: Dodanie grupy bezpieczeństwa i logiki przygotowania

Serwer jest bezużyteczny bez dostępu sieciowego. Dodaj grupę bezpieczeństwa do zarządzania ruchem przychodzącym i wychodzącym:

resource "aws_security_group" "web" {
  name        = "web-sg"
  description = "Zezwól na HTTP i SSH"
  vpc_id      = var.vpc_id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/16"] # Ogranicz SSH
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Przyłącz grupę bezpieczeństwa do swojej instancji EC2, podając aws_security_group.web.id w argumencie vpc_security_group_ids.

Automatyzacja instalacji oprogramowania za pomocą danych użytkownika

Użyj danych użytkownika EC2 do instalacji oprogramowania przy pierwszym uruchomieniu instancji. Na przykład, aby zainstalować Nginx na Amazon Linux 2023:

resource "aws_instance" "web" {
  ami                    = data.aws_ami.al2023.id
  instance_type          = "t3.micro"
  vpc_security_group_ids = [aws_security_group.web.id]
  key_name               = var.key_name

  user_data = <<-EOF
              #!/bin/bash
              dnf install -y nginx
              systemctl start nginx
              echo "<h1>Witaj od Terraform</h1>" > /usr/share/nginx/html/index.html
              EOF
}

Dane użytkownika są wykonywane podczas początkowego uruchamiania i są prostym sposobem na inicjalizację instancji bez dodatkowych narzędzi do zarządzania konfiguracją.


Krok 4: Używanie zmiennych, wyników i modułów

Zmienne do ponownego użycia

Kodowanie wartości na stałe sprawia, że konfiguracje są kruche. Zdefiniuj zmienne w pliku variables.tf:

variable "instance_type" {
  description = "Typ instancji EC2"
  type        = string
  default     = "t2.micro"
}

variable "aws_region" {
  description = "Region AWS"
  type        = string
  default     = "us-west-2"
}

Odwołuj się do zmiennych w konfiguracji za pomocą var.instance_type.

Wyniki do wyświetlania informacji

Wyniki pozwalają uzyskać informacje po zastosowaniu, na przykład publiczny IP instancji:

output "instance_public_ip" {
  description = "Publiczny IP instancji EC2"
  value       = aws_instance.app_server.public_ip
}

Moduły do wielokrotnego użytku komponentów

Moduły to kontenery dla wielu zasobów, które można współdzielić między różnymi projektami. Rejestr Terraform zawiera tysiące modułów społeczności, a Ty możesz również pisać własne. Używanie modułów utrzymuje czystość konfiguracji głównej i promuje ponowne użycie.


Krok 5: Zdalny stan i praca zespołowa

W każdym środowisku zespołowym przechowywanie stanu lokalnie jest niebezpieczne — może się zdezaktualizować lub kolidować ze zmianami innych użytkowników. Skonfiguruj zdalny backend, zazwyczaj używając Amazon S3 z DynamoDB do blokowania stanu:

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "prod/terraform.tfstate"
    region         = "us-west-2"
    encrypt        = true
    dynamodb_table = "terraform-locks"
  }
}

Ta konfiguracja zapewnia współdzielenie stanu i jego blokowanie podczas operacji stosowania, zapobiegając jednoczesnym zmianom, które mogłyby uszkodzić plik stanu.


Krok 6: Najlepsze praktyki bezpieczeństwa

Ograniczenie dostawcy do konkretnych kont AWS

Jednym z najniebezpieczniejszych błędów jest uruchomienie Terraform przeciwko niewłaściwemu kontu AWS, na przykład zamiar wdrożenia w środowisku deweloperskim, ale przypadkowe użycie danych uwierzytelniających produkcyjnych. Konfiguracja allowed_account_ids w bloku dostawcy tworzy siatkę bezpieczeństwa:

provider "aws" {
  region  = "us-west-2"
  allowed_account_ids = ["123456789012"] # Tylko to konto
}

Jeśli spróbujesz uruchomić Terraform z danymi uwierzytelniającymi z innego konta, plan natychmiast zgłosi błąd, zapobiegając kosztownym pomyłkom.

Używanie ról IAM zamiast statycznych kluczy

Dla instancji EC2 zawsze używaj profili instancji IAM zamiast osadzania statycznych danych uwierzytelniających. Zwiększa to bezpieczeństwo i upraszcza rotację danych uwierzytelniających.

Kontrola wersji i przegląd

Wszystkie konfiguracje Terraform powinny być przechowywane w systemie kontroli wersji. Żądania zmian infrastruktury powinny być przeglądane tak samo jak kod aplikacji — to podstawowa wartość IaC.


Jak używać Terraform z AWS w pipeline'ach CI/CD

Integracja Terraform z pipeline'ami CI/CD automatyzuje wdrażanie i zapewnia spójność. Typowy przepływ pracy GitHub Actions:

name: Terraform Apply
on:
  push:
    branches: [ main ]
jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: hashicorp/setup-terraform@v1
      - name: Terraform Init
        run: terraform init
      - name: Terraform Plan
        run: terraform plan
      - name: Terraform Apply
        run: terraform apply -auto-approve

To podejście eliminuje ręczne kroki stosowania i gwarantuje, że każde scalenie do głównej gałęzi wdraża infrastrukturę, która została sprawdzona i przetestowana.


Często zadawane pytania

1. Jaka jest różnica między Terraform a AWS CloudFormation?

Terraform jest niezależny od chmury i obsługuje wielu dostawców — AWS, Azure, Google Cloud i setki innych, podczas gdy CloudFormation działa tylko z AWS. Terraform oferuje również bardziej elastyczny przepływ pracy z etapami plan/apply i obsługuje szerszy zakres zewnętrznych zasobów.

2. Gdzie Terraform przechowuje stan mojej infrastruktury?

Domyślnie Terraform przechowuje stan w lokalnym pliku terraform.tfstate. Dla produkcji i pracy zespołowej należy skonfigurować zdalny backend, na przykład Amazon S3, do scentralizowanego przechowywania stanu z blokowaniem, aby zapobiec konfliktom.

3. Czym są moduły Terraform i dlaczego powinienem ich używać?

Moduły to kontenery dla wielu zasobów, które można ponownie wykorzystać w różnych projektach. Używanie modułów zmniejsza powielanie, zapewnia spójność i pozwala udostępniać wzorce infrastruktury między zespołami za pośrednictwem rejestru Terraform.

4. Jak uniknąć przypadkowego wdrożenia na niewłaściwym koncie AWS?

Użyj ustawienia allowed_account_ids w bloku dostawcy AWS, aby ograniczyć Terraform do konkretnych identyfikatorów kont. Jeśli dane uwierzytelniające nie pasują do dozwolonej listy, Terraform zgłosi błąd przed wprowadzeniem jakichkolwiek zmian.

5. Jaka jest różnica między terraform plan a terraform apply?

terraform plan pokazuje podgląd zmian, które Terraform wprowadzi w Twojej infrastrukturze. terraform apply wykonuje te zmiany. Zawsze uruchamiaj plan najpierw, aby zauważyć błędy przed modyfikacją zasobów.


Źródła

  1. Terrateam, "How to deploy Nginx with Terraform on AWS" (2026)
  2. AWS Prescriptive Guidance, "Understanding Terraform resources and providers" (2024)
  3. AWS Prescriptive Guidance, "Terraform AWS Provider best practices" (2024)
  4. HashiCorp Developer, "Create infrastructure" (2025)
  5. Refine, "Getting Started with Terraform on AWS" (2024)
  6. DevelopersIO, "Terraform AWS Provider allowed_account_ids" (2025)
  7. GitHub, "terraform-basics-aws" repository

— Editorial Team

Advertisement 728x90

Czytaj dalej