Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Digital Ocean
Code

Использование API Digital Ocean для управления облачными инстансами

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Что такое Digital Ocean?

Digital Ocean - один из самых быстрорастущих веб-хостингов, отчасти благодаря быстрым серверам на базе SSD и недорогим ежемесячным планам размещения в 5 долларов США. Спиннинг инстансов на Digital Ocean для тестирования или долгосрочного использования является быстрым, простым и доступным.

Создав образ приложения для перепродажи в Digital Ocean, я провел вас по статье, как запустить инстанс WordPress (или другого приложения) и повторно клонировать его для клиентов. В этом уроке я расскажу вам об использовании API Digital Ocean для программного управления нашими инстансами, также известных как дроплеты, и для автоматизации общих задач. Я также предоставил образец кода для запуска очень простых операций API, написанный на Yii Framework для PHP; вы можете получить код здесь, на Github.

Digital Ocean API

API Digital Ocean позволяет вам управлять дрополетами и ресурсами простым, программным способом, используя HTTP-запросы. Все функциональные возможности, которые вам знакомы на панели управления Digital Ocean, также доступны через API, позволяя вам писать скрипты для сложных действий, которые необходимы вашей ситуации.

В этом уроке мы интегрируем библиотеку API-интерфейса Digital Ocean V2 PHP API Library от разработчика Antoine Corcy в консольное приложение на основе Yii. Вам не нужно знать Yii, чтобы использовать приложение, но вы можете узнать больше о нем здесь: Введение в Yii Framework.

API Digital Ocean аутентифицирует вашу учетную запись через OAuth и состоит из почти десятка областей высокого уровня:

  • Accounts: предоставляет основную информацию о вашей учетной записи Digital Ocean.
  • Actions: исторический журнал действий на дроплетах вашего аккаунта.
  • Domains & Domain Record: позволяет управлять доменами, используемыми для дроплетов в вашей учетной записи, а также связанными с ними DNS-записями.
  • Droplets & Droplet Actions: позволяет создавать, выключать, перезапускать, снимок и многое другое для ваших дроплетов.
  • Images & Image Actions: позволяет вам перечислить и управлять изображениями снапшотов, которые вы сделали с дроплетов в своей учетной записи.
  • SSH Keys: позволяет зарегистрировать ключ SSH для установки при создании дроплета, чтобы не требовалась защита паролем.
  • Regions: перечисляет географические регионы, в которых могут создаваться дроплеты Digital Ocean.
  • Sizes: перечисляет размеры дроплетов, которые можно использовать при их создании.

Теперь, когда вы немного знаете об API, давайте перейдем к нашему собственному приложению.

Настройка ключей доступа

Чтобы использовать API, вам необходимо активировать токены персонального доступа для своей учетной записи. Войдите в свою учетную запись и зайдите на страницу настроек приложения: https://cloud.digitalocean.com/settings/applications. Нажмите Создать новый токен, как показано ниже:

Digital Ocean API Generate Acces Token

Обратите внимание на токен доступа ниже - Digital Ocean покажет вам только один раз:

Digital Ocean API Your New Acces Token

Теперь давайте перейдем к нашему тестовому консольному приложению.

Консольное приложение

В этом уроке мы рассмотрим небольшое консольное приложение, которое я построил и которое выполняет несколько задач, связанных с управлением дроплетов. Вы можете установить приложение самостоятельно из репозитория Tuts + GitHub, а также настроить или расширить его для реализации дополнительных возможностей API. Я разместил подробное руководство по установке консольного приложения на моем веб-сайте. Вы также можете ознакомиться с моим общим руководством по установке приложений Digital Ocean.

Настройка доступа к API

Опять же, мы используем библиотеку Digital Ocean V2 PHP API Library для доступа к API.

Мы создали компонент под названием Ocean.php, который выступает в качестве модели для использования этой библиотеки. Он находится в /app/protected/components/Ocean.php.

Yii загружает токен доступа из файла Ocean.ini, описанный в Руководстве по установке приложений для Digital Ocean Console, и создает экземпляр объекта API - digitalOcean.

Получение дроплетов

Digital Ocean API Console Manage Your Droplets

Теперь давайте получим список наших активных дроплетов. В /app/protected/models/Droplet.php наш метод sync вызывает компоненты Ocean и получает дроплеты:

Вот как выглядит метод getDroplets Ocean:

Примечание: основное консольное приложение просто выполняет синхронизацию загрузки дроплетов в одностороннем режиме. Вы можете реализовать больше возможностей самостоятельно, включая удаление дроплетов, которые были удалены в облаке.

Вот наша функция add. Если дроплет уже существует, мы просто обновляем запись:

Если вы хотите расширить возможности модели, Digital Ocean предлагает широкий спектр действий API Droplet, и у Corcy есть список наглядных примеров.

Получение образов

Затем мы будем использовать API для получения списка наших текущих образов. Образы представляют собой моментальные снимки, в основном резервные копии, взятые из экземпляра сервера в данный момент времени.

Digital Ocean API Console Manage Your Images

Наша модель Snapshot.php имеет операцию sync, которая запрашивает список ваших образов и добавляет их отдельно в базу данных:

Вот код getSnapshots компонента Ocean:

Вот код метода add модели Snapshot - мы игнорируем образы приложений Digital Ocean, которые помечены как общедоступные:

Автоматизация создания снимков

Как мы обсуждали в создании образа приложения для перепродажи в Digital Ocean, полезно автоматизировать создание моментальных снимков, которые вы можете передать своим клиентам. К сожалению, в настоящее время нет способа клонировать или передавать образ по ссылке; каждый раз, когда вы переносите моментальный снимок на другой аккаунт.

Поскольку Digital Ocean требует, чтобы вы создавали изображение как дроплет и отключили его, прежде чем делать новый снимок, повторное создание моментальных снимков - это трудоемкий ручной процесс. Это не помогает тому, что Digital Ocean возобновляет дроплеты после снимков - это просто замедляет процесс.

Поскольку API не принимает запросы во время ожидания других операций, мы должны создать таблицу для отслеживания фоновых действий и использовать задание cron для повторного отключения питания, операции моментального снимка. Вот как это работает:

Перейдите на страницу Images и нажмите View для моментального снимка, который вы хотите клонировать. Затем нажмите кнопку Replicate справа.

View image snapshot and replicate

Это создаст дроплет и добавит запись в таблицу Action с этим image_id и droplet_idend_stage - это константа, которую вы можете установить, указывая количество создаваемых дубликатов.

Row in the Action table representing the background process

Ниже приведен метод replicate() модели Snapshot:

Задача cron будет выполнять ping http://ocean.yourdomain.com/daemon/index для регулярной обработки таблицы действий. Любые незавершенные просроченные записи запросят другой снимок.

Вот метод process() модели Action:

Процесс моментального снимка отключит дроплеты, подождите 20 секунд, чтобы дождаться завершения и запросить моментальный снимок.

Droplet shutdown sleep and snapshot

Вот метод take() модели Snapshot:

Вот код в компоненте Ocean для фактического вызова API:

Если вы посетите веб-сайт Digital Ocean для просмотра дроплета, вы увидите текущее действие:

Droplet Snapshot in Progress

Если моментальный снимок будет успешным, он вернется модели Snapshot. Когда количество повторений этапа репликации завершено, считаем действие завершенным.

Вы можете посетить страницу Images на веб-сайте Digital Ocean, чтобы увидеть ваши реплицированные снимки:

Cloned copies of your snapshot

После создания изображений вы можете удалить дроплет вручную - или вы можете расширить код и сделать это, когда STATUS_COMPLETE будет достигнут. Если вы не удалите дроплет, то с вас за это снимут деньги.

Обратите внимание, что в настоящее время API не предлагает возможность отправки моментального снимка на адрес электронной почты, поэтому вам нужно будет продолжать делать это вручную через веб-интерфейс.

Что дальше?

Я надеюсь, что вам понравилось это руководство и вы считаете, что Digital Ocean может быть полезным сервисом в вашем портфеле инструментов и хостинг-провайдеров. В следующем уроке мы рассмотрим службу Digital Ocean DNS.

Пожалуйста, не стесняйтесь оставлять свои вопросы и комментарии ниже. Вы также можете связаться со мной в Twitter @reifman или отправить мне электронное письмо. Следите за моей страницей инструктора Tuts +, чтобы найти будущие статьи этой серии.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.