🏗️ Terraform

Инфраструктура как код: провайдеры, ресурсы, переменные, состояние и команды.

Шпаргалки · Инфраструктура · #terraform #iac #hcl

Рабочий цикл

terraform init          # скачать провайдеры и модули
terraform fmt           # форматирование
terraform validate      # проверка синтаксиса
terraform plan -out=tf.plan
terraform apply tf.plan
terraform destroy
terraform output
terraform state list

Структура HCL

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

provider "aws" { region = var.region }

variable "region" {
  type    = string
  default = "eu-central-1"
}

resource "aws_s3_bucket" "logs" {
  bucket = "my-logs-${var.env}"
  tags   = { Env = var.env }
}

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

output "bucket" { value = aws_s3_bucket.logs.arn }

Блоки

Блок Назначение
provider подключение к облаку или сервису
resource создаваемый объект
data чтение существующего
variable / output вход и выход
locals вычисляемые значения
module повторно используемый набор ресурсов

Приёмы

  • count и for_each создают несколько экземпляров. for_each предпочтительнее: ресурсы не сдвигаются при изменении списка.
  • Зависимости строятся по ссылкам; явно: depends_on.
  • Переменные: -var env=prod, *.tfvars, TF_VAR_env.
  • Состояние (terraform.tfstate) храните в удалённом backend (S3 + блокировка, Terraform Cloud), не в git.
  • Рабочие области: terraform workspace new dev.

Внимание: Всегда читайте plan перед apply. Секреты попадают в state: защищайте backend.