Python boto – работа с виртуальными машинами
Все, что придется делать больше одного раза, надо автоматизировать.
В этой статье я расскажу как при помощи Python и boto автоматизировать работу с виртуальными машинами. В качестве публичного облака будет использовано K2 Cloud.
Предварительная подготовка
Давайте создадим отдельную директорию c2_examples, в которой будем проводить все эксперименты
mkdir c2_examples
cd c2_examples
Создайте виртуальное кружение, в которое мы установим все необходимые библиотеки:
virtualenv venv
source venv/bin/activate
Установим необходимые библиотеки для работы в K2 Cloud
pip install c2client
Для тех, кто проводит свои эксперименты в Облаке Amazon, необходимо просто установить boto:
pip install boto
Для K2 Cloud настройка будет выполнена следующим образом:
- Войдите в Консоль управления Облаком, используя свою учетную запись
- Скачайте файл с вашими настройками
- Отредактируйте файл c2rc.sh, указав в переменной C2_PROJECT название вашего проекта
- Обновите переменные окружения: source c2rc.sh
Создание виртуальных машин
Создайте файл instance_launch.py следующего содержания:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import boto
import os
# Определяем переменные подключения и другие константы
EC2_URL = os.environ['EC2_URL']
EC2_ACCESS_KEY = os.environ['EC2_ACCESS_KEY']
EC2_SECRET_KEY = os.environ['EC2_SECRET_KEY']
TEMPLATE_ID = 'cmi-2A21A30D'
INSTANCE_TYPE = 'c1.large'
SECURITY_GROUP = 'subnet-61ECBB2A'
KEY_NAME = 'Lenovo-T410'
# Создаем объект подключения к Облаку
conn = boto.connect_ec2_endpoint(
EC2_URL,
aws_access_key_id=EC2_ACCESS_KEY,
aws_secret_access_key=EC2_SECRET_KEY
)
# Запускаем виртуальный сервер
reservation = conn.run_instances(
image_id=TEMPLATE_ID, # Шаблон
key_name=KEY_NAME, # Имя публичного SSH ключа
instance_type=INSTANCE_TYPE, # Тип (размер) виртуального сервера
security_groups=[SECURITY_GROUP] # Сеть, к которой будет подключена ВМ
)
# Получим и выведем ID нашего сервера
instance_id = reservation.instances[0].id
print ('Instance ID: {instance_id}'.format(instance_id=instance_id))
Запустим виртуальную машину программно:
chmod +x ./instance_launch.py
./instance_launch.py
Instance ID: i-1B918761
Удаление виртуальной машины
Удаление виртуальной машины (delete_instance.py) делается ни чуть не сложнее:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import boto
import os
# Определяем переменные подключения и другие константы
EC2_URL = os.environ['EC2_URL']
EC2_ACCESS_KEY = os.environ['EC2_ACCESS_KEY']
EC2_SECRET_KEY = os.environ['EC2_SECRET_KEY']
TEMPLATE_ID = 'cmi-2A21A30D'
INSTANCE_TYPE = 'c1.large'
SECURITY_GROUP = 'subnet-61ECBB2A'
KEY_NAME = 'Lenovo-T410'
# Создаем объект подключения к Облаку
conn = boto.connect_ec2_endpoint(
EC2_URL,
aws_access_key_id=EC2_ACCESS_KEY,
aws_secret_access_key=EC2_SECRET_KEY
)
instances_to_delete = [
'i-1B918761', # ID ВМ, которую нужно удалить
]
# Удаляем ВМ
conn.terminate_instances(instance_ids=instances_to_delete)
Получение списка виртуальных машин
Чтобы получить список виртуальных машин, используйте следующий пример (list_instances.py):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import boto
import os
# Определяем переменные подключения и другие константы
EC2_URL = os.environ['EC2_URL']
EC2_ACCESS_KEY = os.environ['EC2_ACCESS_KEY']
EC2_SECRET_KEY = os.environ['EC2_SECRET_KEY']
TEMPLATE_ID = 'cmi-2A21A30D'
INSTANCE_TYPE = 'c1.large'
SECURITY_GROUP = 'subnet-61ECBB2A'
KEY_NAME = 'Lenovo-T410'
# Создаем объект подключения к Облаку
conn = boto.connect_ec2_endpoint(
EC2_URL,
aws_access_key_id=EC2_ACCESS_KEY,
aws_secret_access_key=EC2_SECRET_KEY
)
# Получим список резерваций
reservations = conn.get_all_instances()
# Получим список ID ВМ и их внешних IP адресов
for r in reservations:
for i in r.instances:
print ('Instance ({id}) - {ip_address}'.format(
id=i.id,
ip_address=i.ip_address
)
)