본문으로 건너뛰기
김신건의 로그

[AWS] Lambda Cold Start: 원인과 완화

· 수정 · 📖 약 1분 · 286자/단어 #aws #lambda #cold-start #performance #serverless
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 크기 줄이기

도구효과
esbuildtree-shake + minify
webpack동일
Layer 분리큰 의존성을 layer 로
Lambda Container Imagetag 단위 캐싱

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)
~20195-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 종류 | 종류 |…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기