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

Быстрые ссылки
- Установка 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. Не используйте основной аккаунтный ключ для автоматизации — создавайте отдельные токены для разных сред.
Шаги:
- Войдите в панель управления DigitalOcean.
- Перейдите в раздел API.
- Нажмите Generate New Token.
- Дайте понятное имя токену и включите права read и write.
- Скопируйте токен — он покажется только один раз. Сохраните его в защищённом месте.
Первые шаги с проектом 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
Заполнение конфигурации 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"После выполнения вы увидите вывод с созданными ресурсами и их атрибутами.

Terraform создаёт файл состояния (.tfstate), в котором хранится текущее представление созданных ресурсов. Не удаляйте этот файл из рабочей директории, если хотите, чтобы Terraform корректно отслеживал существующие ресурсы.
Важно:
Если вы удалите .tfstate, Terraform подумает, что ресурсы отсутствуют, и при следующем apply попытается их создать заново.
Безопасность и лучшие практики
- Не храните токены прямо в коде. Используйте переменные окружения, защищённые .tfvars или секретные хранилища.
- Настройте минимальные права для токена (по возможности ограничьте доступ по проектам).
- Добавьте автоматическое удаление старых state файлов и настройте бэкапы state в защищённое хранилище (S3 с блокировкой версий, DigitalOcean Spaces и т.п.).
- Используйте locking для state (через terraform backend с поддержкой блокировки).
Отладка и распространённые ошибки
- Ошибка аутентификации: проверьте значение api_token и что он с правами write.
- Неправильный образ или размер: сверяйте доступные имена через CLI/API DigitalOcean.
- Проблемы с user_data: проверьте синтаксис cloud‑init и логи в /var/log/cloud-init.log на машине.
- .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.
- Администратор безопасности:
- Проверил токены, доступы и настройки брандмауэра.
Мини‑методология развёртывания
- Подготовка: создать проект и отдельно хранить секреты.
- Локальная валидация: terraform fmt, terraform validate.
- Планирование: terraform plan — анализ изменений.
- Применение: terraform apply с подтверждением.
- Наблюдение: проверка метрик и логов.
- Версионирование: фиксировать изменения в 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 без дополнительной защиты.
План восстановления и отката
- Если apply привёл к ошибке — ознакомьтесь с terraform plan и логами.
- Для отката: если изменения были небольшими, выполните terraform apply с откатом конфигурации или terraform destroy для проблемных ресурсов.
- Если .tfstate повредился — используйте бэкап state или вручную импортируйте ресурсы terraform import.
Пример импорта:
terraform import digitalocean_droplet.web 12345678Decision 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 для безопасного применения изменений.
Важное
Начинайте с малого: протестируйте развёртывание на недорогой конфигурации, прежде чем автоматизировать сложные сценарии. Это сэкономит время и снизит риск ошибок.
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить
