В своей работе специалиста по данным я осознал, насколько необходимо автоматизировать любой и каждый аспект рабочего процесса. Когда большинство людей слышит слова “наука о данных”, в основном они думают о машинном обучении и ИИ. А я точно могу сказать, что, на самом деле, основное время исследователь данных проводит за очень разными видами работы. И вот мой рассказ о том, как автоматизировать сбор данных при помощи 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.

Lightsail dashboard

Создаём инстанс Ubuntu

1. Кликните по кнопке “Create Instance” (обведена на картинке выше).

2. Под изображением c выбором вашего инстанса выберите Linux/Unix.

3. Выберите “OS Only”.

4. Выберите Ubuntu 18.04.

шаги создания инстанса ubuntu

5. Выберите тариф для своего инстанса. Для этого проекта я беру самую недорогую опцию за $3.50. Она более чем подходит для запуска большинства скриптов на Python. Не забывайте, что платить за первый месяц не нужно.

6. Дайте название инстансу. Для своего проекта я придумал “Ubuntu-автоматизация”. 

7. Выберите “Create Instance”.

После выбора “Create Instance” вы вернётесь на дашборд AWS LightSail. Чтобы новый Ubuntu-инстанс появился, должно пройти несколько минут. Пока это происходит, вы будете видеть статус “Pending”, как на скриншоте ниже:

В ожидании создания

Статус сменится на значение “Running” сразу после того, как новый инстанс будет создан. Также вы увидите IP-адрес, присвоенный инстансу. Например, у моего был 3.227.241.208. Этот адрес динамический и будет меняться каждый раз после перезагрузки инстанса. В зависимости от проекта, который вы будете хранить, может понадобиться и статический IP-адрес. 

Ubuntu-инстанс создан и запущен

Создаём статический IP-адрес

Можно и не создавать статический IP, разве что он нужен по требованиям вашего проекта. Я буду создавать статический IP-шник потому, что собираюсь открывать свой SQL-сервер только на нём из соображений безопасности. После первой установки я предпочитаю подключаться по SSH в моем Ubuntu-инстансе со своей локальной машины, а благодаря статическому IP этот процесс упрощается.

1. Перейдите во вкладку “Networking” на вашем дашборде Lightsail.

2. Кликните на “Create static IP”.

дашборд Networking

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.

  1. Нажмите i, чтобы перейти в режим вставки.
  2. В режиме вставки скопируйте и вставьте службу Cron в редактор.
  3. Нажмите Escape.
  4. Нажмите : (двоеточие), w (записать), q (выйти), чтобы сохранить и выйти из Vim.
:wq

Теперь вы закончили и ваш скрипт будет запускаться с интервалом, определённым в службе Cron. 

Если хотите проверить их, можете запустить командный crontab -l. Так вы увидите текущие службы Cron.

crontab -l

Для авторизации выведенные операторы и ошибки будут сохраняться в файле cron.log. Из домашней директории запустите следующую команду:

cat cron.log

Если вы видите такие же результаты, значит всё у вас работает правильно!

cron.log

Видео установки:

Читайте также:


Перевод статьи Eric Landstein: Automate python scripts with AWS Lightsail

Предыдущая статья5 причин выбрать Flutter в 2020 году
Следующая статьяЧистый код JavaScript: обработка ошибок