AWS Lambda и никаких серверов

morkot 16 декабря 2014 в 18:40 23,9k
Лично для меня Amazon Web Services всегда ассоциировался с Infrastructure as a Service (IaaS), на базе которого каждый строил свои сервисы и приложения. Но есть и претендующие на роль платформы в виде сервиса, например, Elastic Beanstalk и OpsWorks. Хотя, по моему мнению, их с натяжкой можно считать PaaS, так как остается доступ к инфраструктуре, и вместе с тем головная боль по её администрированию.

Вся прелесть PaaS — это нулевые затраты на администрирование, простота использования и, как следствие, возможность сфокусироваться на коде приложения, забыв о том, как его разворачивать, интегрировать и поддерживать.

Итак, по словам представителей AWS, Lambda позволит забыть об инфраструктуре и запускать приложения в облаке, при этом получая интеграцию с другими сервисами Amazon, масштабируемость, низкую цену использования вычислительных ресурсов. Все, что нужно для старта, — написать функцию, ассоциировать её с событиями. После этого амазон автоматически выполнит функцию при каждом новом событии. О масштабировании и высокой доступности можно не думать: наша функция сможет обработать десятки тысяч запросов в час без каких-либо усилий с нашей стороны, без бекенда в традиционном его понимании.


Концепция


Основной рабочей лошадкой является лямбда-функция (или Лямбда-выражение). Лямбда-функция связывается с контекстом:
  • Окружение: ЯП, количество оперативной памяти, настройки доступа
  • Ресурсы, изменения которых нужно отслеживать
  • Код — та самая функция, выполняемая при получении сообщения об изменении ресурса


Как это работает


При изменении ресурса генерируется сообщение, которое активирует функцию. В свою очередь она (функция) имеет досутп к JSON объекту, который содержит всю необходимую информацию об этом изменениии, или о другом сообщении.

Например, можем ассоциировать функцию с s3-bucket-ом. При попадании в него нового объекта, наша лямбда будет запущена и получит доступ к данным о нём. Допустим, это новое изображение, для которого нужно сделать набор эскизов разного размера. Наша функция будет запущена при каждом новом изображении, загруженном в бакет, и результат мы можем сохранить в этот же или отдельный бакет.

Необходимо помнить о том, что наша функция не сохраняет свое состояние (stateless), поэтому результаты работы нужно сохранять в каком-либо хранилище данных. В нашем примере — это S3 bucket.

Окружение


На данный момент поддерживается только JavaScript + Node,js. Также можно загружать библиотеки и использовать AWS SDK. Насколько я понял из видео презентации, под капотом используется Docker, запущенный на EC2 инстансе.

Текущие ограничения и планы на будущее


В первую очередь бросилось в глаза:
  • отсутствие готового CI/CD
  • нет интеграции с системами контроля версий (git, svn)

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

В планах расширить список поддерживаемых сервисов (сейчас это S3, DynamoDB и Amazon Kinesis) и увеличить количество поддерживаемых ЯП.

Цена


Этот сервис оплачивается по двум параметрам: количество запросов и их суммарное время выполнения с учетом потребляемой памяти.

Количество запросов


  • первый миллион запросов в месяц — бесплатно
  • все, что сверх этого предела, — $0.20 за 1 млн запросов ($0.0000002 за один запрос)

Суммарная продолжительность выполнения запросов


  • время запуска считается от начала работы функции до возврата результата, либо до остановки по таймауту (задается для каждой функции)
  • время округляется в большую сторону до ближайшего кратного 100 мс числа
  • стоимость каждой секунды зависит от количества выделенной памяти, т.е. $0.00001667 за каждую Гигабайт-секунду


По обыкновению, AWS предоставляет бесплатный период (free tier). Подробнее о ценах можно посмотреть здесь. Там же есть несколько примеров. Я приведу один из них.
Если время выполнения функции равно 1 секунде, и она будет запущена 3 млн раз в течение месяца, то мы получим счет в $18.34.

Ссылки по теме


Официальный блог
Стартовая страница сервиса

P.S.


AWS Lambda находится в стадии «preview», чтобы зарегестрироваться и получить доступ, необходимо заполнить запрос по ссылке. Учитывая очень хороший free tier, попробовать стоит. Если будет время, то я обязательно поделюсь практическим опытом использования.
Проголосовать:
+12
Сохранить: