Загрузка...

Блог

Terraform для сисадминов: основы инфраструктуры как код

Terraform для сисадминов: основы инфраструктуры как код

Инфраструктура как код (IaC) — описание серверов, сетей и сервисов в декларативных конфигах. Terraform позволяет управлять облачными и on-prem ресурсами через провайдеров (AWS, Yandex Cloud, OpenStack, локальные VM). В статье — базовые концепции и первый модуль.

Зачем Terraform сисадмину

Одинаковые стенды для dev, staging и prod без ручного копирования. Версионирование изменений в Git. Откат инфраструктуры так же просто, как откат кода. Один язык (HCL) для разных провайдеров — не нужно учить десяток консолей.

Ключевые концепции

КомпонентНазначение
ResourceЕдиница инфраструктуры (VM, диск, сеть); описание в HCL в .tf файлах
ProviderПлагин к облаку или API (yandex, aws, openstack, null для локальных скриптов)
State (.tfstate)Текущее состояние ресурсов; хранить в удалённом бэкенде (S3, Terraform Cloud), не в Git
Planterraform plan — просмотр планируемых изменений без применения
Applyterraform apply — применение изменений к инфраструктуре
Variable / tfvarsПеременные для окружений (dev/staging/prod); секреты — через env или vault

Resource — единица инфраструктуры (VM, диск, сеть). Provider — плагин к облаку или API. State — файл с текущим состоянием; храните в удалённом бэкенде. Plan / Apply — план и применение изменений.

Минимальный пример

Инициализация: terraform init. Пример main.tf с провайдером и одной VM:

terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "prod/terraform.tfstate"
    region = "ru-central1"
  }
}

provider "yandex" {
  zone = "ru-central1-a"
}

resource "yandex_compute_instance" "vm1" {
  name        = "web-server"
  platform_id = "standard-v3"

  resources {
    cores  = 2
    memory = 2
  }

  boot_disk {
    initialize_params {
      image_id = "fd8vmcue7saajtqo1p1g"  # Ubuntu 22.04
    }
  }

  network_interface {
    subnet_id = "e9b..."  # ID подсети в Yandex Cloud или ресурс yandex_vpc_subnet
    nat       = true
  }
}

Команды: terraform init — скачать провайдеры и настроить backend; terraform plan — просмотр плана; terraform apply — применить изменения. Не коммитьте .tfstate с секретами — используйте remote backend (S3, Terraform Cloud) и переменные.

Практики

  • Модули для переиспользования: сеть, VM, кластер — отдельные модули с input/output.
  • Переменные (variable, tfvars) для окружений; секреты — через environment или vault.
  • State lock в S3 + DynamoDB (или аналог) чтобы два apply не шли параллельно.

Кратко: Terraform — декларативный IaC с провайдерами и state. Держите state в бэкенде, модулируйте конфиг, не храните секреты в репозитории. Описание инфраструктуры в базе знаний — плюс к онбордингу и чату по архиву.