Jupyter Notebook – прототипирование облачной автоматизации на Python
В этой статье мы покажем вам как установить Jupyter, запустить ваш первый notebook и написать первый прототип скрипта, автоматизирующего работу с виртуальными машинами в облаке AWS или K2 Cloud.
Далее вы сможете легко использовать этот подход для прототипирования абсолютно любых Python приложений!
Требования
- Минимальное знание Python
- Минимальное знание Linux
Что такое Jupyter
Jupyter — это проект с открытым исходным кодом, распространяющимся по лицензии BSD, который родился из проекта IPython для для поддержки интерактивной работы с данными в Data Science и Machine Learning, другими словами для BigData.
Чем он может быть полезен DevOps инженеру? Jupyter позволяет нам запускать Python код прямо в браузере, сохраняя при этом и сам код и результат его исполнения в .ipynb файле, который одинаково отображается абсолютно на любом ПК или сервере. С его появлением прототипировать Python приложения стало существенно проще. А если выложить .ipynb файл на GitHub или, например, внутрикорпоративный репозиторий исходных кодов, становится очень просто показывать коллегам примеры реализации тех или иных кусков кода и конечно же прототипировать функции, классы, отдельные приложения и сервисы.
Пример интерфейса Jupyter со структурой проекта:
Пример интерфейса Jupyter с прототипом функции (отображение эластичных IP-адресов boto):
Установка Jupyter
Лично я предпочитаю для любого прототипа использовать отдельную директорию и отдельное виртуальное окружение, куда можно поставить все необходимые для прототипа зависимости. Соответственно, для прототипа любого автоматизирующего AWS или K2 Cloud скрипта, я всегда делаю что-то вроде:
mkdir c2_boto_test
cd c2_boto_test
virtualenv venv
source venv/bin/activate
pip install boto
pip install jupyter
Далее я скачиваю в эту же директорию c2rc.sh файл с настройками подключения к API-сервису K2 Cloud и пытаюсь реализовать нужную мне функциональность, удобно перезапуская разные блоки кода в нужной мне последовательности.
Для того, чтобы открыть в браузере интерфейс Jupyter, выполните команду:
jupyter notebook
Если же интерфейс Jupyter не открылся в новой вкладке вашего браузера, внимательно посмотрите на вывод команды, возможно, порт 8888 уже занят вашим приложением или же войти в интерфейс Jupyter придется самостоятельно, введя в браузер что-то вроде:
http://localhost:8888/tree?token=b2eca56a5eb3c93cfb1f121c85223ee74226f58e75f59db5
Перед вами откроется директория вашего проекта, с файлами и директориями внутри которой можно будет работать прямо из браузера. Как только вы получите нужный вам результат, блок кода в .ipynb файле можно показать коллеге, включить в основное приложение или сервис или же выложить на GitHub.
Работа с эластичными (публичными) IP-адресами в boto
В качестве небольшого бонуса тем, кто дочитал статью до конца приведу пример получения списка, резервирования и освобождения эластичных (публичных) IP-адресов в boto в K2 Cloud:
#!/usr/bin/env python
# coding: utf-8
import os
import boto
EC2_URL = os.environ['EC2_URL']
EC2_ACCESS_KEY = os.environ['EC2_ACCESS_KEY']
EC2_SECRET_KEY = os.environ['EC2_SECRET_KEY']
class IPManager():
def __init__(self):
self.conn = boto.connect_ec2_endpoint(
EC2_URL,
aws_access_key_id=EC2_ACCESS_KEY,
aws_secret_access_key=EC2_SECRET_KEY
)
def list_ips(self):
eips = self.conn.get_all_addresses()
for ip in eips:
print ip.public_ip
def allocate_ip(self):
ip = self.conn.allocate_address()
return ip.public_ip
def release_ip(self, ip):
self.conn.release_address(ip)
mgr = IPManager()
mgr.list_ips()
ip = mgr.allocate_ip()
print ip
mgr.list_ips()
mgr.release_ip(ip)
mgr.list_ips()
Заключение
Jupyter является отличным помощником как для начинающего, так и опытного Python разработчика или DevOps-инженера, позволяя нам быстро и эффективно прототипировать нужные функции, сервисы и даже целые приложения. Более того, Jupyter поддерживает графические библиотеки типа Seaborn, Matplotlib и Plotly, что легко позволит вам не только работать с любыми данными, но и визуализировать их.