Розуміння моделі виконання Lambda

Безсерверні застосунки з AWS Lambda

Claudio Canales

Senior DevOps Engineer

Автоматичне виконання

Кероване подіями AWS

  • Lambda запускає код, коли стається подія.
  • Приклад: S3 upload -> зміна розміру зображення.
  • Різні тригери, одна схема.
Безсерверні застосунки з AWS Lambda

Очікує до спрацювання тригера

Очікування -> подія -> запуск -> зупинка

  • Очікування: нічого не виконується.
  • Подія: запускається обробник, потім зупинка.

Аналогія з датчиком руху для Lambda

  • Як світло з датчиком руху: чекає до тригера.
  • Тригер перемикає «off» на «on».
Безсерверні застосунки з AWS Lambda

Що таке AWS Lambda?

AWS Lambda одним поглядом

  • Обчислювальний сервіс, керований подіями.
  • Масштабується автоматично за попитом.
  • Платите лише за час виконання.
Безсерверні застосунки з AWS Lambda

Як Lambda виконує ваш код

Потік виконання Lambda

  • Джерело подій тригерить Lambda.
  • Lambda передає подію вашому обробнику.
  • Ваш обробник повертає результат.
Безсерверні застосунки з AWS Lambda

Масштабування за попитом

Масштабування створює більше середовищ

  • Більше подій: більше паралельних викликів.
  • Lambda піднімає додаткові середовища.
  • У нових середовищах можливі cold start.
Безсерверні застосунки з AWS Lambda

Функція-обробник

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: вхідний payload (JSON).
  • context: метадані середовища виконання.
  • return: вихідні дані (або успіх/помилка).

Обробник отримує event і context

Безсерверні застосунки з AWS Lambda

Об'єкт події

Payload події об'єктного сховища

Подія S3: bucket + object key.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Завдання те саме: дістаньте потрібне.

Payload події HTTP-запиту

Подія API: метод, шлях, тіло.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Різні тригери — різний JSON.
Безсерверні застосунки з AWS Lambda

Об'єкт context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Час до тайм-ауту.
  • aws_request_id Ідентифікатор запиту для трасування в логах.
Безсерверні застосунки з AWS Lambda

Безстанове виконання

Повторне використання warm start vs скидання

  • Кожен виклик незалежний.
  • Повторне використання можливе, не гарантоване.
  • Зберігайте стан поза Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Безсерверні застосунки з AWS Lambda

Cold start

Шкала часу cold start

  • Нове середовище виконання.
  • Завантаження коду та залежностей.
  • Ініціалізація, потім обробник.
Безсерверні застосунки з AWS Lambda

Warm start

Шкала часу warm start

  • Повторне використання наявного середовища.
  • Більшість ініціалізації пропускається.
  • Обробник стартує швидше.
Безсерверні застосунки з AWS Lambda

Init, invoke, freeze

Життєвий цикл середовища виконання

  • Init виконується раз на середовище.
  • Handler виконується на кожен виклик.
  • Між викликами середовище може «замерзати».
Безсерверні застосунки з AWS Lambda

Оптимізація для cold start

# init (once per env)
import boto3
s3 = boto3.client('s3')
# handler (every invocation)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init один раз vs handler на кожен виклик

  • Розміщуйте імпорти та клієнти SDK поза обробником.
Безсерверні застосунки з AWS Lambda

Давайте потренуємось!

Безсерверні застосунки з AWS Lambda

Preparing Video For Download...