В своей работе специалиста по данным я осознал, насколько необходимо автоматизировать любой и каждый аспект рабочего процесса. Когда большинство людей слышит слова “наука о данных”, в основном они думают о машинном обучении и ИИ. А я точно могу сказать, что, на самом деле, основное время исследователь данных проводит за очень разными видами работы. И вот мой рассказ о том, как автоматизировать сбор данных при помощи AWS Lightsail.
Проект, описанный ниже, полностью представлен на github.
1. Создать инстанс AWS Lightsail на Ubuntu.
2. Назначить инстансу выделенный IP-адрес.
3. Установить Python3.7 и PIP на инстанс под Ubuntu.
4. Клонировать питоновский репозиторий на инстансе.
5. Создать задание Cron, которое будет запускаться каждый час.
Если вы автономный разработчик или любитель, который работает над личным проектом, Lightsail может помочь вам с развёртыванием и управлением основными облачными ресурсами. Amazon Lightsail — это самый простой путь начать с AWS, если вам нужны только приватные виртуальные сервера. В Lightsail входит всё, что нужно для быстрого запуска вашего проекта: виртуальная машина, хранилище формата SSD, передача данных, управление DNS и статический IP. После того, как вы создадите свой инстанс, вы сможете просто к нему подключиться. Управлять им можно будет при помощи консоли Lightsail, API Lightsail или интерфейса командной строки Lightsail.
Для начала зарегистрируйтесь на Amazon LightSail. Первый месяц бесплатно, а значит, у вас много времени, чтобы понять и решить, подходит ли вам этот сервис.
Когда авторизуетесь, появится страница с дашбордом Lightsail.
Lightsail dashboard Создаём инстанс Ubuntu1. Кликните по кнопке “Create Instance” (обведена на картинке выше).
2. Под изображением c выбором вашего инстанса выберите Linux/Unix.
3. Выберите “OS Only”.
4. Выберите Ubuntu 18.04.
шаги создания инстанса ubuntu5. Выберите тариф для своего инстанса. Для этого проекта я беру самую недорогую опцию за $3.50. Она более чем подходит для запуска большинства скриптов на Python. Не забывайте, что платить за первый месяц не нужно.
6. Дайте название инстансу. Для своего проекта я придумал “Ubuntu-автоматизация”.
7. Выберите “Create Instance”.
После выбора “Create Instance” вы вернётесь на дашборд AWS LightSail. Чтобы новый Ubuntu-инстанс появился, должно пройти несколько минут. Пока это происходит, вы будете видеть статус “Pending”, как на скриншоте ниже:
В ожидании созданияСтатус сменится на значение “Running” сразу после того, как новый инстанс будет создан. Также вы увидите IP-адрес, присвоенный инстансу. Например, у моего был 3.227.241.208. Этот адрес динамический и будет меняться каждый раз после перезагрузки инстанса. В зависимости от проекта, который вы будете хранить, может понадобиться и статический IP-адрес.
Ubuntu-инстанс создан и запущенМожно и не создавать статический IP, разве что он нужен по требованиям вашего проекта. Я буду создавать статический IP-шник потому, что собираюсь открывать свой SQL-сервер только на нём из соображений безопасности. После первой установки я предпочитаю подключаться по SSH в моем Ubuntu-инстансе со своей локальной машины, а благодаря статическому IP этот процесс упрощается.
1. Перейдите во вкладку “Networking” на вашем дашборде Lightsail.
2. Кликните на “Create static IP”.
дашборд Networking3. Выберите ваш сервер для Ubuntu-инстанса в “Attach to an instance”.
4. Назовите статический IP.
5. Нажмите на “Create”.
Затем вы должны увидеть ваш новый статический IP-адрес. И этот IP-адрес не будет изменяться.
Поехали дальше: 18.213.119.58 — статический IP проекта.
Для этого проекта я буду писать скрипт на Python. Он вызывает Reddit API и собирает все новые представления с reddit.com/r/learnpython. Чтобы не растягивать повествование, я не стану рассматривать работу этого отдельного скрипта, а вы можете увидеть весь код на GitHubLink.
Подключение к Ubuntu-инстансу при помощи SSHИз дашборда Lightsail вы можете подключиться к вашему Ubuntu-инстансу при помощи веб-интерфейса для SSH. После первой инсталляции я предпочитаю пользоваться SSH из-за его простоты. В то же время, я считаю, что веб-интерфейс более простой в применении для установки, описанной в этом посте.
Подключение к терминалу по SSHВ верхнем правом углу выберите Account -> Account. Так вы попадёте в дашборд аккаунта, где можно загрузить свой ключ SSH.
Тут же нажмите на “SSH keys” и после этого на “Download”.
~/.ssh
при помощи команды cd ~/.ssh
.Чтобы подключиться по SSH, выполните следующую команду:
ssh -i ~/.ssh/lightsail.pem -T [email protected]{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.
Для установки 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 — это планировщик времени запуска служб в компьютерных ОС наподобие 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.
Теперь вы закончили и ваш скрипт будет запускаться с интервалом, определённым в службе Cron.
Если хотите проверить их, можете запустить командный crontab -l. Так вы увидите текущие службы Cron.
crontab -lДля авторизации выведенные операторы и ошибки будут сохраняться в файле cron.log. Из домашней директории запустите следующую команду:
cat cron.logЕсли вы видите такие же результаты, значит всё у вас работает правильно!
cron.logВидео установки:
Перевод статьи Eric Landstein: Automate python scripts with AWS Lightsail
Комментарии