AWS или Yandex Cloud? Выбираю облачный сервер для своего Pet-проекта
Привет! Меня зовут Влад, и я software инженер. Сегодня я расскажу вам о своем опыте использования Yandex Cloud в качестве облачного сервера и о том, что из этого вышло. Вот, как всё началось:
Конец декабря, в воздухе витает аромат мандаринов и Нового Года. В предвкушении интересной поездки я открываю приложение РЖД, чтобы купить билет на поезд, и с ужасом обнаруживаю, что все билеты распроданы.
"Не беда, не в первый раз," думаю я. Оформляю оповещение о свободных билетах в приложении РЖД и жду. Периодически захожу в приложение и мониторю билеты сам.
И, о чудо, свободный билет находится. Быстро покупаю его и облегченно выдыхаю.
Потом появляется мысль: "Так, стоп. А почему приложение не прислало уведомление?" Проверяю, действительно, оповещений не было.
В этот момент у меня закрадывается мысль: а что делать, если в следующий раз случится подобная ситуация?
Так родилась идея телеграм-бота @poisk_bileta_bot
Задача была довольно простая: бот должен уметь находить билеты и уведомлять о наличии освободившихся.
Прототип написал за 30 минут, который успешно стартовал на ноутбуке.
Встал вопрос выбора облачного сервиса для деплоя в мир. На тот момент у меня был опыт работы с Amazon AWS, и я знал его подводные камни. Но вот облом — API РЖД не работает с территории из других стран
- Лол что? Я не могу найти билет из-за границы на сайте РЖД?
- Нет, не можешь
А Amazon не позволяет подключать сервера в России. Так я познакомился с Yandex Cloud.
Первое впечатление было: "Как же удобно сделан интерфейс по сравнению с AWS." Затем были отрицание, гнев, торг, депрессия и принятие. Но обо всем по порядку.
Боту много не надо: база данных для сохранения подписок и Docker-контейнер, который будет слушать телеграм-бота и отвечать на запросы пользователя.
У Yandex Cloud есть замечательный сервис для быстрого разворачивания контейнеров: Serverless Containers. Казалось бы, отличный вариант, но вот засада: этот сервис в режиме ожидания не делает НИЧЕГО. Реально ничего. Т.е. он работает только тогда, когда к нему обращаются на публичный адрес, а в режиме простоя даже логи не пишет. Вроде ничего криминального, обычное ограничение системы, но в документации об этом ни слова. Да, кстати, все вопросы, которые у вас могут возникнуть про работу системы, вы скорее всего будете спрашивать у саппорта (хорошо что отвечают они супер быстро), потому что документация супер скудная.
Далее взгляд пал на Compute Cloud. Он тоже умеет создавать виртуальные машины из docker-образов и разворачивать их за считанные секунды.
Вроде всё просто: загружаешь образ контейнера, запускаешь виртуальную машину, которая поднимает докер-контейнер внутри себя. Но дьявол кроется в деталях.
Вот на какие грабли наткнулся в процессе создания и настройки виртуалки:
- Нет базового логирования. Чтобы узнать состояние контейнеров, которые запущены внутри Compute Cloud машины, нужно самостоятельно настраивать передачу логов через сторонние системы (например, fluentd). В случае, если контейнер вообще не стартовал из-за каких-то ошибок, то об этом пользователь вообще никак не узнает из интерфейса.
- Нет возможности сохранить конфигурацию машины как шаблон для последующей быстрой развёртки.
- Нет возможности в автоматическом режиме обновить docker images, которые были скачаны при создании виртуальной машины. Чтобы это сделать, нужно напрямую подключаться к машине через ssh и обновлять все images вручную.
- И вишенка на торте: все environment переменные ты должен указать руками. Из файла их подтянуть можно, но не через интерфейс (как это сделано у AWS).
Несмотря на эти недостатки, у Yandex Cloud есть и свои преимущества по сравнению с AWS:
- Интерфейс выглядит современно, а не "привет из 90-х", как у Amazon.
- Быстрые ответы службы поддержки в режиме чата и в режиме обращений.
- Расположение серверов в России (актуально для компаний, которые не могут использовать зарубежные сервера из-за внутренних политик компании).
- Возможность оплаты с российских карт.
- Цена ниже по сравнению с AWS.
Мой личный вывод таков: Yandex Cloud выигрывает у Amazon AWS в некоторых аспектах (например, интерфейс и цена), но в то же время есть и свои проблемы.
Надеюсь, в будущем команда Яндекса будет развивать сервис и устранять все недостатки.
А в следующий раз расскажу как подключаться к облачной базе данных если она не имеет публичного адреса.
Прикольно будет, когда проект окажется удачным, полностью завязнет в инфраструктуре от яндекса и начнет получать специфический прайс за услуги по логике: а куда вы денетесь. Ну по аналогии с почтой например.
Да, в этом есть проблема привязки к одному провайдеру услуг