🏗️ 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.