Лично для меня Amazon Web Services всегда ассоциировался с Infrastructure as a Service (IaaS), на базе которого каждый строил свои сервисы и приложения. Но есть и претендующие на роль платформы в виде сервиса, например, Elastic Beanstalk и OpsWorks. Хотя, по моему мнению, их с натяжкой можно считать PaaS, так как остается доступ к инфраструктуре, и вместе с тем головная боль по её администрированию.
Вся прелесть PaaS — это нулевые затраты на администрирование, простота использования и, как следствие, возможность сфокусироваться на коде приложения, забыв о том, как его разворачивать, интегрировать и поддерживать.
Итак, по словам представителей AWS, Lambda позволит забыть об инфраструктуре и запускать приложения в облаке, при этом получая интеграцию с другими сервисами Amazon, масштабируемость, низкую цену использования вычислительных ресурсов. Все, что нужно для старта, — написать функцию, ассоциировать её с событиями. После этого амазон автоматически выполнит функцию при каждом новом событии. О масштабировании и высокой доступности можно не думать: наша функция сможет обработать десятки тысяч запросов в час без каких-либо усилий с нашей стороны, без бекенда в традиционном его понимании.
Концепция
Основной рабочей лошадкой является лямбда-функция (или Лямбда-выражение). Лямбда-функция связывается с контекстом:
- Окружение: ЯП, количество оперативной памяти, настройки доступа
- Ресурсы, изменения которых нужно отслеживать
- Код — та самая функция, выполняемая при получении сообщения об изменении ресурса
Как это работает
При изменении ресурса генерируется сообщение, которое активирует функцию. В свою очередь она (функция) имеет досутп к JSON объекту, который содержит всю необходимую информацию об этом изменениии, или о другом сообщении.
Например, можем ассоциировать функцию с s3-bucket-ом. При попадании в него нового объекта, наша лямбда будет запущена и получит доступ к данным о нём. Допустим, это новое изображение, для которого нужно сделать набор эскизов разного размера. Наша функция будет запущена при каждом новом изображении, загруженном в бакет, и результат мы можем сохранить в этот же или отдельный бакет.
Необходимо помнить о том, что наша функция не сохраняет свое состояние (stateless), поэтому результаты работы нужно сохранять в каком-либо хранилище данных. В нашем примере — это S3 bucket.
Окружение
На данный момент поддерживается только Java Script + Node,js. Также можно загружать библиотеки и использовать AWS SDK. Насколько я понял из видео презентации, под капотом используется Docker, запущенный на EC2 инстансе.
Текущие ограничения и планы на будущее
В первую очередь бросилось в глаза:
- отсутствие готового CI/CD
- нет интеграции с системами контроля версий (git, svn)
Также, как было сказано выше, поддерживается только Java Script, как язык программирования.
В планах расширить список поддерживаемых сервисов (сейчас это 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, попробовать стоит. Если будет время, то я обязательно поделюсь практическим опытом использования.
Автор: morkot