Как использовать API для развертывания капель из основного снимка

Вступление

В этом уроке мы создадим мастер-снимок с нашим программным обеспечением и конфигурацией, а затем используем API-интерфейс DigitalOcean для автоматического развертывания капель с помощью этого образа. В примерах этого руководства будет использоваться официальный клиент API DigitalOcean для Ruby DropletKit.

Предпосылки

  • Ruby должен быть установлен на компьютере, который вы будете использовать для подключения к API.

  • В этой среде также должен быть установлен гем DropletKit.

  • Вы должны иметь generated API token для использования вашими скриптами.

Шаг первый: создайте свой мастер-образ

В этом уроке мы создадим мастер-образ на основе LAMP Image одним щелчком, настроим нашу конфигурацию по умолчанию и затем используем ее для создать снимок изображения. Моментальные снимки стоят $ 0,05 за гигабайт в месяц, исходя из количества используемого пространства в файловой системе. Мы сможем развернуть несколько экземпляров нашего настроенного стека LAMP с помощью API DigitalOcean.

Создать новую каплю

Мы начнем с создания новой капли с именем + lamp-master + на панели управления, выбрав изображение LAMP на вкладке Приложения. Этот образ предоставит нам предварительно собранный сервер Ubuntu 14.04 с Apache, MySQL и PHP.

При создании капли, которую мы будем использовать для создания нашего основного снимка, важно выбрать наименьший план капли, который мы можем. Как только мы создадим наш снимок, он может быть использован только для создания капель на том же плане или на более крупном. Например, если мы создадим наш главный моментальный снимок с использованием капли объемом 1 ГБ, мы сможем использовать его для запуска капель на планах размером 1 ГБ, 2 ГБ или других крупных, но мы не сможем запустить каплю с оперативной памятью 512 МБ из этого моментального снимка.

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

Начальная конфигурация

Теперь, когда мы подключены к нашей новой капле, мы можем настроить любые параметры или установить любые пакеты, которые мы хотим иметь на всех каплях, развернутых из нашего главного образа. В этом случае мы установим два дополнительных модуля php; скручиваемость и Imagemagick.

sudo apt-get update
sudo apt-get install php5-curl php5-imagick

Создание снимка

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

sudo poweroff

Хотя мы могли бы создать наш снимок с панели управления, для целей данного руководства мы будем использовать API с этого момента для работы с нашей учетной записью DigitalOcean. Эти примеры можно запустить с помощью интерактивного Ruby (+ irb +) или добавить в скрипт и запустить с помощью команды + ruby ​​+. Первым шагом будет включение клиента DropletKit.

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)

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

droplets = client.droplets.all
droplets.each do |droplet|
 if droplet.name == "lamp-master"
   puts droplet.id
 end
end

Этот фрагмент кода будет вызывать конечную точку капель API и перебирать капли в нашей учетной записи, ища одну с именем + lamp-master +. Когда он найдет его, сценарий отобразит идентификационный номер для этой капли.

Теперь, когда у нас есть наш идентификационный номер капли, мы можем сказать API для создания снимка этой капли, передав идентификатор капли в действие моментального снимка конечной точки капли. В дополнение к идентификатору капли мы также передадим имя снимка, который будет использоваться для нашего нового изображения. В этом случае мы решили назвать наш снимок + lamp-image +.

client.droplet_actions.snapshot(droplet_id: '', name: 'lamp-image')

Сделанный нами запрос снимка вернет идентификационный номер события, который можно использовать для отслеживания состояния процесса снимка. Thutorial предоставит больше информации об использовании идентификаторов событий.

Шаг второй: Развертывание капель из нашего снимка

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

images = client.images.all(public:false)
images.each do |image|
 if image.name == "lamp-image"
   puts image.id
 end
end

Как и в нашем примере идентификации капельки, этот код будет циклически перебирать снимки и резервные изображения в нашей учетной записи и отображать идентификатор для изображения с именем + lamp-image +.

Теперь, когда у нас есть идентификационный номер нашего изображения, мы можем начать развертывание капель. Следующий код создаст новую каплю 2 ГБ, используя наш мастер-снимок в регионе Нью-Йорк 3.

Обратите внимание, что наше снимок должен присутствовать в регионе, который мы указали для создания капли. Вы можете перенести изображение в другие регионы через панель управления или через интерфейс API image[image.

droplet = DropletKit::Droplet.new(name: 'my-lamp-server', region: 'nyc3', size: '2gb', image: '')
client.droplets.create(droplet)

Шаг третий: настройка с пользовательскими данными

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

Для этого примера мы предварительно загрузим в нашу новую каплю пользовательский файл index.html, включая его имя.

sitename = "example.org"
userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"
droplet = DropletKit::Droplet.new(name: sitename, region: 'nyc3', size: '2gb', image: '', user_data: userdata)
client.droplets.create(droplet)

В этом примере мы просто используем команду + echo + внутри нашей новой капли, чтобы добавить HTML в файл index.html в корневом веб-каталоге. Используя другие команды, вы можете настроить новые виртуальные хосты прямо на вашей дроплете, получить дополнительные сведения о конфигурации с удаленного сервера или сделать все, что вы можете сделать через ssh-соединение. . Вы можете узнать больше о пользовательских данных здесь.

Шаг четвертый: собрать его вместе

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

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)
region = 'nyc3'
image_id = ''
droplet_size = '2gb'

puts "Enter a name for your new droplet:"
sitename = gets.chomp

userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"
sitename.gsub!(/\s/,'-')
droplet = DropletKit::Droplet.new(name: sitename, region: region, size: droplet_size, image: image_id, user_data: userdata)
client.droplets.create(droplet)

Разбивка кода

Этот скрипт сначала включает в себя клиент DropletKit и инициализирует новое клиентское соединение, используя предоставленный токен API.

require 'droplet_kit'
token=''
client = DropletKit::Client.new(access_token: token)

Затем мы указываем несколько параметров для нашей капли, включая регион, размер капли и идентификатор для нашего основного снимка.

region = 'nyc3'
image_id = ''
droplet_size = '2gb'

Затем мы просим пользователя предоставить имя для новой капли и включить эту информацию в пользовательские данные, которые наш сценарий предоставит процессу создания.

puts "Enter a name for your new droplet:"
sitename = gets.chomp

userdata = "
#cloud-config

runcmd:
- echo '<html><head><title>Welcome to #{sitename} </title></head><body><h1>This is #{sitename}</h1></body></html>' > /var/www/html/index.html
"

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

sitename.gsub!(/\s/,'-')

Затем мы объединяем все эти переменные и отправляем наш запрос на создание новой капли.

droplet = DropletKit::Droplet.new(name: sitename, region: region, size: droplet_size, image: image_id, user_data: userdata)
client.droplets.create(droplet)

Следующие шаги

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

  • Использование DNS endpoint API для автоматической настройки записей DNS для новых капель при их запуске.

  • Запрашивать у пользователя дополнительные входные данные, такие как область или размер капли.

  • Используя пользовательские данные, вызовы runcmd загружают веб-контент в новые капли или заполняют базы данных MySQL.

Related