Облака
Облачные вычисления стали популярными среди широких масс примерно полтора-два года назад, и огромную роль в этом сыграл сервис Amazon EC2. Постепенно активность обсуждений этой технологии только возрастала, появлялись сторонники и противники, считающие что это всего лишь очередное модное веяние и ничего больше; некоторые же стали экспериментировать и применять облачные вычисления для решения свох задач.
Довольно долго у EC2 было не много альтернатив, поэтому мало кто задумывался о проблемах миграции с одного клауд провайдера на другой. Однако, в последний год стало появляться все больше и больше компаний, предоставляющих клауд-сервисы адекватного качества по приемлемой цене.
На данный момент EC2, пожалуй, до сих пор остается лидером, однако появилось еще несколько крупных игроков — думаю, такие имена как Rackspace и GoGrid на слуху у всех, кто хотя бы поверхностно интересуется темой. Помимо них на рынке сейчас активны еще не меньше десятка компаний, предлагающих подобные услуги.
Подобное разнообразие уже заставляет внимательнее относиться к вопросу выбора провайдера и задумываться о возможном плане миграции.
Зачем нужен libcloud?
Неотъемлемой частью клауд сервисов является наличие API, как правило RESTful или REST-like, который позволяет полностью контролировать клауд инфраструктуру. К сожалению, практически каждый провайдер создает свой API, несовместимый с уже существующими, что весьма неудобно, если вы решите перейти с одного сервиса на другой, и создает дополнительные сложности, если приходится поддерживать несколько разных сервисов одновременно.
Когда libcloud зарождался в компании Cloudkick (которую, кстати, совсем недавно купил Rackspace), цель была не только создать инструмент для работы с клаудами из Python, но и сформулировать видение того, каким должен (может) быть обобщенный интерфейс для работы с клаудами, как со стороны API сервисов, как и с клиентской стороны при работе с разными платформами. Например, параллельно с Python версией, развивается Java версия, принцип работы и концепции точно такие же.
Впрочем, не буду углубляться в философские аспекты, а продемонстрирую, что позволяет делать libcloud.
Приступаем к работе
Установка и настройка
Процесс установки вряд-ли покажется кому-нибудь новым:
easy_install apache-libcloud
Второй подготовительный этап — активировать API и получить ключ и пароль. Эта процедура отличается у различных клауд провайдеров и обычно описана у них в документации. Например, в случае ракспейса она выглядит так: зайти на manage.rackspacecloud.com, затем в меню Your Account -> API Access.
Терминология и интерфейс
В libcloud используется следующая терминология:
- Нода — экземпляр одного виртуального сервера. У провайдеров обычно называется просто сервером
- Размер ноды — физический размер ноды. Для разных провайдеров характеристики отличаются, обычно сюда включается размер оперативной памяти, количество ядер процессора, иногда размер дискового пространства
- Образ ноды — образ операционной системы, которая используется для загрузки ноды
Над всеми вышеописанными объектами возможна операция list — получить актуальный список объектов. Для нод поддерживается больше операций: их можно создавать (create), удалять (destroy), а так же перегружать (reboot).
Просмотр доступных размеров и образов нод
Начнем с простого примера: подключимся к сервису и получим список всех образов с CentOS, а так же список всех возможных размеров нод:
#!/usr/bin/env python
from libcloud.types import Provider
from libcloud.providers import get_driver
from secret import access_id, secret_key
if __name__ == "__main__":
Driver = get_driver(Provider.GOGRID)
conn = Driver(access_id, secret_key)
print "images: "
for image in conn.list_images():
if "CentOS" in image.name:
print " %s %s" % (image.id, image.name)
print "sizes: "
for size in conn.list_sizes():
print size
Для запуска потребуется создать файл «secret.py» и объявить там переменные access_id и secret_key с нужным пользователем и паролем для доступа к API вашего провейдера. Обратите внимание на строку:
Driver = get_driver(Provider.GOGRID)
Здесь мы говорим, что хотим использовать драйвер для GoGrid. Для того, чтобы получить список всех поддерживаемых провайдеров, в шелле нужно выполнить следующую команду:
pydoc libcloud.types.Provider
Создание и удаление нод
Рассмотрим пример создания и удаления ноды. Для создания нам нужно определиться с основными параметрами ноды, такими как имя, размер и образ. В качестве образа опять же выберем первый образ, содержащий в имени CentOS, и возьмем первый попавшийся размер.
#!/usr/bin/env python
from libcloud.types import Provider
from libcloud.providers import get_driver
from secret import access_id, secret_key
if __name__ == "__main__":
Driver = get_driver(Provider.GOGRID)
conn = Driver(access_id, secret_key)
image = [image for image in conn.list_images() if
"CentOS" in image.name][0]
size = conn.list_sizes()[0]
new_node = conn.create_node(name='mynode', image=image,
size=size)
print "node created: ", new_node
new_node.destroy()
Заключение
Как видим, тут тоже все довольно просто и прозрачно; и двумя коротенькими скриптами удалось покрыть почти весь общий интерфейс. Конечно же, функционал libcloud'а на этом не ограничивается, и я не ставлю перед собой задачу составить подробное руководство по использованию, а лишь заинтересовать тех, кто только начинает работать с клаудами и, в особенности, тех людей, которые используют правайдер-специфичные библиотеки.
У более опытных пользователей облаков наверняка возникнет ощущение, что описанного функционала недостаточно. Да, в большинстве случаев действительно требуется использовать нечто большее, и, понятно, что все провайдер-специфичные вещи невозможно покрыть единым интерфейсом.
На этот случай libcloud поддерживает так называемые 'extra' методы в драйверах провайдеров, которые позволяют, например, создавать пары ssh ключей, создавать свои собственные образы нод и т.д. По моим наблюдениям, драйверы популярных провайдеров довольно хорошо покрывают весь функционал и оперативно обновляются. Информацию о том, что поддерживает каждый из драйверов, можно найти в документации API самого libcloud.
Надеюсь, libcloud упростит жизнь тем, кто работает с облаками, а моя статья поможет быстро сориентироваться в проекте.