Comments 12
Ох ничего себе опыт взлом! По умолчанию параллельно может быть запущенно 1000 лямбд. Если нужно больше - надо запрашивать
У AWS на этом построен бизнес. Вы либо платите хорошо обученным спецам, и за консалт, а они помогают вам ответить на основные вопросы и собрать нормальное решение. Либо с ужасом собираете всевозможные золотые грабли на бесплатных планах.
Есть возможность ораничить максимальное количество параллельно запущенных лямбд. Например разрешить запускаться только по одному экземпляру лямбды на запрос. В таком случае стоит расчитывать что один экземпляр этой лямбды в теории сможет работать без остановки и можно расчитать итоговую сумму.
В принципе, внутри самого aws есть информация о текущих расходах, и можно настроить так, чтобы он сдал письма.
Но ситуацию это лечит слабо. Выж выключать проект не будете. И вот тут вся эта масштабируемость может сыграть злую шутку. В варианте без масштабирования у вас все будет тормозить, и возможно клиенты даже получат контент, но больше какой-то суммы вы не заплатите, и много запросов вы просто не обслужите. Если в вас придет сколькото гигабит запросов в лябды, боюсь счётчик начнет крутится адски быстро...
В целом ещё вопрос что будет дешевле и при штатном использовании, лямбда, или свой небольшой инстанс/инстанцы.
Насколько мне известно, использование warmers для решения проблем с холодным стартом не рекомендуется. AWS раскидывает запросы по разным инстансам в разных AZ и создать "вручную" соответствующий паттерн будет проблематично. Реальный запрос может все равно прилететь в непрогретую лямбду. Вместо этого лучше использовать штатный Provisioned Concurrency.
Лимит в 250Mb на код легко обходится, если вместо zip архивов использовать docker images (для них лимит 10Gb). Как вариант, для некритичных вещей, можно закинуть разделяемый код/данные на EFS и монтировать при старте лямбд.
А почему бы не взять бесплатную машину в Oracle?
а она навсегда дается? у Амазона тоже есть на первый год аккаунта бесплатный микро инстанс.
Время холодного старта сильно зависит от используемого языка, кроме того еще в 2019 его сильно улучшили кардинальными изменениями сетевого стека лямбд. Еще есть слабодокументированный лайфхак - выносить всю инициализацию вне хендлера лямбды, тк эта часть кода выполняется при инциализации контейнера и без ограничений на CPU. Ну и как правильно сказали - не стоит городить костыли, когда есть Provisioned Concurrency. На мой взгляд проблема cold start сильно раздута и в реальной жизни не так много приложений, где она вообще на что-то влияет - так ни один из заказчиков, с которыми я работал за последние годы, пока не страдал от запуска его кода на 100ms позже.
Нужна ли лямбда?