Terraform: инфраструктура как код для VPS и облака

Облако и DevOps · 19.04.2026
Terraform: инфраструктура как код для VPS и облака

Terraform: инфраструктура как код

Terraform (HashiCorp) позволяет описывать серверную инфраструктуру в виде конфигурационных файлов .tf и управлять ею через CLI. Вместо ручного создания серверов через веб-консоль — весь стек в репозитории Git.

Установка Terraform

wget https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_linux_amd64.zip
unzip terraform_1.7.0_linux_amd64.zip
mv terraform /usr/local/bin/
terraform --version

Пример: Hetzner Cloud

# main.tf
terraform {
  required_providers {
    hcloud = {
      source  = "hetznercloud/hcloud"
      version = "~> 1.44"
    }
  }
}

provider "hcloud" {
  token = var.hcloud_token
}

# SSH ключ
resource "hcloud_ssh_key" "default" {
  name       = "my-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

# Сервер
resource "hcloud_server" "web" {
  name        = "web-01"
  image       = "ubuntu-24.04"
  server_type = "cx22"
  location    = "nbg1"
  ssh_keys    = [hcloud_ssh_key.default.id]

  user_data = <<-EOF
    #!/bin/bash
    apt update && apt install -y nginx
    systemctl enable nginx
  EOF
}

# Firewall
resource "hcloud_firewall" "web_fw" {
  name = "web-firewall"

  rule {
    direction  = "in"
    protocol   = "tcp"
    port       = "80"
    source_ips = ["0.0.0.0/0", "::/0"]
  }

  rule {
    direction  = "in"
    protocol   = "tcp"
    port       = "443"
    source_ips = ["0.0.0.0/0", "::/0"]
  }
}

resource "hcloud_firewall_attachment" "web" {
  firewall_id = hcloud_firewall.web_fw.id
  server_ids  = [hcloud_server.web.id]
}

output "server_ip" {
  value = hcloud_server.web.ipv4_address
}
# variables.tf
variable "hcloud_token" {
  sensitive = true
}
# terraform.tfvars (в .gitignore!)
hcloud_token = "your-hetzner-api-token"

Основные команды

# Инициализация (скачать провайдеры)
terraform init

# Просмотр плана изменений
terraform plan

# Применить изменения
terraform apply

# Посмотреть состояние
terraform show
terraform state list

# Уничтожить инфраструктуру
terraform destroy

Несколько серверов с count

resource "hcloud_server" "app" {
  count       = 3
  name        = "app-${count.index + 1}"
  image       = "ubuntu-24.04"
  server_type = "cx22"
  location    = "nbg1"
  ssh_keys    = [hcloud_ssh_key.default.id]
}

output "app_ips" {
  value = hcloud_server.app[*].ipv4_address
}
Безопасность: Никогда не коммитьте terraform.tfvars и *.tfstate в репозиторий — они содержат токены и секреты. Добавьте в .gitignore.
Remote State: Для командной работы храните terraform.tfstate в Terraform Cloud, S3 или Hetzner Object Storage — это позволяет нескольким людям управлять одной инфраструктурой.
← Назад в базу знаний Задать вопрос поддержке