Развёртывание Droplet на DigitalOcean через PowerShell и REST API
Быстрые ссылки
Установка PowerShell Core
Создание API-ключа в DigitalOcean
DigitalOcean REST API
Создание JSON-конфигурации
Развёртывание Droplet
Дополнительные параметры
Итоги

Введение
PowerShell — это современная оболочка и язык сценариев, кроссплатформенный и удобный. В связке с DigitalOcean REST API он позволяет быстро развёртывать ресурсы (Droplets) из скриптов. В этой статье показано, как подготовить конфигурацию в JSON, получить API-ключ и вызвать API через Invoke-RestMethod для создания виртуальной машины.
Важно: API-токен в DigitalOcean действует как пароль. Храните его в защищённом хранилище и не публикуйте в репозиториях.
Требования и предварительные шаги
- PowerShell 7 (PowerShell Core) установлен на вашей машине. На Windows он может сосуществовать с Windows PowerShell.
- Учётная запись DigitalOcean и возможность создавать персональные токены.
- Базовые знания JSON и команд PowerShell.
Подробная инструкция по установке PowerShell: https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell
Примечание: PowerShell 7 можно устанавливать параллельно — это не повлияет на существующие скрипты в Windows PowerShell.
Создание API-ключа в DigitalOcean
Для взаимодействия с API потребуется персональный токен (Personal Access Token).
Шаги:
- Войдите в панель управления DigitalOcean.
- Перейдите в раздел API.
- Нажмите Generate New Token.
- Задайте имя токена и отметьте права чтения и записи (read и write).
- Скопируйте токен — после закрытия окна токен больше не будет показан.
Совет по безопасности: создавайте отдельный токен для автоматизации и храните его в секретном хранилище (Vault, Secrets Manager, GitHub Secrets и т. п.). Это упростит отзыв доступа.

DigitalOcean REST API — ключевые моменты
Документация API содержит много информации, но для запуска Droplet нам важны:
- Эндпоинт создания Droplet: POST https://api.digitalocean.com/v2/droplets
- Аутентификация: заголовок Authorization: Bearer
- Формат запроса: JSON с полями, описывающими имя, регион, образ и т. п.
- Content-Type: application/json
Без корректных заголовков API не сможет аутентифицировать запрос или распарсить тело.
Короткое определение: OAuth-style token — это строка доступа, которую сервер использует вместо логина/пароля.
Создание JSON-конфигурации
Ниже — минимальный пример JSON-конфигурации для Droplet. Мы выбираем бюджетный план в регионе nyc1 и включаем мониторинг, IPv6 и private networking.
Поля, на которые стоит обратить внимание:
- name — имя Droplet
- region — регион (например, nyc1)
- size — тип инстанса (например, s-1vcpu-1gb)
- image — образ (ubuntu-18-04-x64)
- ipv6 — включить IPv6
- private_networking — включить приватную сеть
- monitoring — включить встроенный мониторинг DigitalOcean
- user_data — cloud-init для первичной настройки VM
Пример формирования JSON в PowerShell (корректный синтаксис):
$JSON = @{
name = "test-web-vm"
region = "nyc1"
size = "s-1vcpu-1gb"
image = "ubuntu-18-04-x64"
ipv6 = $true
private_networking = $true
monitoring = $true
} | ConvertTo-Json -CompressЕсли вы хотите добавить cloud-init (user_data) — аккуратно формируйте строку: нужно экранировать кавычки и контролировать переносы строк. Пример простого cloud-init, записанного в одну строку:
$userData = @'
#cloud-config
package_update: true
package_upgrade: true
'@
$JSON = @{
name = "test-web-vm"
region = "nyc1"
size = "s-1vcpu-1gb"
image = "ubuntu-18-04-x64"
ipv6 = $true
private_networking = $true
monitoring = $true
user_data = $userData
} | ConvertTo-Json -CompressСовет: используйте here-string (@’ … ‘@) в PowerShell для удобного включения многострочного cloud-init.
Почему полезны ipv6, мониторинг и private_networking
- monitoring: даёт метрики (CPU, память) в консоли DigitalOcean. Это полезно для настройки алертов.
- ipv6: доступность по IPv6 упрощает переходы в сети будущих лет.
- private_networking: даёт приватную 10.x.x.x сеть между Droplets, полезно для баз данных и межсерверного трафика.
Пример корректного cloud-init (чтобы обновить пакеты при старте)
Ниже пример, который обновляет систему и устанавливает nginx:
$userData = @'
#cloud-config
package_update: true
package_upgrade: true
packages:
- nginx
runcmd:
- systemctl enable nginx
- systemctl start nginx
'@Добавьте этот блок в поле user_data, как показано выше.
Развёртывание Droplet (Invoke-RestMethod)
После подготовки JSON запускаем HTTP-запрос к API. Рекомендуемый способ — передавать Authorization заголовок явно.
Пример с явными заголовками:
$token = 'digitaloceanapitoken'
$headers = @{
"Authorization" = "Bearer $token"
"Content-Type" = "application/json"
}
$Params = @{
Uri = "https://api.digitalocean.com/v2/droplets"
Method = "POST"
Body = $JSON
Headers = $headers
ErrorAction = 'Stop'
}
Invoke-RestMethod @ParamsЕсли всё в порядке, API вернёт объект с информацией о созданном Droplet и HTTP-код 200/202 (успешно принятый запрос).
Важно: в некоторых старых примерах используют поля Authentication/Token в хэш-таблицах параметров Invoke-RestMethod. Надёжнее явно указывать заголовки Authorization.

Дополнительные параметры и примеры использования
Ниже перечислены параметры, которые часто добавляют в JSON и как они влияют на развёртывание.
- ssh_keys — массив id или отпечатков публичных ключей, чтобы сразу добавить ключи SSH и запретить парольный вход.
- backups — bool, включение автоматических снимков (платная опция).
- volumes — привязка внешних томов хранения (block storage).
- tags — метки для группировки ресурсов и применения политик (firewall, load-balancer).
Пример добавления SSH-ключа и тэга:
$JSON = @{
name = "test-web-vm"
region = "nyc1"
size = "s-1vcpu-1gb"
image = "ubuntu-18-04-x64"
ssh_keys = @("your-ssh-fingerprint-or-id")
tags = @("web", "staging")
} | ConvertTo-Json -CompressСовет: лучше передавать SSH-ключи по отпечатку/ID, чем в явном виде.
Рекомендации по безопасности и соответствию
- Токен храните в секретных хранилищах и давайте минимально необходимые права.
- Не отправляйте токен в логах и не сохраняйте в открытом виде в репозиториях.
- При необходимости отзыва токена — удалите или деактивируйте его в панели DigitalOcean.
Примечание по приватности: если вы обрабатываете персональные данные внутри Droplet, проверьте требования по хранению и передаче данных в вашей юрисдикции.
Ролевые чеклисты
DevOps / Инфраструктура:
- Создать персональный токен для CI/CD.
- Настроить secret store и подключить к пайплайну.
- Написать тестовый скрипт развёртывания в staging.
- Автоматизировать мониторинг и алерты.
Системный администратор:
- Проверить cloud-init на предмет безопасных конфигураций.
- Настроить SSH-доступ через ключи.
- Проверить брандмауэр и правила доступа.
Security / Compliance:
- Убедиться, что токен имеет минимально необходимые права.
- Настроить ротацию токенов.
- Проверить шифрование секретов в хранилище.
Мини-плейбук: быстрое развёртывание (шаги)
- Получить API-токен и поместить его в хранилище секретов.
- Подготовить JSON-конфигурацию и cloud-init (user_data).
- Выполнить локальный dry-run (проверить JSON через ConvertTo-Json).
- Вызвать Invoke-RestMethod с заголовком Authorization.
- Проверить статус создания в панели или через GET /droplets/{id}.
- Настроить мониторинг и теги, добавить в инвентарь.
Критерии приёмки:
- Droplet создан и доступен через SSH по ключу.
- Cloud-init отработал (сервер отвечает, nginx упал/запущен и т. п.).
- Метрики мониторинга отображаются в DigitalOcean.
Отладка и распространённые ошибки
- Ошибка аутентификации 401: проверьте токен и заголовок Authorization.
- 422 или ошибки парсинга JSON: используйте ConvertTo-Json и убедитесь, что поле user_data корректно экранировано.
- Таймауты: проверьте сетевой доступ из вашей среды к api.digitalocean.com.
Полезная команда для проверки токена (GET текущего аккаунта):
$headers = @{ "Authorization" = "Bearer $token" }
Invoke-RestMethod -Uri "https://api.digitalocean.com/v2/account" -Headers $headersЕсли запрос возвращает информацию об аккаунте — токен корректен.
Когда этот подход не подходит
- Массовые масштабируемые развёртывания: хранение инстансов вручную через скрипты может быть неудобно. В этом случае рассмотреть Terraform/Ansible/Cloud-Init + Packer.
- Сильные требования к политике конфиденциальности: нужно проверить договорные обязательства с провайдером.
Ментальные модели и решения
- «Идем от минимального к расширяемому»: начинайте с простого Droplet, затем добавляйте тома и сетевые правила.
- «Инфраструктура как код»: храните JSON/скрипты в системе контроля версий, но секреты — в хранилище секретов.
Короткий глоссарий
- Droplet — виртуальная машина в DigitalOcean.
- user_data / cloud-init — скрипт/конфигурация, выполняемая при первом старте VM.
- Token — персональный API-ключ для доступа к REST API.
Итоги
PowerShell + DigitalOcean REST API дают быстрый путь к автоматизации создания Droplets. Используйте ConvertTo-Json для формирования тела запроса, передавайте заголовок Authorization с Bearer-токеном и защищайте ваши токены. Для повторяемых развёртываний рассмотреть привлечение инфраструктурных инструментов (Terraform) и централизованных секрет-менеджеров.
Важное: перед массовыми развёртываниями проверьте конфигурации в тестовой среде и настройте мониторинг.
Дополнительные ресурсы:
- Документация API DigitalOcean
- Руководства по cloud-init
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить