Lambda 비용 최적화: 메모리 설정부터 ARM 전환까지
AWS Lambda 비용을 효과적으로 절감하는 메모리 최적화, ARM 전환, Power Tuning 활용법을 알아봅니다.
관련 시험 도메인
- Domain 4: Design Cost-Optimized Architectures
핵심 요약 (BLUF)
Lambda 비용은 "메모리 × 실행 시간"으로 결정됩니다. 메모리를 무조건 낮추는 것이 아니라, 최적의 메모리-성능 균형점을 찾는 것이 핵심입니다. Power Tuning 도구로 최적 메모리를 찾고, ARM(Graviton2)으로 전환하면 20% 추가 절감이 가능합니다.
시험 팁
시험 핵심: "Lambda 메모리 증가 → CPU도 비례 증가 → 실행 시간 단축 → 총 비용 동일 또는 감소 가능"
Lambda 과금 구조 이해하기
Lambda 비용은 3가지 요소로 구성됩니다:
| 항목 | 과금 기준 | 프리 티어 |
|---|---|---|
| 요청 수 | $0.20/백만 건 | 100만 건/월 |
| 컴퓨팅 시간 | $0.0000166667/GB-초 | 40만 GB-초/월 |
| Provisioned Concurrency | $0.0000041667/GB-초 | - |
비용 계산 공식
Lambda 비용 = 요청 요금 + 컴퓨팅 요금
컴퓨팅 요금 = 메모리(GB) × 실행 시간(초) × 단가
예시: 256MB 메모리, 200ms 실행, 월 100만 건
- 요청: 100만 × $0.0000002 = $0.20
- 컴퓨팅: 0.25GB × 0.2초 × 100만 × $0.0000166667 = $0.83
- 합계: $1.03/월
시험 팁
1ms 단위 과금: 이전 100ms 단위에서 1ms 단위로 변경되어, 짧은 함수의 비용이 크게 절감됩니다.
메모리와 CPU의 관계
Lambda에서 메모리를 늘리면 CPU 성능도 비례하여 증가합니다.
메모리 ↑ = CPU ↑ = 네트워크 대역폭 ↑
128MB → 최소 CPU
256MB → 2배 CPU
512MB → 4배 CPU
1024MB → 8배 CPU (약 0.5 vCPU)
1769MB → 1 vCPU
10240MB → 6 vCPU
메모리를 낮추는 것이 항상 절감은 아닙니다
예시: 데이터 처리 Lambda 함수
128MB (최소 메모리):
- 실행 시간: 2000ms
- 비용: 0.128 × 2.0 × $0.0000166667 = $0.00000427
512MB:
- 실행 시간: 500ms (4배 빠름)
- 비용: 0.512 × 0.5 × $0.0000166667 = $0.00000427
→ 비용은 동일하지만, 512MB가 4배 빠른 응답!
시험 팁
핵심 원리: CPU 바운드 작업은 메모리를 늘려도 총 비용이 비슷하거나 오히려 줄어들 수 있습니다. I/O 바운드 작업은 메모리를 낮추는 것이 유리합니다.
최적화 전략 1: Power Tuning
AWS Lambda Power Tuning은 다양한 메모리 설정에서 함수를 자동으로 테스트하여 최적의 비용-성능 균형점을 찾아주는 오픈소스 도구입니다.
작동 방식
Step Functions으로 실행:
┌──────────────────────────────────────────────┐
│ 128MB → 측정 │
│ 256MB → 측정 │
│ 512MB → 측정 → 최적값 리포트 │
│ 1024MB → 측정 (비용 vs 속도) │
│ 2048MB → 측정 │
│ 3008MB → 측정 │
└──────────────────────────────────────────────┘
결과 해석
메모리 실행시간 비용
128MB 2000ms $0.00000427 ← 가장 느림
256MB 1000ms $0.00000427
512MB 500ms $0.00000427 ← 최적 (비용 동일, 4배 빠름)
1024MB 480ms $0.00000819 ← 비용 증가, 성능 개선 미미
→ 이 경우 512MB가 최적값
최적화 전략 2: ARM(Graviton2) 전환
ARM 아키텍처 Lambda는 x86 대비 20% 저렴하고 최대 34% 더 높은 성능을 제공합니다.
| 항목 | x86 | ARM (Graviton2) |
|---|---|---|
| 아키텍처 | x86_64 | arm64 |
| 가격 | 기준가 | 20% 저렴 |
| 성능 | 기준 | 최대 34% 향상 |
ARM 전환 시 주의사항
- 네이티브 바이너리: C/C++, Rust 등 컴파일 언어는 ARM용으로 재빌드 필요
- 인터프리터 언어: Python, Node.js, Java는 대부분 호환
- Lambda Layer: ARM용 Layer를 별도로 준비해야 할 수 있음
시험 팁
시험 포인트: Lambda Graviton2(ARM)는 x86 대비 20% 비용 절감 + 성능 향상
최적화 전략 3: 실행 시간 단축
콜드 스타트 최소화
| 전략 | 방법 | 비용 영향 |
|---|---|---|
| Provisioned Concurrency | 미리 인스턴스 준비 | 추가 비용 |
| SnapStart | JVM 스냅샷 (Java) | 무료 |
| 최소 패키지 | 불필요한 SDK 제거 | 무료 |
| VPC 외부 실행 | VPC 불필요 시 제거 | 무료 |
코드 최적화
# 나쁜 예: 핸들러 내부에서 매번 초기화
def handler(event, context):
import boto3 # 매번 임포트
client = boto3.client('dynamodb') # 매번 생성
return client.get_item(...)
# 좋은 예: 핸들러 외부에서 초기화 (재사용)
import boto3
client = boto3.client('dynamodb') # 콜드 스타트 시 1번만
def handler(event, context):
return client.get_item(...) # 웜 스타트 시 재사용
최적화 전략 4: 비용 관리
계층형 요금 (Tiered Pricing)
대규모 사용 시 자동으로 할인이 적용됩니다:
| 구간 | 가격 (GB-초) |
|---|---|
| 0 - 60억 GB-초 | $0.0000166667 |
| 60억 - 150억 GB-초 | $0.0000150000 (10% 할인) |
| 150억 GB-초 초과 | $0.0000133334 (20% 할인) |
Savings Plans
Lambda에도 Compute Savings Plans를 적용할 수 있습니다:
- 1년 또는 3년 약정
- 최대 17% 추가 절감
불필요한 호출 제거
비용 절감 체크리스트:
☑ CloudWatch 로그 레벨 최적화 (DEBUG → INFO)
☑ 불필요한 API 호출 제거
☑ DynamoDB 배치 작업 활용 (PutItem → BatchWriteItem)
☑ SQS 배치 처리 (메시지 10개씩 수신)
☑ /tmp 디렉토리 캐싱 활용
비용 모니터링
CloudWatch 지표
| 지표 | 용도 |
|---|---|
| Duration | 실행 시간 추적 |
| ConcurrentExecutions | 동시 실행 수 |
| Throttles | 조절 발생 횟수 |
| MemorySize vs MaxMemoryUsed | 메모리 과잉 프로비저닝 감지 |
Cost Explorer 활용
Lambda 비용 분석:
1. Cost Explorer → 서비스별 필터 → Lambda
2. 태그별 비용 분석 (환경, 프로젝트별)
3. 일별/주별 추세 확인
SAA-C03 시험 출제 포인트
- ✅ 메모리-CPU 관계: "메모리 증가 → CPU 비례 증가"
- ✅ 비용 최적화: "Power Tuning으로 최적 메모리 탐색"
- ✅ ARM 전환: "Graviton2로 20% 비용 절감"
- ✅ 과금 구조: "요청 수 + (메모리 × 실행 시간)"
- ✅ 콜드 스타트: "Provisioned Concurrency = 추가 비용, SnapStart = 무료"
시험 팁
시험 문제 예시: "Lambda 함수의 비용을 줄이면서 성능은 유지하려면?" → 정답: ARM(Graviton2) 아키텍처로 전환 (20% 저렴 + 성능 향상)
자주 묻는 질문 (FAQ)
Q: Lambda 메모리를 최소(128MB)로 설정하면 가장 저렴한가요?
아니요. CPU 바운드 작업은 메모리를 늘려 실행 시간을 단축하면 총 비용이 동일하거나 오히려 줄어들 수 있습니다. Power Tuning으로 최적값을 찾으세요.
Q: Provisioned Concurrency는 언제 사용해야 하나요?
콜드 스타트가 허용되지 않는 지연 시간에 민감한 API에서 사용합니다. 추가 비용이 발생하므로, Java/SnapStart 또는 패키지 최적화를 먼저 시도하세요.
Q: Lambda와 EC2 중 어느 것이 더 저렴한가요?
짧은 실행 시간, 불규칙한 트래픽에는 Lambda가 저렴합니다. 24/7 지속 실행, 높은 트래픽에는 EC2(Reserved)가 더 저렴합니다.
Q: Lambda 프리 티어는 얼마나 되나요?
매월 100만 건 요청 + 40만 GB-초 컴퓨팅이 무료입니다. 이는 영구적으로 제공됩니다 (12개월 제한 없음).
Q: ARM으로 전환하면 코드를 수정해야 하나요?
Python, Node.js 등 인터프리터 언어는 대부분 수정 없이 작동합니다. 네이티브 바이너리가 포함된 Layer는 ARM용으로 다시 빌드해야 합니다.