Гид по технологиям

Terraform: создание Droplet в DigitalOcean

5 min read DevOps Обновлено 07 Nov 2025
Terraform: создание Droplet в DigitalOcean
Terraform: создание Droplet в DigitalOcean

TL;DR

Terraform позволяет автоматически создавать виртуальные машины (Droplets) в DigitalOcean за одну команду. В материале показано, как получить API‑токен, настроить файлы конфигурации и развернуть простую Ubuntu‑машину. Приведены чеклисты, рекомендации по безопасности и пошаговый план восстановления.

Логотип DigitalOcean и Terraform на экране

Быстрые ссылки

  • Установка Terraform
  • Создание API‑ключа в DigitalOcean
  • Первые шаги
  • Создание файла ресурса Droplet
  • Заполнение конфигурации Droplet
  • Развёртывание Droplet
  • Итоги

DigitalOcean — один из самых простых облачных провайдеров виртуальных машин. Если нужно быстро получить рабочую среду, Droplet обычно готов за минуту. Вместо ручного интерфейса лучше автоматизировать развертывание.

Terraform — язык «инфраструктура как код», который через провайдеры (включая DigitalOcean) позволяет описывать ресурсы декларативно и делать их воспроизводимыми. В этой статье — практическое руководство по созданию Droplet в DigitalOcean с помощью Terraform.

Установка Terraform

Terraform доступен для Windows, macOS и Linux. Самый простой способ — скачать исполняемый файл и поместить его в системный PATH.

Официальная страница загрузок:

https://www.terraform.io/downloads.html

Советы:

  • На Linux/macOS: распакуйте архив и перенесите бинарник в /usr/local/bin.
  • На Windows: добавьте путь к исполняемому файлу в переменную PATH.
  • Проверка: выполните terraform version.

Создание API‑ключа в DigitalOcean

Чтобы Terraform мог управлять ресурсами, нужен персональный access token. Не используйте основной аккаунтный ключ для автоматизации — создавайте отдельные токены для разных сред.

Шаги:

  1. Войдите в панель управления DigitalOcean.
  2. Перейдите в раздел API.
  3. Нажмите Generate New Token.
  4. Дайте понятное имя токену и включите права read и write.
  5. Скопируйте токен — он покажется только один раз. Сохраните его в защищённом месте.

Экран создания персонального access‑токена в DigitalOcean

Первые шаги с проектом Terraform

Создайте директорию для конфигурации и проинициализируйте её:

mkdir digitalocean-terraform
cd digitalocean-terraform

Создайте файл digitalocean.tfvars для хранения токена (рекомендуется игнорировать такие файлы в VCS):

# digitalocean.tfvars
api_token = "<ВАШ_ТОКЕН_ЗДЕСЬ>"

Примечание: храните реальные секреты в безопасном хранилище (HashiCorp Vault, AWS Secrets Manager и т.п.) в продакшене. Для локальной разработки допустим .tfvars с .gitignore.

Совет по .gitignore:

# игнорировать tfvars с токенами
*.tfvars
.terraform/*
*.tfstate

Создание файла ресурса Droplet

Создайте файл digitalocean.tf и укажите переменную и провайдера:

variable "api_token" {
  default = ""
}

provider "digitalocean" {
  token = var.api_token
}

Инициализируйте проект — terraform init загрузит провайдер и подготовит рабочую директорию:

terraform init

Запуск terraform init: загрузка метаданных и провайдера

Заполнение конфигурации Droplet

Рассмотрим базовую конфигурацию Droplet. В примере мы используем доступный тариф, регион nyc1 и образ Ubuntu 18.04.

Ключевые параметры:

  • Образ: ubuntu-18-04-x64
  • Регион: nyc1
  • Размер: s-1vcpu-1gb

Пример ресурса:

resource "digitalocean_droplet" "web" {
  image              = "ubuntu-18-04-x64"
  name               = "test-web-vm"
  region             = "nyc1"
  size               = "s-1vcpu-1gb"
  monitoring         = true
  ipv6               = true
  private_networking = true
}

Параметры, которые мы добавили:

  • monitoring: включает метрики (CPU, диск, память) в DigitalOcean.
  • ipv6: делает Droplet доступным по IPv6.
  • private_networking: добавляет внутренний адрес 10.x.x.x для связи между Droplets в приватной сети.

User data (инициализация ОС)

Для автоматической настройки при первом запуске можно использовать user_data. Это тот же cloud‑init, который выполнится при создании экземпляра.

Пример корректного simple cloud‑init:

resource "digitalocean_droplet" "web" {
  image              = "ubuntu-18-04-x64"
  name               = "test-web-vm"
  region             = "nyc1"
  size               = "s-1vcpu-1gb"
  monitoring         = true
  ipv6               = true
  private_networking = true
  user_data          = <<-EOF
    #cloud-config
    package_update: true
    package_upgrade: true
    runcmd:
      - [ sh, -c, "apt-get install -y nginx" ]
  EOF
}

Если user_data становится большим, храните его в отдельном YAML‑файле и подключайте через функцию file():

user_data = file("user-data.yml")

Развёртывание Droplet

Проверьте план выполнения и примените конфигурацию:

terraform plan -var-file="digitalocean.tfvars"
terraform apply -var-file="digitalocean.tfvars"

После выполнения вы увидите вывод с созданными ресурсами и их атрибутами.

Экран развёртывания Droplet в консоли

Terraform создаёт файл состояния (.tfstate), в котором хранится текущее представление созданных ресурсов. Не удаляйте этот файл из рабочей директории, если хотите, чтобы Terraform корректно отслеживал существующие ресурсы.

Важно:

Если вы удалите .tfstate, Terraform подумает, что ресурсы отсутствуют, и при следующем apply попытается их создать заново.

Безопасность и лучшие практики

  • Не храните токены прямо в коде. Используйте переменные окружения, защищённые .tfvars или секретные хранилища.
  • Настройте минимальные права для токена (по возможности ограничьте доступ по проектам).
  • Добавьте автоматическое удаление старых state файлов и настройте бэкапы state в защищённое хранилище (S3 с блокировкой версий, DigitalOcean Spaces и т.п.).
  • Используйте locking для state (через terraform backend с поддержкой блокировки).

Отладка и распространённые ошибки

  1. Ошибка аутентификации: проверьте значение api_token и что он с правами write.
  2. Неправильный образ или размер: сверяйте доступные имена через CLI/API DigitalOcean.
  3. Проблемы с user_data: проверьте синтаксис cloud‑init и логи в /var/log/cloud-init.log на машине.
  4. .tfstate удалён — Terraform пытается создать ресурсы заново.

Короткие команды для диагностики:

terraform plan -var-file="digitalocean.tfvars"
terraform show
terraform state list

Критерии приёмки

  • Droplet создан в указанном регионе с нужным именем и размером.
  • SSH доступ по настроенным ключам (если добавляли ключи).
  • Мониторинг включён и доступны метрики в UI.
  • Прописанный user_data выполнился и сервисы запущены.

Чеклист ролей при развёртывании

  • DevOps-инженер:
    • Проверил инфраструктурный код, запустил terraform plan.
    • Просмотрел output и логи cloud-init.
  • Разработчик:
    • Убедился, что приложение успешно стартует на Droplet.
  • Администратор безопасности:
    • Проверил токены, доступы и настройки брандмауэра.

Мини‑методология развёртывания

  1. Подготовка: создать проект и отдельно хранить секреты.
  2. Локальная валидация: terraform fmt, terraform validate.
  3. Планирование: terraform plan — анализ изменений.
  4. Применение: terraform apply с подтверждением.
  5. Наблюдение: проверка метрик и логов.
  6. Версионирование: фиксировать изменения в Git и документировать важные параметры.

Быстрые шаблоны команд и советы

  • Форматирование и валидация:
terraform fmt
terraform validate
  • Просмотр текущего состояния:
terraform show
terraform state list
  • Удаление ресурса из управления Terraform без удаления в облаке:
terraform state rm digitalocean_droplet.web
  • Полное уничтожение ресурсов, описанных в конфигурации:
terraform destroy -var-file="digitalocean.tfvars"

Сценарии, когда этот подход не подходит

  • Нужна сверхнизкая задержка и специализированное железо (Bare Metal).
  • Требуется сложная сеть между десятками VPC с уникальными настройками — иногда удобнее orchestration на базе Kubernetes или Terraform + модульная архитектура.
  • Когда политика безопасности запрещает хранить конфигурацию в публичном VCS без дополнительной защиты.

План восстановления и отката

  1. Если apply привёл к ошибке — ознакомьтесь с terraform plan и логами.
  2. Для отката: если изменения были небольшими, выполните terraform apply с откатом конфигурации или terraform destroy для проблемных ресурсов.
  3. Если .tfstate повредился — используйте бэкап state или вручную импортируйте ресурсы terraform import.

Пример импорта:

terraform import digitalocean_droplet.web 12345678

Decision flowchart (Mermaid)

flowchart TD
  A[Нужен Droplet?] --> B{Есть конфиг?}
  B -- Да --> C[terraform plan]
  B -- Нет --> D[Создать digitalocean.tf]
  C --> E{Ошибки?}
  E -- Нет --> F[terraform apply]
  E -- Да --> G[Исправить конфигурацию]
  G --> C
  D --> C

Краткое резюме

Создать Droplet в DigitalOcean через Terraform просто и удобно: вы получаете воспроизводимую инфраструктуру, возможность версионирования и автоматическую инициализацию машины. Соблюдайте рекомендации по хранению секретов и бэкапу state. Для масштабных проектов вырастите структуру Terraform в модули и настройте CI/CD для безопасного применения изменений.

Важное

Начинайте с малого: протестируйте развёртывание на недорогой конфигурации, прежде чем автоматизировать сложные сценарии. Это сэкономит время и снизит риск ошибок.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти