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

Развёртывание Droplet на DigitalOcean через PowerShell и REST API

6 min read Инфраструктура Обновлено 07 Nov 2025
PowerShell и DigitalOcean API: создание Droplet
PowerShell и DigitalOcean API: создание Droplet

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

  • Установка PowerShell Core

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

  • DigitalOcean REST API

  • Создание JSON-конфигурации

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

  • Дополнительные параметры

  • Итоги

Диаграмма: схема развёртывания VM через API

Введение

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).

Шаги:

  1. Войдите в панель управления DigitalOcean.
  2. Перейдите в раздел API.
  3. Нажмите Generate New Token.
  4. Задайте имя токена и отметьте права чтения и записи (read и write).
  5. Скопируйте токен — после закрытия окна токен больше не будет показан.

Совет по безопасности: создавайте отдельный токен для автоматизации и храните его в секретном хранилище (Vault, Secrets Manager, GitHub Secrets и т. п.). Это упростит отзыв доступа.

Форма создания персонального API-токена в DigitalOcean

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.

Список созданных Droplets в панели DigitalOcean

Дополнительные параметры и примеры использования

Ниже перечислены параметры, которые часто добавляют в 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:

  • Убедиться, что токен имеет минимально необходимые права.
  • Настроить ротацию токенов.
  • Проверить шифрование секретов в хранилище.

Мини-плейбук: быстрое развёртывание (шаги)

  1. Получить API-токен и поместить его в хранилище секретов.
  2. Подготовить JSON-конфигурацию и cloud-init (user_data).
  3. Выполнить локальный dry-run (проверить JSON через ConvertTo-Json).
  4. Вызвать Invoke-RestMethod с заголовком Authorization.
  5. Проверить статус создания в панели или через GET /droplets/{id}.
  6. Настроить мониторинг и теги, добавить в инвентарь.

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

  • 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
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

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

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

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

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

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

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

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

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

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

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