Lambda: Env Vars, Monitoring, Config Flashcards
При помощи env vars можно …
изменить поведение Лямбда функции БЕЗ изменений в коде
Lambda Service имеет некоторые стандартные
System Environment Variables
Как использовать секреты в коде Лямбды?
В переменных окружения можно хранить секреты (зашифрованные KMS)
- Ключ для шифрования секретов можно выбрать
- Lambda Service Key
- Customer Master Key
(CMK)
Как можно отлаживать Лямбда функцию? Что для этого нужно?
Лямбда пишет логи своего выполнения в CloudWatch.
Благодаря IAM Role AWSLambda Basic ExecutionRole
(позволяет upload’ить логи в CloudWatch).
Эта роль по-умолчанию прикреплена к любой новой Лямбде.
Какие метрики можно отслеживать у Лямбды в CloudWatch?
- Invocations, Durations, Concurrent Executions
- Errors amount
- Iterator Age для Kinesis & DynamoDB Streams (на сколько курсор отстаёт)
Что нужно сделать, чтобы отслеживать Лямбду в X-Ray?
- В настройках Лямбды нужно включить Active Tracing.
-
X-Ray Демон
будет работать “из коробки”, ничего делать НЕ надо -
X-Ray SDK
должна быть использована в коде, нужно немного изменить код Лямбды -
IAM Role
для записи в X-Ray должна быть прикреплена к Лямбде
(managed RoleAWSXRayDaemonWriteAccess
)
В Лямбда коде можно использовать переменные окружения с информацией об X-Ray. Какие?
AWS_XRAY_DAEMON_ADDRESS содержит IP_ADDRESS:PORT демона
VPC по-умолчанию - что это значит в Лямбда?
По-умолчанию Лямбда запускается ВНЕ нашей VPC.
AWS имеет собственную VPC для запуска Лямбд.
Поэтому Лямбда НЕ имеет доступа к ресурсам,
которые находятся внутри нашей VPC.
Например, RDS, ElastiCache, internal ELB, internal EC2.
Что нужно указать, чтобы задеплоить Лямбду в свою VPC?
Можно задеплоить Lambda функцию в своей VPC, указав
- VPC ID
- Subnets
- Security Groups
Как Лямбда в нашей VPC свяжется с RDS в нашей VPC?
Что для этого нужно?
Лямбда создаст ENI (Elastic Network Interface) в подсети.
- Чтобы Лямбда смогла создать ENI, Лямбде нужно дать AWSLambda VPCAccess ExecutionRole
- Security Группа RDS должна разрешать (Allow) запросы от Security Группы Лямбды.
Как Лямбда в нашей VPC свяжется с public internet? Что на счёт public / private subnet? Что для этого нужно?
- Лямбда функция в своей VPC НЕ имеет доступ в интернет (по-умолчанию).
- Лямбда функция НЕ имеет доступ в интернет, даже если находится в
public
подсети.
Чтобы дать Лямбде (находящейся в кастомной VPC) доступ в интернет, то нужно создать NAT Gateway / Instance.
NAT Девайс выведет запрос в интернет через IGW.
- Чтобы Лямбда смогла создать ENI, Лямбде нужно дать AWSLambda VPCAccess ExecutionRole
Как EC2 instance в нашей VPC свяжется с public internet? Что на счёт public / private subnet?
Если в public подсети находится EC2 instance,
то он (в отличие от Лямбды) сразу по-умолчанию имеет доступ в интернет.
Как Лямбда в нашей VPC свяжется с DynamoDB в нашей VPC? Что для этого нужно? В чём разница между способами?
Есть 2 способа дать Лямбде (находящейся в кастомной VPC) доступ к DynamoDB.
- Lambda в приватной подсети → NAT Девайс
→ IGW
→ DynamoDB
- Lambda в приватной подсети → VPC Endpoint
→ DynamoDB
- Чтобы Лямбда смогла создать ENI, Лямбде нужно дать AWSLambda VPCAccess ExecutionRole
Разница в том, что использовать VPC Endpoint нужно, если к DynamoDB необходимо подключаться по ПРИВАТНОЙ сети.
Как Лямбда в нашей VPC свяжется с CloudWatch? Что для этого нужно?
Если Лямбда функция развёрнута в приватной подсети кастомной VPC,
то доступ к CloudWatch Logs
она имеет В ЛЮБОМ СЛУЧАЕ.
Даже если НЕ настроены NAT Девайсы или VPC Endpoint’ы.
CloudWatch для Лямбды доступен ВСЕГДА.
Если конечно у Лямбды есть IAM Role AWSLambda Basic ExecutionRole.
Какие настройки конфигурации есть у Лямбда?
RAM, vCPU, Timeout, Max Concurrent Executions
Каковы лимиты по RAM для Лямбды?
128 MB - 10 GB (шагами по 1 MB)
Как увеличивать vCPU для Лямбды?
Какова одна единица vCPU и зачем это знать?
vCPU увеличивается соразмерно RAM’у (напрямую CPU указать нельзя)
1_792 MB - это одна единица vCPU
После превышения этого уровня необходимо использовать много-поточный код, чтобы получать преимущества
Если приложение является CPU-bound (делает много вычислений), …
то нужно увеличивать RAM
Что такое vCPU?
vCPU (Virtual Central Processing Unit) - единица измерения вычислительной мощности.
Каковы лимиты по timeout для Лямбда
Что если Лямбда превысила лимит по timeout? Что делать, если Лямбда постоянно превышает timeout?
- По-умолчанию timeout
3 sec
- Максимально можно выбрать timeout
900 sec
(15 минут)
Время выполнения > timeout ⇒ timeout error
Если операция требует более 15-ти минут, то Лямбда НЕ подходит.
Лучше выбрать Fargate, ECS, EC2.