Модуль 1.8: AWS Lambda та безсерверні патерни
Складність: [MEDIUM]
Розділ «Складність: [MEDIUM]»Час на виконання: 2 години
Розділ «Час на виконання: 2 години»Передумови
Розділ «Передумови»Перед початком цього модуля ви повинні завершити:
- Модуль 1.1: Основи IAM та безпеки
- Модуль 1.4: Основи S3 та сховищ
- Базові знання Python або Node.js (приклади будуть на Python)
- AWS CLI налаштований з відповідними дозволами
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У 2019 році компанія з надання послуг таксі обробляла дані телеметрії GPS від 50 000 водіїв. Кожної секунди телефон кожного водія надсилав оновлення локації. Це 50 000 подій на секунду з величезними сплесками в години пік та майже нульовим трафіком о 3 годині ночі. Вони запускали це на флоті з 200 екземплярів EC2, які масштабувалися від 80 до 200 залежно від навантаження. Проблема: масштабування завжди відставало на 3-4 хвилини від реального трафіку. Починалася година пік, запити накопичувалися в чергах, і дані про локацію ставали застарілими. У періоди затишшя вони платили за 80 серверів, що майже нічого не робили.
Вони замінили рівень прийому даних на функції Lambda, що тригерилися через Amazon Kinesis. Під час години пік AWS автоматично запускав тисячі екземплярів Lambda одночасно. О 3 годині ночі витрати були нульовими. Масштабування стало миттєвим. Рахунок за інфраструктуру впав на 62%, тому що вони перестали платити за простій.
AWS Lambda — це оригінальна безсерверна (serverless) платформа. Випущена у 2014 році, вона втілила ідею: ви пишете код, а хмарний провайдер бере на себе все інше — підготовку серверів, масштабування, патчі та високу доступність. Ви платите тільки за мілісекунди, протягом яких ваш код реально працює. У цьому модулі ви дізнаєтеся, як працює Lambda, які джерела подій її запускають, як боротися з “холодними стартами” (cold starts) та як будувати реальні пайплайни обробки даних.
Як працює Lambda
Розділ «Як працює Lambda»Модель виконання Lambda фундаментально відрізняється від контейнерів чи віртуальних машин.
Життєвий цикл середовища виконання
Розділ «Життєвий цикл середовища виконання»- INIT Phase (Cold Start): AWS завантажує ваш код, запускає рантайм (Python, Node.js тощо) та виконує код поза межами функції-обробника (handler). Це займає від 100 мс до кількох секунд.
- INVOKE Phase: Виконується безпосередньо ваша функція
handler. Ви платите за цей час. - WARM State: Після завершення роботи AWS зберігає середовище “теплим” протягом 5-15 хвилин. Наступний запит пропустить фазу INIT і виконається миттєво.
Критичне правило: Код поза межами функції handler виконується один раз при “холодному старті” і перевикористовується при наступних викликах. Саме тут слід ініціалізувати підключення до баз даних та завантажувати важкі бібліотеки.
import boto3import os
# INIT CODE - виконується один раз при холодному старті# Клієнт буде перевикористаний між викликамиs3 = boto3.client('s3')
def handler(event, context): # HANDLER CODE - виконується при кожному виклику # ... логіка роботи з S3 ... return {"status": "ok"}Джерела подій (Triggers)
Розділ «Джерела подій (Triggers)»Lambda не працює сама по собі. Її запускають події від інших сервісів.
Основні патерни виклику:
Розділ «Основні патерни виклику:»- Синхронний (Synchronous): Викликач чекає відповіді від Lambda. Наприклад: API Gateway -> Lambda.
- Асинхронний (Asynchronous): Викликач просто кидає подію і забуває. Lambda обробляє її в черзі з вбудованою логікою повторів (2 спроби). Наприклад: S3 -> Lambda (при завантаженні файлу).
- На основі потоків/черг (Polling): Lambda сама опитує джерело (SQS, Kinesis) і обробляє записи пачками (batches).
Обмеження Lambda
Розділ «Обмеження Lambda»| Обмеження | Значення |
|---|---|
| Макс. час виконання | 15 хвилин |
| Пам’ять | 128 МБ - 10 ГБ |
| vCPU | Пропорційно пам’яті (1.7 ГБ = 1 full vCPU) |
| Тимчасове сховище (/tmp) | 512 МБ - 10 ГБ |
| Кількість одночасних запусків | 1,000 (дефолт на регіон) |
Lambda Layers
Розділ «Lambda Layers»Шари (Layers) дозволяють винести спільні залежності (бібліотеки, кастомні бінарні файли) в окремий пакет. Це зменшує розмір самої функції і дозволяє перевикористовувати код між багатьма Lambda.
Step Functions: Оркестрація воркфлоу
Розділ «Step Functions: Оркестрація воркфлоу»Коли однієї Lambda замало, AWS Step Functions дозволяє з’єднувати багато функцій у ланцюжки (state machines) з логікою розгалуження, повторів та обробки помилок.
Чому Step Functions краще за виклик однієї Lambda з іншої?
- Ви не платите за очікування (одна Lambda чекає, поки інша закінчить роботу).
- Візуальний моніторинг кожного кроку.
- Вбудована логіка ретраїв без написання коду.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Ініціалізація клієнтів всередині handler | Код виглядає звичним для веб-розробників | Винесіть створення DB connections та SDK клієнтів за межі handler |
| Використання Lambda для довгих процесів | Здається простішим за ECS | Якщо процес триває більше 5-10 хв, використовуйте ECS Fargate |
| Рекурсивні виклики | Lambda пише в S3, що тригерить ту саму Lambda | Використовуйте різні бакети або фільтри за префіксами/суфіксами |
| Занадто мало пам’яті для CPU задач | Спроба економії | Для обробки відео/зображень виділяйте 1-2 ГБ пам’яті, щоб отримати більше CPU |
Тест
Розділ «Тест»1. Що таке "холодний старт" (cold start) у Lambda?
Це затримка при першому виклику функції (або після тривалої паузи), коли AWS потрібно підготувати нове середовище виконання: завантажити код та запустити рантайм. Подальші виклики використовують вже підготовлене середовище і працюють набагато швидше.
2. Як Lambda масштабується під великим навантаженням?
Lambda масштабується горизонтально. Кожен новий вхідний запит (або батч запитів) запускає новий незалежний екземпляр функції. AWS автоматично керує кількістю цих екземплярів, обмежуючи їх лише загальним лімітом конкурентності на акаунт (concurrency limit).
Практична вправа: Генератор мініатюр (thumbnails) через S3
Розділ «Практична вправа: Генератор мініатюр (thumbnails) через S3»У цій вправі ви створите пайплайн: при завантаженні картинки в один бакет S3, Lambda автоматично створить її мініатюру і покладе в інший бакет.
# 1. Створення функції (приклад створення через CLI)aws lambda create-function \ --function-name thumbnail-generator \ --runtime python3.12 \ --role arn:aws:iam::ACCOUNT_ID:role/lambda-s3-role \ --handler lambda_function.handler \ --zip-file fileb://function.zip
# 2. Надання дозволу S3 викликати Lambdaaws lambda add-permission \ --function-name thumbnail-generator \ --principal s3.amazonaws.com \ --statement-id s3-trigger \ --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::upload-bucket
# 3. Налаштування тригера в S3aws s3api put-bucket-notification-configuration \ --bucket upload-bucket \ --notification-configuration file://s3-config.jsonНаступний модуль
Розділ «Наступний модуль»Далі: Модуль 1.9: Secrets Manager — навчіться безпечно зберігати паролі до баз даних та API-ключі з автоматичною ротацією.