Zpět na domů

Jak používat Terraform s AWS: Kompletní průvodce

Tento komplexní průvodce vás naučí, jak používat Terraform s AWS ke správě cloudové infrastruktury jako kódu. Pokrývá nastavení providera, definici zdrojů, správu stavu, osvědčené postupy zabezpečení a integraci CI/CD, získáte praktické dovednosti pro nasazení AWS v produkční kvalitě.

Jak používat Terraform s AWS: Výukový program krok za krokem
Advertisement 728x90

Použití Terraformu s AWS: Kompletní průvodce

Použití Terraformu s AWS: Kompletní průvodce

Správa infrastruktury se vyvinula od ručního klikání v konzoli a křehkých skriptů k deklarativnímu kódu, který lze verzovat, kontrolovat a sdílet. Pro týmy pracující na Amazon Web Services se Terraform stal standardem pro infrastrukturu jako kód (IaC) a znalost toho, jak efektivně používat Terraform s AWS, je nyní klíčovou dovedností cloudových inženýrů. Tento průvodce vás provede celým pracovním postupem – od nastavení poskytovatele AWS až po nasazení reálných zdrojů pomocí postupů na průmyslové úrovni.

Co se naučíte

Na konci tohoto průvodce pochopíte celý pracovní postup Terraformu na AWS – od konfigurace poskytovatele a definování zdrojů až po správu stavu a týmovou spolupráci. Budete schopni s jistotou nasazovat, aktualizovat a odstraňovat infrastrukturu AWS pomocí deklarativního přístupu Terraformu a získáte jasný mentální model pro strukturování vlastních projektů. Naučíte se také praktická bezpečnostní opatření, abyste se vyhnuli nákladným chybám, jako je nasazení do nesprávného účtu AWS.

Google AdInline article slot

Pochopení základních konceptů: poskytovatelé, zdroje a stav

Než napíšete jakoukoli konfiguraci, je užitečné porozumět základním stavebním kamenům Terraformu. Na rozdíl od AWS CloudFormation, který je nativní pro AWS a předpokládá vytváření zdrojů v rámci účtu AWS, je Terraform cloudově nezávislý a vyžaduje explicitní deklaraci poskytovatelů, kteří komunikují s konkrétními API.

Co je poskytovatel?

Poskytovatel je plugin, který slouží jako most mezi Terraformem a cílovou platformou. AWS Provider umožňuje Terraformu volat API AWS pro vytváření, čtení, aktualizaci a mazání zdrojů. Protože Terraform podporuje více poskytovatelů – AWS, Kubernetes, Helm a dokonce i SaaS nástroje třetích stran – můžete v rámci jedné konfigurace připravit cluster Amazon EKS a nasadit do něj Helm charty.

Zdroje a datové zdroje

Zdroj definuje komponentu vaší infrastruktury: instanci EC2, bucket S3 nebo bezpečnostní skupinu. Zdroje jsou deklarovány deklarativně – uvedete co chcete a Terraform zjistí jak to vytvořit.

Google AdInline article slot

Datový zdroj na druhé straně dotazuje AWS na informace o existujících zdrojích. Například místo pevného zakódování ID AMI, které se může změnit nebo lišit podle regionu, můžete použít datový zdroj k dynamickému získání nejnovější verze Amazon Linux 2023 AMI.

Stav: zdroj pravdy

Terraform udržuje stavový soubor, který sleduje zdroje, které spravuje. Tento stav mapuje vaši konfiguraci na skutečnou infrastrukturu a je nezbytný pro plánování aktualizací, detekci odchylek a čisté odstraňování zdrojů. Pro týmovou práci se důrazně doporučuje ukládat stav do vzdáleného backendu, jako je Amazon S3, aby se předešlo konfliktům a zajistila konzistence.


Začínáme: instalace nástrojů a nastavení přihlašovacích údajů AWS

Předpoklady

Než napíšete byť jen jeden řádek konfigurace, nastavte si lokální prostředí:

Google AdInline article slot
  1. Terraform CLI verze 1.5 nebo novější – stáhněte binární soubor a přidejte jej do PATH.
  2. AWS CLI – nainstalujte a nakonfigurujte jej s přihlašovacími údaji IAM, které mají dostatečná oprávnění.
  3. Účet AWS – použijte Free Tier pro procvičování, abyste se vyhnuli neočekávaným nákladům.

Autentizace poskytovatele AWS

AWS poskytovatel Terraformu se autentizuje stejnými metodami jako AWS CLI. Nejjednodušší způsob je nastavit proměnné prostředí s vašimi přihlašovacími údaji IAM:

export AWS_ACCESS_KEY_ID=<váš_přístupový_klíč>
export AWS_SECRET_ACCESS_KEY=<váš_tajný_klíč>

Alternativně může Terraform číst data z výchozího souboru přihlašovacích údajů ~/.aws/credentials.


Krok 1: Napište svou první konfiguraci Terraformu

Vytvořte nový adresář pro váš projekt a definujte poskytovatele a zdroje. Konfigurační soubory Terraformu používají HashiCorp Configuration Language (HCL) a mají příponu .tf.

Blok terraform

Blok terraform konfiguruje samotný Terraform, včetně zdrojů poskytovatelů a omezení verzí. Uzamčení verzí poskytovatele zabraňuje neočekávaným odchylkám při aktualizaci poskytovatele.

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

Argument source ukazuje na poskytovatele v registru Terraformu. HashiCorp udržuje poskytovatele AWS, takže jeho zdroj je hashicorp/aws.

Blok provider

Blok provider konfiguruje poskytovatele AWS, včetně výchozího regionu:

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

Definice instance EC2

Blok resource deklaruje komponentu infrastruktury. Zde je návod, jak definovat instanci EC2 pomocí datového zdroje pro získání nejnovější 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"
  }
}

Použití datového zdroje pro AMI činí vaši konfiguraci dynamickou a přenosnou mezi regiony.


Krok 2: Inicializace, plánování a aplikace

Pracovní postup Terraformu se skládá ze tří hlavních příkazů:

terraform init

Inicializujte pracovní adresář. Tím se načtou potřebné pluginy poskytovatele a nakonfiguruje backend:

terraform init

Terraform přečte blok required_providers a nainstaluje zadanou verzi poskytovatele AWS.

terraform plan

Náhled změn, které Terraform provede ve vaší infrastruktuře:

terraform plan

Plán zobrazuje přidání, změny a odstranění – to je vaše příležitost všimnout si chyb před aplikací.

terraform apply

Aplikujte konfiguraci pro vytvoření zdrojů. Terraform znovu zobrazí plán a požádá o potvrzení:

terraform apply

Zadejte yes pro pokračování. Terraform připraví instanci EC2 a zobrazí výsledky.

terraform destroy

Až skončíte, proveďte vyčištění, abyste se vyhnuli nákladům:

terraform destroy

Terraform vypočítá, co je třeba odstranit, na základě stavového souboru a požádá o potvrzení.


Krok 3: Přidání bezpečnostní skupiny a logiky přípravy

Server je bez síťového přístupu k ničemu. Přidejte bezpečnostní skupinu pro správu příchozího a odchozího provozu:

resource "aws_security_group" "web" {
  name        = "web-sg"
  description = "Povolit HTTP a 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"] # Omezit SSH
  }

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

Připojte bezpečnostní skupinu k vaší instanci EC2 uvedením aws_security_group.web.id v argumentu vpc_security_group_ids.

Automatizace instalace softwaru pomocí uživatelských dat

Použijte uživatelská data EC2 k instalaci softwaru při prvním spuštění instance. Například pro instalaci 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>Ahoj od Terraformu</h1>" > /usr/share/nginx/html/index.html
              EOF
}

Uživatelská data se spouštějí během počátečního bootování a jsou jednoduchým způsobem inicializace instancí bez dalších nástrojů pro správu konfigurace.


Krok 4: Použití proměnných, výstupů a modulů

Proměnné pro opakované použití

Pevné kódování hodnot činí konfigurace křehkými. Definujte proměnné v souboru variables.tf:

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

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

Odkazujte na proměnné v konfiguraci pomocí var.instance_type.

Výstupy pro zobrazení informací

Výstupy umožňují získat informace po aplikaci, například veřejnou IP adresu instance:

output "instance_public_ip" {
  description = "Veřejná IP adresa instance EC2"
  value       = aws_instance.app_server.public_ip
}

Moduly pro opakovaně použitelné komponenty

Moduly jsou kontejnery pro více zdrojů, které lze sdílet napříč různými projekty. Registr Terraformu obsahuje tisíce modulů komunity a můžete také psát vlastní. Používání modulů udržuje kořenovou konfiguraci čistou a podporuje opakované použití.


Krok 5: Vzdálený stav a týmová práce

V jakémkoli týmovém prostředí je ukládání stavu lokálně nebezpečné – může zastarat nebo kolidovat se změnami jiných uživatelů. Nakonfigurujte vzdálený backend, obvykle pomocí Amazon S3 s DynamoDB pro uzamčení stavu:

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

Tato konfigurace zajišťuje sdílení stavu a jeho uzamčení během operací aplikace, čímž zabraňuje souběžným změnám, které by mohly poškodit stavový soubor.


Krok 6: Nejlepší bezpečnostní postupy

Omezení poskytovatele na konkrétní účty AWS

Jednou z nejnebezpečnějších chyb je spuštění Terraformu proti nesprávnému účtu AWS, například záměr nasadit do vývojového prostředí, ale náhodné použití přihlašovacích údajů produkce. Nastavení allowed_account_ids v bloku poskytovatele vytváří záchrannou síť:

provider "aws" {
  region  = "us-west-2"
  allowed_account_ids = ["123456789012"] # Pouze tento účet
}

Pokud se pokusíte spustit Terraform s přihlašovacími údaji z jiného účtu, plán okamžitě vyvolá chybu, čímž zabrání nákladným chybám.

Použití rolí IAM místo statických klíčů

Pro instance EC2 vždy používejte profily instancí IAM místo vkládání statických přihlašovacích údajů. To zvyšuje bezpečnost a zjednodušuje rotaci přihlašovacích údajů.

Verzování a kontrola

Všechny konfigurace Terraformu by měly být uloženy v systému verzování. Žádosti o změny infrastruktury by měly být kontrolovány stejně jako kód aplikací – to je základní hodnota IaC.


Jak používat Terraform s AWS v CI/CD pipelinech

Integrace Terraformu do CI/CD pipeline automatizuje nasazení a zajišťuje konzistenci. Typický pracovní postup 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

Tento přístup eliminuje ruční kroky aplikace a zaručuje, že každé sloučení do hlavní větve nasazuje infrastrukturu, která byla zkontrolována a otestována.


Často kladené otázky

1. Jaký je rozdíl mezi Terraformem a AWS CloudFormation?

Terraform je cloudově nezávislý a podporuje mnoho poskytovatelů – AWS, Azure, Google Cloud a stovky dalších, zatímco CloudFormation funguje pouze s AWS. Terraform také nabízí flexibilnější pracovní postup s fázemi plan/apply a podporuje širší škálu zdrojů třetích stran.

2. Kde Terraform ukládá stav mé infrastruktury?

Ve výchozím nastavení ukládá Terraform stav do lokálního souboru terraform.tfstate. Pro produkci a týmovou práci byste měli nakonfigurovat vzdálený backend, například Amazon S3, pro centralizované ukládání stavu s uzamčením pro zabránění konfliktům.

3. Co jsou moduly Terraformu a proč bych je měl používat?

Moduly jsou kontejnery pro více zdrojů, které lze opakovaně používat v různých projektech. Používání modulů snižuje duplicitu, zajišťuje konzistenci a umožňuje sdílení vzorů infrastruktury mezi týmy prostřednictvím registru Terraformu.

4. Jak se vyhnout náhodnému nasazení do nesprávného účtu AWS?

Použijte nastavení allowed_account_ids v bloku poskytovatele AWS k omezení Terraformu na konkrétní ID účtů. Pokud přihlašovací údaje neodpovídají povolenému seznamu, Terraform vyvolá chybu před provedením jakýchkoli změn.

5. Jaký je rozdíl mezi terraform plan a terraform apply?

terraform plan zobrazuje náhled změn, které Terraform provede ve vaší infrastruktuře. terraform apply tyto změny provádí. Vždy nejprve spusťte plan, abyste si všimli chyb před změnou zdrojů.


Zdroje

  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

Číst dál