Страницы

понедельник, 29 августа 2016 г.

Бесплатный хостинг микросервиса на Amazon

Предыстория.

Как я ранее писал, я захотел создать приложение для своих GPS часов Garmin, которое могло бы управлять сигнализацией на моей машине. Проанализировав протокол, я понял что необходимо получить Cookie при авторизации, для дальнейших запросов к API Starline. Однако, средствами Connect IQ SDK этого сделать было не возможно, и поэтому нужно было найти/сделать внешний сервис, который позволил бы извлекать Cookie и возвращать их приложению через JSON. Заодно нужно было находить sha1 пароля, что сама по себе дорогая операция (80 итераций, 5 групп по 32 бита считаются) или надо было её ещё реализовать на Monkey C, что тоже в кайфолом.


Пошерстив интернет, я не нашёл толком сервисов, которые полностью меня бы устроили:
  • https://repl.it/ - сервис который позволяет решить эту задачу, но только первые 25000 запросов бесплатно, вроде дофига, но лимит не в месяц и когда-нибудь закончится.
  • http://sandbox.onlinephpfunctions.com/ - какой-то сервис для запуска php в песочнице, работает не по TLS, и выдаёт ответы не в JSON/AJAX. не катит.
  • http://onlinecurl.com/ - делает curl запрос, и возвращает через AJAX заголовки и тело, то что надо, но работает без TLS. был бы TLS...
  • https://ideone.com/ - хорошая штука, чтобы потестить код онлайн, но не через AJAX и компилирует и т.п., короче опять мимо.
  • https://eval.in/ - тоже что-то наподобие.
Гуглить можно было долго и упорно, но я всё равно бы к чему-нибудь придрался. По следующим причинам:
  • так как по эфиру пойдут пароли, нужно обязательно TLS
  • нужно сделать не просто запрос, а ещё посчитать sha1 пароля, чтобы не делать этого на Monkey C.
  • это должно быть на мощной площадке, чтобы это можно было назвать сервисом. Иначе зачем вообще это делать?!
Хотелок много - нужно делать сервис самому. Но где его тогда хостить? Как лет 13 назад на fatal.ru? :-)
Времена прошли, и я решил нагуглить чего предлагают бесплатного крупные игроки. Google вроде никакой халявы не предлагал, Yandex тоже, и я вспомнил про Amazon Lambda. Зашёл к ним на сайт, смотрю Try AWS for Free. Короче, можно год бесплатно использовать разные сервисы ограничено, бла-бла-бла и вот оно! Amazon Lambda бесплатно Forever 1 млн запросов в месяц и 3,2 млн секунд процессорного времени! Это просто вагон для такой задачи :-)

Реализация.

В общем, гугл вывел на man как сделать микросервис AWS Lambda по инструкции.
Amazon Lambda поддерживает пока Java, Python, JavaScript. Мне комфортно сделать на Python. Заводим аккаунт на AWS, если ещё нет.
Дальше следуем инструкции и создаём пробный микросервис на AWS Lambda!

Накатал говнокод по-быстрому https://github.com/khaliullov/starline_gsm_api/blob/master/server.py
По инструкции сделал Lambda-функцию, разложил и всё заработало. Можно дальше делать приложение для часов.