[AWS] Lambda: 서버리스 함수, 트리거, 동시성
AWS Lambda, serverless function, Lambda invocation, concurrency, provisioned concurrency, Lambda layers
정의
AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0.
사용 상황
| 상황 | Lambda 적합성 |
|---|---|
| REST API (API Gateway + Lambda) | 적합, 짧은 처리 |
| S3 업로드 후 이미지 리사이즈 | 적합, 이벤트 처리 |
| DynamoDB Streams 변경 감지 | 적합, poll 처리 |
| SQS 메시지 소비 | 적합, 자동 스케일 |
| 웹소켓 상시 연결 유지 | 부적합, ECS 권장 |
| 15분 초과 ML 추론 | 부적합, ECS/Batch 권장 |
| GPU 워크로드 | 부적합, EC2 권장 |
트리거 종류
flowchart LR
HTTP["API Gateway / ALB"] --> L[Lambda]
SQS --> L
SNS --> L
Kinesis --> L
DDB["DynamoDB Streams"] --> L
S3["S3 events"] --> L
EB[EventBridge] --> L
CW["CloudWatch Events"] --> L
Cognito --> L
| 트리거 | 모델 |
|---|---|
| API Gateway / ALB | sync |
| SQS | async poll |
| Kinesis / DynamoDB Streams | poll + ordered |
| S3 / SNS / EventBridge | event |
| Cron | EventBridge Scheduler |
함수 작성
// Node.js
export const handler = async (event, context) => {
console.log('event', event);
return {
statusCode: 200,
body: JSON.stringify({ message: 'hello' }),
};
};
# Python
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps({'message': 'hello'})
}
실행 모델
| 모드 | 의미 |
|---|---|
| Request-Response (sync) | 호출자가 응답 대기 |
| Async | invoke 후 즉시 반환, 재시도 자동 |
| Stream (Kinesis) | batch 처리 |
Concurrency
flowchart LR
Req["1000 동시 요청"] --> L[Lambda]
L --> I1["Instance 1"]
L --> I2["Instance 2"]
L --> IN["Instance N"]
Note["account quota: 1000 기본"]
| 종류 | 의미 |
|---|---|
| Unreserved (기본) | account 공통 풀 |
| Reserved concurrency | 함수에 한도 / 보장 분리 |
| Provisioned concurrency | 미리 워밍업 + 콜드 스타트 0 |
Cold Start
sequenceDiagram
participant Trigger
participant Lambda
Trigger->>Lambda: invoke
Note over Lambda: container 없음
Lambda->>Lambda: init 50-1000ms
Lambda->>Lambda: handler 실행
Lambda-->>Trigger: 응답
Note over Lambda: 5분 idle 후 종료
| Runtime | 평균 cold start |
|---|---|
| Node 22 | ~150ms |
| Python 3.13 | ~200ms |
| Go | ~50ms |
| Rust | ~30ms |
| Java | 500ms-2s |
| Java + SnapStart | ~150ms |
Cold Start 완화
- Provisioned Concurrency: 항상 N개 워밍업.
- Lambda SnapStart (Java): snapshot 으로 빠르게.
- smaller package (코드 / dependency).
- avoid VPC (옛 cold start 5초+, 현재는 빠름).
- 함수 분리 (큰 모놀리스 함수 회피).
Memory & CPU
Memory 늘리면 CPU 도 비례 증가. 성능 결정의 단일 dial.
| Memory | vCPU |
|---|---|
| 128 MB | 0.083 |
| 1024 MB | 0.6 |
| 1769 MB | 1.0 (full vCPU) |
| 10240 MB | 5.78 |
가격
요금 = (실행 시간 ms) x (Memory GB) x $0.0000166667
+ (실행 횟수) x $0.20/M
짧고 자주 호출되면 호출 비용, 긴 실행 이면 시간 비용. 모니터링 필요.
Layers (공유 코드)
Layers:
- arn:aws:lambda:us-east-1:123456789012:layer:common-deps:5
- 여러 함수가 공유.
- 의존성 분리 → 함수 코드 작아짐.
- 5 layer per function 한도.
Lambda URLs
API Gateway 없이 Lambda 에 직접 HTTPS endpoint 부여.
# Lambda URL 생성
aws lambda create-function-url-config \
--function-name my-function \
--auth-type NONE
# 반환: https://<id>.lambda-url.<region>.on.aws/
| 항목 | 내용 |
|---|---|
| Auth | NONE (공개) 또는 AWS_IAM |
| 비용 | API Gateway 보다 저렴 |
| 기능 | 단순 HTTP 만 지원 |
| 적합 | 웹훅, 간단한 API |
| 부적합 | 복잡한 라우팅, 인증 미들웨어 |
Lambda @ Edge / CloudFront Functions
CloudFront 엣지 로케이션에서 실행 하는 Lambda.
| Lambda @ Edge | CloudFront Functions | |
|---|---|---|
| 실행 위치 | Regional edge | 450+ POP |
| 런타임 | Node.js, Python | JS (제한) |
| 실행 시간 | 최대 30초 | 1ms |
| 메모리 | 최대 10GB | 2MB |
| 용도 | 인증, 변환 | 단순 리다이렉트 |
// Lambda @ Edge: 요청 헤더에 인증 토큰 확인
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
const token = request.headers['authorization']?.[0]?.value;
if (!token || !isValid(token)) {
return { status: '401', body: 'Unauthorized' };
}
return request;
};
Lambda Extensions
Lambda lifecycle 에 훅 해서 실행되는 사이드카.
Extension Layer
├── Init Phase: extension 초기화
├── Invoke Phase: 함수와 병렬 실행
└── Shutdown Phase: 종료 전 처리 (flush logs 등)
| 용도 | 예시 |
|---|---|
| 로그 수집 | Datadog, New Relic agent |
| 시크릿 캐시 | Secrets Manager 사전 fetch |
| 코드 검사 | RASP (보안 에이전트) |
Lambda Powertools
AWS 공식 생산성 라이브러리 (Node.js / Python / Java).
import { Logger } from '@aws-lambda-powertools/logger';
import { Tracer } from '@aws-lambda-powertools/tracer';
import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
const logger = new Logger({ serviceName: 'order-api' });
const tracer = new Tracer({ serviceName: 'order-api' });
const metrics = new Metrics({ namespace: 'MyApp' });
export const handler = async (event: APIGatewayEvent) => {
logger.info('Processing order', { orderId: event.pathParameters?.id });
metrics.addMetric('OrderProcessed', MetricUnit.Count, 1);
// ...
};
| 기능 | 역할 |
|---|---|
| Logger | 구조화 JSON 로깅, correlation ID |
| Tracer | X-Ray 자동 계측 |
| Metrics | EMF 기반 커스텀 메트릭 |
| Idempotency | 중복 실행 방지 |
| Parameters | SSM / Secrets Manager 캐시 |
Lambda 의 적합 / 부적합
| 적합 | 부적합 |
|---|---|
| 짧은 처리 (< 15분) | 장시간 처리 (> 15분) |
| 비동기 이벤트 처리 | 지속 연결 (WebSocket idle) |
| API endpoint | 극저지연 (cold start 부담) |
| ETL batch | 큰 메모리 (10GB 초과) |
| 스케일 spike 흡수 | GPU 워크로드 |
흔한 함정
WARNING
- VPC 안 Lambda 의 cold start = ENI 생성 지연. 현재는 빠르지만 옛 경험 주의.
- handler 안에 DB 연결 = cold start 마다 새 연결. handler 밖 전역 으로 warm reuse.
- timeout 너무 짧음 = 무거운 처리 fail. 모니터링 + 늘림.
- 동시성 한도 = account 한도 1000 기본. 갑작스런 spike 시 throttling.
- Lambda URL + NONE auth = 공개 endpoint. WAF 연결 또는 IAM 인증 필요.
- 임시 파일
/tmp한도 = 512MB 기본 (최대 10GB). 큰 파일 처리 시 S3 사용.
관련 위키
이 글의 용어 (6개)
- [AWS] API Gateway: REST/HTTP/WebSocket API 관리cloud
- 정의 AWS API Gateway 는 REST / HTTP / WebSocket API 를 관리하는 완전관리형 서비스. 인증, 스로틀링, 캐싱, 요청/응답 변환, 로깅을 단일 서…
- [AWS] EC2: 인스턴스 타입, AMI, EBScloud
- 정의 EC2 (Elastic Compute Cloud) = AWS 의 VM 서비스. instance type (CPU / RAM / NW) 결정 + AMI (OS 이미지) + E…
- [AWS] EventBridge: 이벤트 버스, 스케줄러, partner sourcescloud
- 정의 EventBridge = AWS 의 통합 event bus. 옛 CloudWatch Events 의 후계. AWS service 이벤트 + custom 이벤트 + SaaS …
- [AWS] Lambda Cold Start: 원인과 완화cloud
- 정의 Cold Start = Lambda 가 처음 호출 또는 idle 후 다시 호출 시 컨테이너 + 런타임 + 사용자 코드 init 에 소요되는 지연 시간. 사용 상황 (cold…
- [AWS] SQS: managed queue, FIFO, DLQcloud
- 정의 SQS (Simple Queue Service) = AWS 의 완전 관리형 메시지 큐. infinite scale, no provisioning, pay-per-reques…
- [AWS] Step Functions: 워크플로 오케스트레이션cloud
- 정의 Step Functions = 서버리스 워크플로 오케스트레이션. Amazon States Language (ASL, JSON) 으로 상태 기계 정의. 각 단계의 재시도, 에…
이 개념을 다룬 위키 페이지 (21)
- wiki[AWS] API Gateway: REST/HTTP/WebSocket API 관리
- wiki[AWS CAF] Platform Perspective
- wiki[AWS] CDK (Cloud Development Kit)
- wiki[AWS] CloudFront: CDN, origin, behavior, signed URL
- wiki[AWS] CloudTrail (API Activity Logging)
- wiki[AWS] CloudWatch: 메트릭, 로그, 알람
- wiki[AWS] Config (Resource Configuration Tracking)
- wiki[AWS] ECR (Elastic Container Registry)
- wiki[AWS] EventBridge: 이벤트 버스, 스케줄러, partner sources
- wiki[AWS] Amazon GuardDuty
- wiki[AWS] Amazon Inspector
- wiki[AWS] Lambda Cold Start: 원인과 완화
- wiki[AWS] Amazon RDS (Relational Database Service)
- wiki[AWS] S3: object storage, storage classes, lifecycle
- wiki[AWS] Secrets Manager + Parameter Store
- wiki[AWS] SNS: pub-sub 알림, fan-out 패턴
- wiki[AWS] SQS: managed queue, FIFO, DLQ
- wiki[AWS] Step Functions: 워크플로 오케스트레이션
- wiki[IaC] AWS CDK: TypeScript 로 CloudFormation 생성
- wiki[DB] DynamoDB: PK + SK, single-table design, GSI / LSI
- wiki[FastAPI] Async / Sync Endpoints
💬 댓글