Jupyter Notebook – прототипирование облачной автоматизации на Python
О технологиях

Jupyter Notebook – прототипирование облачной автоматизации на Python

817
7 минут

В этой статье мы покажем вам как установить 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-project-structure-e1502902016316.png

Пример интерфейса Jupyter с прототипом функции (отображение эластичных IP-адресов boto):

Jupyter-prototype-example-e1502901952842.png

Установка 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:

GitHub: https://github.com/andreivmaksimov/boto_examples/blob/master/boto_elastic_ip_management_example.ipynb


#!/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, что легко позволит вам не только работать с любыми данными, но и визуализировать их.

25 июня 2024
1С в облаке: как повысить производительность приложений
Ни для кого не секрет, что 1С — достаточно требовательна с точки зрения размещения, будь то локальное «железо» или облачная инфраструктура.

В этой статье мы поговорим о тюнинге производительности систем 1С. Обсудим, какие узкие места в инфраструктуре могут повлиять на скорость отклика 1С, и дадим рекомендации по их устранению.
1 минута
1005
19 февраля 2024
Cloud Security Services: безопасное облако для бизнеса
По данным из открытых источников, 9 из 10 опрошенных российских компаний с выручкой от 15 млрд руб. в год активно используют облачные сервисы. Но вместе с востребованностью облачной модели возрастает и обеспокоенность бизнеса: можно ли в облаке выстроить надежную защиту данных?
1 минута
639
20 ноября 2023
Что такое Kubernetes? Знакомимся с дико популярной платформой контейнерной оркестрации
С появлением микросервисной архитектуры и технологии контейнеризации разработчики и администраторы стали совсем по-другому тестировать и развертывать современное ПО.
1 минута
3317
1 ноября 2023
Незаменимых нет. Сервис на базе Nextcloud вместо привычных корпоративных облаков

Привет, Хабр! Меня зовут Александр Фикс, я менеджер по развитию бизнеса K2 Cloud. Сегодня поговорим о тренде локализации, о том, что происходит на рынке файлообменников с уходом западных решений и какие альтернативные продукты есть у бизнеса в данный момент.

1 минута
917
12 января 2023
Российский Kubernetes, какой он? Знакомьтесь, платформа Deckhouse

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

2 минуты
1326
scrollup