Настройка Lambda-функций

Бессерверные приложения с AWS Lambda

Claudio Canales

Senior DevOps Engineer

Почему важна конфигурация

  • Один и тот же код может вести себя совершенно по-разному при разных настройках.
  • Конфигурация влияет на производительность, стоимость и безопасность.
  • Цель — предсказуемое поведение в среде разработки и в продакшене.

Один код, разные настройки

Бессерверные приложения с AWS Lambda

Код и конфигурация

Пакет кода

  • Пакет кода
  • Логика обработчика и зависимости.
  • Изменения требуют повторного развёртывания.

Конфигурация функции

  • Конфигурация функции
  • Память, тайм-аут, переменные окружения.
  • Роль выполнения и слои.
Бессерверные приложения с AWS Lambda

Параметры управления

  • Среда выполнения и обработчик: какой код запускает Lambda.
  • Память и тайм-аут: производительность, стоимость, безопасность.
  • Переменные окружения: настройка без хардкодинга.
  • Роль выполнения: разрешения для AWS API.
  • Слои: общие зависимости для нескольких функций.

Параметры конфигурации Lambda

Бессерверные приложения с AWS Lambda

Среда выполнения и обработчик

  • Среда выполнения = языковое окружение (например, Python).
  • Обработчик = точка входа, которую вызывает Lambda.
  • Формат обработчика: file.function.
  • Пример: lambda_function.lambda_handler.

Структура строки обработчика

Бессерверные приложения с AWS Lambda

Строка обработчика: типичные ошибки

# lambda_function.py
def lambda_handler(event, context):
    return {"statusCode": 200}

Импорт и вызов обработчика

Бессерверные приложения с AWS Lambda

Роль выполнения (IAM)

  • IAM = Identity and Access Management (управление правами доступа).
  • Роль выполнения определяет, что разрешено делать функции.
  • Она контролирует, какие AWS API может вызывать ваш код.

Роль выполнения как пропуск

Бессерверные приложения с AWS Lambda

Что такое слой Lambda?

  • Слой — это ZIP-архив, подключаемый к функции.
  • Lambda делает файлы слоя доступными во время выполнения в каталоге /opt.
  • Используйте слои для общих библиотек и утилит.
  • Обновите слой один раз — и несколько функций смогут его использовать.

Слой подключён в /opt

Бессерверные приложения с AWS Lambda

Где слои доступны во время выполнения

  • Код функции монтируется в /var/task.
  • Подключённые слои монтируются в /opt.
  • Lambda также предоставляет временную папку /tmp.

Каталоги среды выполнения: /var/task, /opt, /tmp

Бессерверные приложения с AWS Lambda

Память влияет и на CPU

  • Больше памяти → больше CPU.
  • Это сокращает время выполнения задач, интенсивно использующих CPU.
  • Итоговая стоимость зависит от длительности и объёма памяти.

Память увеличивает CPU

Бессерверные приложения с AWS Lambda

Настройка памяти на основе измерений

  • Начните с разумного значения по умолчанию (например, 256 МБ).
  • Тестируйте на реальных событиях.
  • Сравните длительность и стоимость при разных объёмах памяти.

Перебор памяти: измерение длительности и стоимости

Бессерверные приложения с AWS Lambda

Тайм-аут и безопасное выполнение

  • Тайм-аут останавливает зависшие выполнения.
  • Проверяйте оставшееся время перед длительными операциями.
  • Завершайте работу быстро и повторяйте попытку там, где это уместно.

Тайм-аут как защитный таймер

Бессерверные приложения с AWS Lambda

Разбор примера: проверка оставшегося времени

def lambda_handler(event, context):
    time_left = context.get_remaining_time_in_millis()
    if time_left < 500:
        raise TimeoutError("Not enough time left")
    return {"statusCode": 200}

Защита по таймеру контекста

Бессерверные приложения с AWS Lambda

Переменные окружения

  • Не вносите конфигурацию в код.
  • Разделяйте настройки для dev/test/prod.
  • Используйте Secrets Manager для конфиденциальных данных.

Переменные окружения управляют поведением

Бессерверные приложения с AWS Lambda

Разбор примера: чтение переменных окружения

import os

STAGE = os.getenv("STAGE", "dev")
LOG_LEVEL = os.getenv(
    "LOG_LEVEL", "INFO"
)

Значения по умолчанию делают локальные тесты безопаснее

  • Импортируйте os для доступа к переменным окружения.
  • os.getenv возвращает значение или значение по умолчанию.
Бессерверные приложения с AWS Lambda

Типичные ошибки конфигурации

  • Хардкодинг значений среды прямо в коде.
  • Слишком маленький тайм-аут или отсутствующие разрешения IAM.
  • Секреты в обычных переменных окружения.

Типичные ошибки и правила

Бессерверные приложения с AWS Lambda

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

Бессерверные приложения с AWS Lambda

Preparing Video For Download...