Python boto – работа с виртуальными машинами
О технологиях

Python boto – работа с виртуальными машинами

488
5 минут

Все, что придется делать больше одного раза, надо автоматизировать.
В этой статье я расскажу как при помощи 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
			)
		)

20 ноября 2023
Что такое Kubernetes? Знакомимся с дико популярной платформой контейнерной оркестрации
С появлением микросервисной архитектуры и технологии контейнеризации разработчики и администраторы стали совсем по-другому тестировать и развертывать современное ПО.
1 минута
2912
4 декабря 2020
Дайджест обновлений К2 Облака осень 2020 г.
За осень в К2 Облаке многое изменилось. Мы активно писали код и не успевали сообщать обо всех переменах. Постараемся исправиться и информировать вас ASAP, чтобы вы могли сразу же использовать новые фичи.
1 минута
216
17 сентября 2019
Docker и InSpec: проверка контейнерной инфраструктуры на безопасность
Cis-docker-benchmark – это ни что иное как профиль соответствия InSpec, который содержит в себе набор тестов для запуска в автоматическом режиме. По итогам тестирования вы получаете детальное описание того, что у вас сделано хорошо, а что требует улучшения.
0 минут
577
scrollup