[AWS] Lambda Cold Start: 원인과 완화
Lambda cold start, warm start, Provisioned Concurrency, SnapStart, Lambda init
정의
Cold Start = Lambda 가 처음 호출 또는 idle 후 다시 호출 시 컨테이너 + 런타임 + 사용자 코드 init 의 시간.
단계
flowchart TB
Inv[Invocation] --> Box{Warm container?}
Box -->|Yes| Handle[handler 실행<br/>~ms]
Box -->|No| Cold[Cold Start]
Cold --> S1[1. Firecracker microVM 생성]
Cold --> S2[2. Runtime 부팅]
Cold --> S3[3. 사용자 코드 download/extract]
Cold --> S4[4. Init handler 실행]
S4 --> Handle
| 단계 | 시간 (Node) |
|---|---|
| MicroVM 생성 | ~50ms |
| Runtime 부팅 | ~50ms |
| 코드 load | ~50ms (의존성 크기 비례) |
| Init code | 사용자 책임 |
Runtime 별 cold start (직관)
Runtime 별 Cold Start (ms, p99 직관)
Java 가 가장 느리지만 SnapStart 로 크게 개선. Rust/Go 가 가장 빠름.
완화 4 단계
1. Provisioned Concurrency
aws lambda put-provisioned-concurrency-config \
--function-name my-func \
--qualifier prod \
--provisioned-concurrent-executions 10
- 10 instance 미리 워밍.
- 콜드 스타트 0.
- 비용: idle 도 청구.
TIP
latency 예측 가능 필요 한 API 만. batch / async 는 불필요.
2. Lambda SnapStart (Java)
flowchart LR
Build["배포 시<br/>handler init 실행 → snapshot"] -.-> Inv["호출 시<br/>snapshot 복원 → handler 즉시 실행"]
- Java cold start 1500ms → 150ms.
- snapshot 안에 DB 연결 같은 unique value 주의 (uniqueness 깨짐).
3. 코드 최적화
// ❌ handler 안에서
export const handler = async (event) => {
const db = new DBClient(); // 매 호출 새 연결!
...
};
// ✅ handler 밖 (init 시 1회)
const db = new DBClient();
export const handler = async (event) => {
...
};
4. Bundle 크기 줄이기
| 도구 | 효과 |
|---|---|
| esbuild | tree-shake + minify |
| webpack | 동일 |
| Layer 분리 | 큰 의존성을 layer 로 |
| Lambda Container Image | tag 단위 캐싱 |
Warm 유지 (anti-pattern)
# CloudWatch Events 로 5분마다 ping
schedule: rate(5 minutes)
target: lambda function
CAUTION
옛 워크어라운드. 현재는 Provisioned Concurrency 가 정통. ping 방식은 불안정 + 동시 N 인스턴스 보장 안 됨.
측정
import time
import os
print(f"INIT, container: {os.environ.get('AWS_LAMBDA_LOG_STREAM_NAME')}, t={time.time()}")
def handler(event, context):
print(f"HANDLER, t={time.time()}")
CloudWatch Logs 에서 INIT vs HANDLER 의 시간 차 = cold start.
VPC Lambda 의 cold start (옛 vs 현재)
| 시점 | Cold Start (VPC) |
|---|---|
| ~2019 | 5-15초 (ENI 생성) |
| 2019+ (Hyperplane) | ~1초 추가 |
| 2026 (Firecracker + warm pool) | 거의 일반과 동일 |
관련 위키
이 글의 용어 (3개)
- [AWS] API Gateway: REST/HTTP API 관리cloud
- 정의 AWS API Gateway 는 REST/HTTP/WebSocket API 를 관리하는 완전관리형 서비스. 백엔드 통합, 인증, 스로틀링, 캐싱, 로깅 제공. 두 종류 RE…
- [AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
- 정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 트리거 종류 | 트리거 | 모델 | |---|---| |…
- [AWS] VPC: subnet, route, NAT, peeringcloud
- 정의 VPC (Virtual Private Cloud) = AWS 안의 논리적 격리 네트워크. CIDR 정의 + subnet 분할 + 라우팅. 구조 Subnet 종류 | 종류 |…
💬 댓글