В своей работе специалиста по данным я осознал, насколько необходимо автоматизировать любой и каждый аспект рабочего процесса. Когда большинство людей слышит слова “наука о данных”, в основном они думают о машинном обучении и ИИ. А я точно могу сказать, что, на самом деле, основное время исследователь данных проводит за очень разными видами работы. И вот мой рассказ о том, как автоматизировать сбор данных при помощи AWS Lightsail.
Проект, описанный ниже, полностью представлен на github.
1. Создать инстанс AWS Lightsail на Ubuntu.
2. Назначить инстансу выделенный IP-адрес.
3. Установить Python3.7 и PIP на инстанс под Ubuntu.
4. Клонировать питоновский репозиторий на инстансе.
- Питоновский скрипт будет вызывать API Reddit и сохранять все материалы с reddit.com/r/learnpython в виде csv-файла.
5. Создать задание Cron, которое будет запускаться каждый час.
Создание инстанса Ubuntu LightSail на веб-сервисах Amazon
Если вы автономный разработчик или любитель, который работает над личным проектом, Lightsail может помочь вам с развёртыванием и управлением основными облачными ресурсами. Amazon Lightsail — это самый простой путь начать с AWS, если вам нужны только приватные виртуальные сервера. В Lightsail входит всё, что нужно для быстрого запуска вашего проекта: виртуальная машина, хранилище формата SSD, передача данных, управление DNS и статический IP. После того, как вы создадите свой инстанс, вы сможете просто к нему подключиться. Управлять им можно будет при помощи консоли Lightsail, API Lightsail или интерфейса командной строки Lightsail.
Для начала зарегистрируйтесь на Amazon LightSail. Первый месяц бесплатно, а значит, у вас много времени, чтобы понять и решить, подходит ли вам этот сервис.
Когда авторизуетесь, появится страница с дашбордом Lightsail.
Создаём инстанс Ubuntu
1. Кликните по кнопке “Create Instance” (обведена на картинке выше).
2. Под изображением c выбором вашего инстанса выберите Linux/Unix.
3. Выберите “OS Only”.
4. Выберите Ubuntu 18.04.
5. Выберите тариф для своего инстанса. Для этого проекта я беру самую недорогую опцию за $3.50. Она более чем подходит для запуска большинства скриптов на Python. Не забывайте, что платить за первый месяц не нужно.
6. Дайте название инстансу. Для своего проекта я придумал “Ubuntu-автоматизация”.
7. Выберите “Create Instance”.
После выбора “Create Instance” вы вернётесь на дашборд AWS LightSail. Чтобы новый Ubuntu-инстанс появился, должно пройти несколько минут. Пока это происходит, вы будете видеть статус “Pending”, как на скриншоте ниже:
Статус сменится на значение “Running” сразу после того, как новый инстанс будет создан. Также вы увидите IP-адрес, присвоенный инстансу. Например, у моего был 3.227.241.208. Этот адрес динамический и будет меняться каждый раз после перезагрузки инстанса. В зависимости от проекта, который вы будете хранить, может понадобиться и статический IP-адрес.
Создаём статический IP-адрес
Можно и не создавать статический IP, разве что он нужен по требованиям вашего проекта. Я буду создавать статический IP-шник потому, что собираюсь открывать свой SQL-сервер только на нём из соображений безопасности. После первой установки я предпочитаю подключаться по SSH в моем Ubuntu-инстансе со своей локальной машины, а благодаря статическому IP этот процесс упрощается.
1. Перейдите во вкладку “Networking” на вашем дашборде Lightsail.
2. Кликните на “Create static IP”.
3. Выберите ваш сервер для Ubuntu-инстанса в “Attach to an instance”.
4. Назовите статический IP.
5. Нажмите на “Create”.
Затем вы должны увидеть ваш новый статический IP-адрес. И этот IP-адрес не будет изменяться.
Поехали дальше: 18.213.119.58 — статический IP проекта.
Автоматизация Python
Для этого проекта я буду писать скрипт на Python. Он вызывает Reddit API и собирает все новые представления с reddit.com/r/learnpython. Чтобы не растягивать повествование, я не стану рассматривать работу этого отдельного скрипта, а вы можете увидеть весь код на GitHubLink.
Подключение к Ubuntu-инстансу при помощи SSH
Из дашборда Lightsail вы можете подключиться к вашему Ubuntu-инстансу при помощи веб-интерфейса для SSH. После первой инсталляции я предпочитаю пользоваться SSH из-за его простоты. В то же время, я считаю, что веб-интерфейс более простой в применении для установки, описанной в этом посте.
Подключение к терминалу по SSH
В верхнем правом углу выберите Account -> Account. Так вы попадёте в дашборд аккаунта, где можно загрузить свой ключ SSH.
Тут же нажмите на “SSH keys” и после этого на “Download”.
- На вашем локальном компьютере пройдите в
~/.ssh
при помощи командыcd ~/.ssh
.
cd ~/.ssh
- Скопируйте загруженный ключ в это место.
- Чтобы проверить, был ли скопирован ключ в нужное место, выполните команду ls, она выводит все файлы списком. Такой способ сработает только в ОС семейства Unix.
ls
Чтобы подключиться по SSH, выполните следующую команду:
ssh -i ~/.ssh/lightsail.pem -T ubuntu@{your_lightsail_IP_address}
Адрес моего Ubuntu-сервера 18.213.119.58. Для подключения я воспользуюсь следующими командами
Во время первого подключения вы увидите вот такое сообщение:
Выберите “Yes”, чтобы подключиться к вашему Ubuntu-инстансу.
Как подключитесь, увидите следующее:
И веб-подключение по SSH, и локальное подключение к терминалу с SSH валидны и работают. Просто это я предпочитаю подключение через терминал.
Размещение вашего скрипта на Python на Ubuntu-инстансе
Мой любимый метод закачки скрипта на Python на инстанс Ubuntu — это использовать Git.
git clone https://github.com/Landstein/AWS-Lightsail.git
Если есть конфигурационные файлы, которые нужны на вашем Ubuntu-инстансе, и вы не хотите хранить их на github, для переноса пользуйтесь Amazon S3.
Установка Python3.7 и PIP
Для установки Python и PIP я бы рекомендовал пользоваться веб-SSH через дашборд Lightsail.
А в папке репозитория выполните следующую команду. Она запустит код, приведённый ниже и установит Python3.7 вместе с PIP.
bash install_python.sh
—
#!/bin/bash
echo "Installing Python3.7"
sudo apt update
sudo apt install software-properities-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.7
python3.7 --version
echo "python3.7 is installed"
echo "---------------------"
echo "---------------------"
echo "---------------------"
echo "---------------------"
echo "Installing pip3"
sudo apt update
sudo apt install python3-pip
pip3 --version
echo "pip3 installed"
Установка библиотек Python
Следующим шагом установите питоновские библиотеки praw и pandas. Запустите серийный файл python_libraries.sh.
Praw — это враппер для API Python reddit.
Pandas — для манипуляций с данными и их анализа.
bash python_libraries.sh
—
#!/bin/bash
echo "installing praw library"
pip3 install praw
echo "installing pandas library"
pip3 install pandas
Настройка службы Cron
Программная утилита Cron — это планировщик времени запуска служб в компьютерных ОС наподобие Unix. Пользователи, которые занимаются установкой и поддержкой программных окружений, пользуются Cron для планирования служб (команд или скриптов оболочки). Они запускают их периодически в определённое время, дни или другие интервалы. Это типичная автоматизация системной поддержки или администрирования, тем не менее природа общего назначения этого ПО делает его полезным для таких вещей, как скачивание файлов из интернета и загрузка почты через равные интервалы.
Чтобы полностью автоматизировать этот процесс, последним шагом нужно запустить службу Cron с равными интервалами.
Для моего проекта я буду запускать прогон своего скрипта каждый час на 15-ой минуте. Команда для Cron будет выглядеть так:
15 * * * * /usr/bin/python3 /home/ubuntu/AWS-Lightsail/learnpython_to_csv.py >> ~/cron.log 2>&1
Если хотите поиграть с разными интервалами для своих служб, я бы рекомендовал сначала заглянуть сюда.
Создание задания Cron
Настройте редактор на значение vim при помощи такой команды:
export EDIOTR=vim
Войдите в Vim и отредактируйте службы Cron:
crontab -e
В этой точке Vim запустится, а вы сможете вносить изменения в свои службы Cron.
- Нажмите i, чтобы перейти в режим вставки.
- В режиме вставки скопируйте и вставьте службу Cron в редактор.
- Нажмите Escape.
- Нажмите : (двоеточие), w (записать), q (выйти), чтобы сохранить и выйти из Vim.
:wq
Теперь вы закончили и ваш скрипт будет запускаться с интервалом, определённым в службе Cron.
Если хотите проверить их, можете запустить командный crontab -l. Так вы увидите текущие службы Cron.
crontab -l
Для авторизации выведенные операторы и ошибки будут сохраняться в файле cron.log. Из домашней директории запустите следующую команду:
cat cron.log
Если вы видите такие же результаты, значит всё у вас работает правильно!
Видео установки:
Читайте также:
- Вы умеете говорить на Python?
- Архитектура ПО: создайте свое приложение с AWS
- Значение Data Science в современном мире
Перевод статьи Eric Landstein: Automate python scripts with AWS Lightsail