Настройка AWS Lambda для production

Развёртывание приложений на AWS

Dunieski Otano

Amazon Web Services Solutions Architect

В тестах всё работало

  • Функция прошла все тесты
  • В production она зависает и throttle-ится
  • Код был в порядке — конфигурация нет

Бессерверная функция, прошедшая тестирование, но испытывающая проблемы в production: настраиваются параметры памяти и таймаута

Развёртывание приложений на AWS

Ключевые параметры конфигурации Lambda

Логотип Lambda в центре и четыре блока конфигурации: Memory с регулятором масштабирования CPU, Timeout с часами, Ephemeral Storage и Concurrency с параллельными экземплярами функции

  • Memory: также масштабирует CPU и сеть
  • Timeout: максимальное время до завершения функции
  • Ephemeral storage: временное пространство в /tmp
  • Concurrency: количество одновременных запусков
Развёртывание приложений на AWS

Выбор объёма памяти и связь с CPU

  • Больше памяти = пропорционально больше CPU
  • CPU-интенсивная функция работает быстрее при большей памяти
  • Меньше времени выполнения — меньше затрат
  • Подбирайте размер тестированием, а не догадками

График памяти и стоимости: время выполнения резко снижается с ростом памяти, а общая стоимость образует U-образную кривую с выделенной оптимальной точкой

Развёртывание приложений на AWS

Concurrency: reserved и provisioned


Reserved concurrency

  • Ограничивает максимальное число одновременных выполнений
  • Защищает зависимые системы и другие функции

Provisioned concurrency

  • Предварительно прогревает экземпляры — нет холодного старта
  • Для функций с жёсткими требованиями к задержке
Развёртывание приложений на AWS

Упаковка конфигурации и общего кода

  • Environment variables: конфигурация для каждой среды
  • Layers: общий код и зависимости между функциями
  • Extensions: запускаются рядом с функцией для инструментов
  • Не включайте конфигурацию в пакет развёртывания

Варианты упаковки Lambda: переменные среды с внешней конфигурацией, слои с общими библиотеками и расширения для мониторинга или секретов

Развёртывание приложений на AWS

Подключение Lambda к VPC

Lambda подключается к приватному VPC через ENI в приватных подсетях; группа безопасности контролирует исходящий трафик, NAT gateway обеспечивает доступ в интернет

  • Подключайте Lambda к приватным подсетям для внутренних ресурсов
  • Lambda создаёт ENI в вашем VPC
  • Security groups определяют доступные ресурсы
  • Для внешнего доступа нужен NAT или VPC endpoint
Развёртывание приложений на AWS

Обработка сбоев: destinations и DLQ

  • Асинхронные вызовы автоматически повторяются при сбое
  • Lambda Destinations: маршрутизация onSuccess и onFailure
  • Dead-letter queue: сохраняет события, которые так и не выполнились
  • Никогда не теряйте неудавшиеся события молча

Обработка асинхронных сбоев Lambda: цикл повторных попыток ведёт к Lambda Destinations с ветками onSuccess и onFailure, dead-letter queue захватывает события, исчерпавшие все попытки

Развёртывание приложений на AWS

Давайте потренируемся!

Развёртывание приложений на AWS

Preparing Video For Download...