SAABlog
비용 관리중급

Lambda 비용 최적화: 메모리 설정부터 ARM 전환까지

AWS Lambda 비용을 효과적으로 절감하는 메모리 최적화, ARM 전환, Power Tuning 활용법을 알아봅니다.

PHILOLAMB-
Lambda비용 최적화서버리스Graviton메모리 설정

관련 시험 도메인

  • 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% 더 높은 성능을 제공합니다.

항목x86ARM (Graviton2)
아키텍처x86_64arm64
가격기준가20% 저렴
성능기준최대 34% 향상

ARM 전환 시 주의사항

  1. 네이티브 바이너리: C/C++, Rust 등 컴파일 언어는 ARM용으로 재빌드 필요
  2. 인터프리터 언어: Python, Node.js, Java는 대부분 호환
  3. Lambda Layer: ARM용 Layer를 별도로 준비해야 할 수 있음

시험 팁

시험 포인트: Lambda Graviton2(ARM)는 x86 대비 20% 비용 절감 + 성능 향상

최적화 전략 3: 실행 시간 단축

콜드 스타트 최소화

전략방법비용 영향
Provisioned Concurrency미리 인스턴스 준비추가 비용
SnapStartJVM 스냅샷 (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 시험 출제 포인트

  1. 메모리-CPU 관계: "메모리 증가 → CPU 비례 증가"
  2. 비용 최적화: "Power Tuning으로 최적 메모리 탐색"
  3. ARM 전환: "Graviton2로 20% 비용 절감"
  4. 과금 구조: "요청 수 + (메모리 × 실행 시간)"
  5. 콜드 스타트: "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용으로 다시 빌드해야 합니다.

관련 글

참고 자료