[Перевод] Цены и затраты на Serverless: AWS Lambda

Привет, Хабр! Стараюсь делать переводы лучше и буду рад вашей критике.
(Примечание: цены являются точными по состоянию на август 2018 года)

В сервисе AWS Lambda существует 263 позиции с уникальными ценниками. Например, они могут называться «Accelerated InterRegion Inbound using edge locations outside US, Europe or Japan, From EU (Paris) to EU (London)», и существуют в каждом из 17 регионов. В сумме, это 4 471 отдельные позиции, которые могут быть выставлены вам в счет при выполнении Lambda.
Кроме этого, существует 635 035 позиции для сервиса EC2, 12 261 для Route53 и 15 283 для API Gateway. Всего в Amazon Web Services существует более миллиона отдельных тарифов за различные услуги. Их ценовая политика настолько сложна, что есть целый API только для того, чтобы проверять цены. С помощью него я и получил эти цифры (хотя Lambda не включена в калькулятор цен).

Цены на Lambda очень нетривиальны: сперва используется бесплатный уровень на первый миллион запросов, за которым следует ценник в 0,20 $ за каждый последующий миллион запросов, плюс 0,00001667 $ за ГБ-секунд «compute time», используемого в течение месяца, сверх которого накладывается стоимость API Gateway (3,50 $ за миллион запросов), для передачи HTTP-запросов в Lambda. С вас также взимается плата за любую передачу данных вашей Lambda (0,09 $ за ГБ), а также за любые запросы к Dynamo DB.

Что такое «compute time»?


Мы выяснили, что оплачивается 0,00001667 $ за ГБ-секунду вычислительного времени Lambda. Гб-секунда немного странная единица, не находите? Она могла бы означать количество секунд, когда вы используете в 1 ГБ памяти, но на самом деле это количество секунд, когда выполнялись вычисления, умноженное на количество ГБ, которое было выделено для этих вычислений.

Для тех, кому не по душе микроцентры в качестве единицы измерения, я собрал числа в диаграмму, которая показывает, сколько памяти и времени ЦП вы получаете за 1–6 долларов на миллион запросов:

image

Amazon публикует цены, которые не включают базовый сбор в размере 0,20 $, но я включил его в свои расчеты.

И что такое одна миллисекунда процессорного времени? Миллисекунда вычислений на Apple II представляла 3000 циклов процессора. В моем ноутбуке на Intel i7 это 4 миллиона циклов. В случае с Amazon, они увеличивают скорость работы процессора в зависимости от того, сколько памяти вы используете. Другими словами, ваша производительность — это память * время цикла ЦП, где время цикла ЦП уменьшается, пропорционально используемой памяти. Это ускорение ЦП продолжается до тех пор, пока не иссякнет ресурс одного процессорного ядра, после чего вам предоставляются ресурсы второго ядра, которое может быть полезным или не использоваться вовсе, в зависимости от сборки вашего приложения.

Учтя эти подробности, я скорректировал диаграмму, чтобы показать, сколько фактического процессорного времени вы получаете. Я ориентировался на обычные серверные процессоры, которые мы использовали при сравнительном тестировании.

image

Как видно из диаграммы, не имеет значения, запустите ли вы Lambda с 1024 МБ на 100 мс или 128 МБ на 800 мс, вы получите одно и то же количество вычислений и заплатите одинаково. Свыше 1024 МБ, вы достигаете производительности одного процессорного ядра и начинаете получать мощность второго ядра (если ваше приложение многопоточное и сможет им воспользоваться).

Округление


Помимо этого, процессорное время округляется до ближайших 100 мс, что означает, что даже простая лямбда, которая возвращает текущее время, в наших тестах стоила нам $ 0,41 / миллион вызовов. Конечно, ваша Lambda редко будет работать точное количество миллисекунд, кратное 100. Гораздо чаще вы будете использовать какое-то количество мс, которое Amazon округлит, чтобы вычислить, сколько вы заплатите. Учитывая, что округляются они всегда в большую сторону, это означает, что вы будете переплачивать в среднем 50 мс ЦП за каждый вызов:

image

API-Gateway


AWS Lambda может выполнять самые разные задачи внутри Amazon. Но в первую очередь, они интересны нам для создания веб-приложений без сервера. И для этой цели лямбда не может использоваться напрямую, так как ей нужен какой-то HTTP-сервер, способный преобразовать запрос в invoke API Lambda. Самый простой способ сделать это — использовать API-интерфейс Amazon Gateway.

Стоимость API Gateway составляет 3,50 $ за миллион запросов, что зачастую превышает стоимость самой Lambda. Вот наш график выше, но скорректированный с учетом API Gateway:
image

Вы заметите, что линии 1, 2 и 3 доллара исчезли с графика. Абсолютный минимум составляет 3,91 $ / миллион запросов, при условии, что ваша Lambda потребляет очень мало ЦП.
Вам также придется заплатить за трафик и дополнительную почасовую оплату, если вы хотите использовать кеширование.

Route 53


DNS-сервис Amazon Route53 также не является бесплатным. В первом миллиарде запросов, стоимость составляет $ 0,40 за миллион DNS-запросов. Это доводит нашу общую минимальную стоимость до $ 4,31 / млн.

Еще больше расходов


Подсчет всех затрат может быть утомительным. Логи CloudWatch стоят $ 0,50 за ГБ. При этом $ 0,09 за ГБ трафика начнут существенно влиять на счет.

Lambda @ Edge


Amazon предлагает способ запуска кода через CDN сервис Cloudfront. Там постоянные и переменные затраты в три раза больше, чем у обычной Lambda.

Чтобы использовать Lambda @ Edge для запросов HTTPS, сперва придется купить сам Cloudfront за $ 1 / миллион запросов. Вы также платите за пропускную способность, которая запросто может стать главной статьей расходов. Если ваш сайт занимает 1 МБ, вы в конечном итоге заплатите до 85 $ / млн только за пропускную способность Cloudfront, или 250 $ — в таких регионах, как Южная Америка. Плюс дополнительные $ 20 / за миллион запросов, которые должны вернуться к отправителю.

Вот сколько вам в итоге придется заплатить только за вычисления Lambda @ Edge:

image

© Habrahabr.ru