AWS Lambda는 서버 관리에 대한 부담 없이 코드를 실행할 수 있게 해주는 강력한 서비스입니다. 하지만 그 편리함 뒤에는 사용량에 따라 예측하기 어려운 비용이라는 숨은 위협이 도사리고 있죠. 많은 기업이 Lambda를 도입하지만, 단순히 사용만 할 뿐 비용을 진단하고 분석하는 데는 어려움을 겪습니다. 마치 복잡한 미로에 들어선 것처럼, 어디서 비용이 얼마나 발생하는지 정확히 파악하기 힘듭니다. 이로 인해 불필요한 지출이 쌓이고, 결국 예상치 못한 비용 폭탄을 맞기도 합니다.
AWS Cost Explorer라는 강력한 도구와 몇 가지 핵심 분석 포인트를 활용하면, 이 복잡한 비용의 미스터리를 명확하게 풀어낼 수 있습니다. 이 글은 Cost Explorer를 통해 Lambda 비용을 명확하고, 간결하게 분석하고, 실행 가능한 구체적인 최적화 방안을 도출하는 방법을 제시합니다.
AWS Lambda 함수의 비용을 정확히 파악하고 최적화하려면, Cost Explorer를 활용해 상세 Usage Type별로 분석하는 것이 중요합니다. Lambda는 실행 시간(GB-Second), 호출 횟수(Request), 아키텍처별 과금(x86 vs ARM), 데이터 전송량, 리전 간 트래픽 등에 따라 다양한 방식으로 요금이 발생하므로, 항목별 분류와 트렌드 분석을 통해 효율적인 비용 절감 전략을 수립할 수 있습니다.
AWS Lambda 비용 분석을 시작하려면, 먼저 AWS Management Console에 로그인합니다. 콘솔 상단의 검색창에 "Cost Explorer"를 입력하여 해당 서비스를 선택한 다음, "Cost Explorer 열기" 버튼을 클릭하여 비용 분석 도구에 진입합니다.
비용 데이터를 효과적으로 분류하고 분석하려면 Group By 항목을 전략적으로 설정하는 것이 중요합니다. Lambda 관련 비용을 파악할 때는 다음 기준들을 활용하는 것이 특히 효과적입니다.
UsageType
함수 실행 시간(Lambda-GB-Second), 호출 수(Request), 아키텍처별 과금(예: Lambda-Compute-Duration-ARM), 데이터 전송량(예: DataTransfer-Out-Bytes), 프로비저닝된 동시성 유지 시간(예: Provisioned-Concurrency-Duration) 등 Lambda의 다양한 과금 요소를 명확하게 구분할 수 있습니다. 이를 통해 어떤 사용 패턴이 전체 Lambda 비용에서 가장 큰 비중을 차지하는지 한눈에 파악하여 최적화의 우선순위를 정할 수 있습니다.
Resource ID
Resource ID를 기준으로 그룹핑하면 각 Lambda 함수의 ARN(Amazon Resource Name)별로 발생하는 개별 비용을 상세히 확인할 수 있습니다. 이를 통해 "어떤 Lambda 함수가 가장 많은 비용을 발생시키고 있는가?"를 명확히 파악하고, 특정 함수 또는 스택의 사용량과 비용을 심층 분석할 수 있습니다.
Linked Account
조직 계정 단위로 분리 추적할 수 있도록 AWS Organizations를 사용하는 경우, 이 옵션을 통해 각 계정별 Lambda 비용을 분리하여 확인하고 관리할 수 있습니다.
Operation (선택 사항)
특정 Lambda API 엔드포인트의 동작이나 타입(예: Invoke 호출, UpdateFunctionConfiguration 호출)별로 비용을 더 세분화하여 분석하고자 할 때 이 옵션을 활용할 수 있습니다. 이는 특정 함수 기능이 비용에 미치는 영향을 파악하는 데 유용합니다.
정확하고 집중적인 Lambda 비용 분석을 위해서는 다음 필터링 설정을 적용해야 합니다. 분석 범위를 좁혀서 원하는 데이터만 편리하게 확인할 수 있습니다.
Service
Service 필터에서 AWS Lambda를 명확히 선택하여, 다른 AWS 서비스의 비용과 혼동되지 않고 오직 Lambda 관련 비용만 분석 대상으로 포함합니다.
UsageType
UsageType 필터에서는 Lambda의 주요 비용 항목들을 세부적으로 선택하여 분석할 수 있습니다. 여기에는 주로 다음과 같은 항목들이 포함됩니다.
Lambda-Requests: Lambda 함수 호출 횟수에 대한 요금입니다.
Lambda-GB-Second: Lambda 함수의 메모리 사용량과 실행 시간을 곱한 컴퓨팅 시간에 대한 요금입니다. (x86 아키텍처 기준)
Lambda-Compute-Duration-ARM: Graviton2(ARM) 아키텍처를 사용하는 Lambda 함수의 컴퓨팅 시간에 대한 요금입니다.
Provisioned-Concurrency-Duration: 프로비저닝된 동시성 유지 시간에 대한 요금입니다.
DataTransfer-Out-Bytes: Lambda 함수에서 외부로 전송되는 데이터 양에 대한 요금입니다. (특히 VPC 내 Lambda가 NAT Gateway를 통해 인터넷으로 통신할 때 발생할 수 있는 간접 비용)
Lambda-EFS-Duration: Lambda 함수가 EFS(Elastic File System)에 접근하여 데이터를 읽고 쓰는 시간에 대한 요금입니다.
이러한 필터링을 통해, 특정 함수나 워크로드의 과다 호출, 과도한 메모리 설정, 불필요한 외부 통신 등의 비용 패턴을 시각적으로 파악하고 최적화 기회를 식별할 수 있습니다.
AWS Lambda 비용의 시간적 변화를 파악하고 심층 분석하기 위해서는 적절한 트렌드 분석 기간을 설정하는 것이 중요합니다. 이는 함수 호출량, 실행 시간, 아키텍처 변경 등이 비용에 미치는 영향을 이해하는 데 필수적입니다.
기간 설정
Cost Explorer 상단에 위치한 기간 선택 메뉴를 활용하여 '이번 달', '최근 6개월', '사용자 지정 범위' 등 여러분이 원하는 특정 분석 기간을 유연하게 지정할 수 있습니다. 장기적인 추세를 파악하기 위해서는 최소 3개월 이상의 데이터를 살펴보는 것이 좋습니다.
일별 분석
비용 데이터의 일별 추이를 분석하는 것은 갑작스러운 요금 급증 시점을 추적하는 데 특히 유용합니다. 예를 들어, 특정 Lambda 함수의 반복 호출 증가, 비정상 루프 호출, 또는 예기치 않은 이벤트 소스(예: SQS, DynamoDB Streams)의 과도한 트리거를 즉시 탐지하고 원인을 파악할 수 있습니다.
월별 분석
장기적인 관점에서 Lambda 비용 추세를 파악하려면 월별 분석이 적합합니다. 이를 통해 아키텍처 전환 효과(예: x86에서 ARM으로 전환 후 비용 감소), 전반적인 함수 호출량 변화, 코드 리팩토링 후 실행 시간 단축 성과 등을 장기적인 관점에서 확인할 수 있습니다. 월별 추이를 통해 예산 수립 및 리소스 최적화 전략을 구체화할 수 있습니다.
실제 시나리오에서 Cost Explorer 데이터를 어떻게 활용하여 비용 절감 기회를 찾을 수 있는지 몇 가지 예를 들어보겠습니다.
APN2-Request 비용이 갑자기 증가했다면?
이는 Lambda 함수 호출 횟수가 급증했음을 의미합니다. 애플리케이션 로직 오류(무한 루프), 이벤트 소스(예: SQS, DynamoDB Streams)의 잘못된 구성으로 인한 과도한 함수 트리거, 또는 악의적인 공격으로 인한 비정상적인 호출 가능성을 분석합니다.
CloudWatch Logs와 Lambda 호출 메트릭을 통해 특정 함수의 호출 패턴을 심층 분석하여 원인을 찾고, 필요시 이벤트 소스 설정을 조정하거나 함수 코드를 수정해야 합니다.
APN2-Lambda-GB-Second가 높은 경우?
이는 Lambda 함수의 실행 시간이 길거나, 할당된 메모리가 과도하다는 신호입니다. 코드 비효율성(느린 데이터베이스 쿼리, 불필요한 연산), 외부 API 호출 대기 시간, 또는 타임아웃 설정 오류 등을 확인합니다. Lambda Power Tuning 도구를 사용하여 최적의 메모리 설정을 찾아 실행 시간을 단축하거나, 코드 리팩토링을 통해 불필요한 지연을 제거하는 것이 비용 절감에 효과적입니다.
APN2-DataTransfer-Out-Bytes가 많은 경우?
이는 Lambda 함수에서 외부로 전송되는 데이터 양이 많음을 나타냅니다. 특히 VPC 내 Lambda가 NAT Gateway를 통해 인터넷으로 나가는 경우 발생할 수 있습니다. 응답 JSON의 크기를 최적화하거나, 압축(GZIP)을 적용하여 전송량을 줄일 수 있습니다. 또한, Lambda가 반드시 VPC 내부에 있어야 하는지 재검토하고, 퍼블릭 API 호출만 한다면 VPC 연결을 제거하여 NAT Gateway 관련 비용을 회피하는 것을 고려해야 합니다.
ARM 기반으로 전환했지만 비용 변화가 없다면?
Graviton2(ARM) 아키텍처로 전환했음에도 Lambda-Compute-Duration-ARM 비용이 기대만큼 줄지 않았다면, 실제 트래픽이 ARM Lambda에 잘 할당되었는지, 또는 아키텍처 전환 후 오히려 성능 저하로 인해 실행 시간이 증가했는지 확인이 필요합니다. 호환성 문제로 인해 코드가 비효율적으로 작동하거나, 특정 라이브러리가 ARM 환경에서 최적화되지 않았을 가능성도 있습니다. A/B 테스트나 세부적인 성능 모니터링을 통해 원인을 진단하고 다시 최적화해야 합니다.
AWS Cost Explorer에서 AWS Lambda의 사용량 유형(Usage Type)은 Lambda 함수 사용에 따른 비용을 파악하는 데 사용됩니다. 서울 리전을 기준으로 각 항목에 대한 상세 설명은 다음과 같습니다. 금액에 대한 보다 자세한 설명은 아래 링크에서 참조할 수 있습니다.
이 항목은 서울 리전(ap-northeast-2)에서 실행되는 Lambda 함수 중 x86 아키텍처를 사용하는 함수의 메모리 사용량과 실행 시간을 곱한 값에 대한 비용을 나타냅니다.
과금 기준: Lambda 함수가 실행된 시간(초) × 할당된 메모리(GB) 단위인 "GB-초(GB-second)"로 과금됩니다.
예시: 512MB(0.5GB) 메모리를 사용하는 함수가 2초 동안 실행되면 1GB-Second로 계산됩니다.
비용 최적화 팁: 메모리 할당을 최적화하고, 함수 실행 시간을 단축하여 GB-Second 사용량을 줄이는 것이 핵심입니다.
이 항목은 서울 리전(ap-northeast-2)에서 실행되는 Lambda 함수의 요청(Request) 횟수에 대한 비용을 나타냅니다. 함수가 호출될 때마다 요청으로 간주됩니다.
과금 기준: 월 100만 건까지는 무료이며, 그 이후부터는 호출 1백만 건당 과금이 발생합니다 (서울 리전 기준 $0.20/백만 건).
비용 최적화 팁: 불필요한 함수 호출을 줄이고, 이벤트 소스 설정을 최적화하여 오남용을 방지해야 합니다.
이 항목은 서울 리전(ap-northeast-2)에서 실행되는 Lambda 함수 중 ARM 아키텍처(AWS Graviton2 프로세서)를 사용하는 함수의 메모리 사용량과 실행 시간을 곱한 값에 대한 비용을 나타냅니다.
과금 기준: x86 아키텍처와 마찬가지로 할당된 메모리(GB)에 대해 실행된 시간(초)을 기준으로 과금됩니다.
비용 특징: ARM 아키텍처는 일반적으로 x86 대비 20% 정도 더 낮은 비용으로 제공됩니다. 또한, 특정 워크로드에서는 더 나은 성능을 제공하여 실행 시간을 단축함으로써 총비용을 추가로 절감할 수 있는 잠재력을 가집니다.
비용 최적화 팁: 호환성 검토 후 ARM 아키텍처로 전환을 적극적으로 고려하여 비용 및 성능 최적화를 동시에 달성할 수 있습니다.
이 항목은 서울 리전(ap-northeast-2)에서 실행되는 Lambda 함수 중 ARM 아키텍처를 사용하는 함수의 요청(Request) 횟수에 대한 비용을 나타냅니다.
과금 기준: ARM 아키텍처 함수가 호출될 때마다 요청으로 간주되며, 무료 사용량을 초과하는 요청에 대해 과금됩니다.
비용 특징: 호출 수 자체에는 아키텍처에 따른 단가 차이가 없습니다. (x86과 동일하게 월 100만 건 초과 시 $0.20/백만 건)
이 항목은 서울 리전(ap-northeast-2) 내의 Lambda 함수에서 AWS 외부(인터넷)로 전송되는 데이터 양에 대한 비용을 나타냅니다.
과금 기준: Lambda 함수가 외부 서비스로 데이터를 보내거나 사용자에게 응답을 보낼 때 발생하는 데이터 전송 비용이 여기에 포함됩니다. GB당 약 $0.126의 비용이 발생합니다 (이는 리전 및 대상에 따라 달라질 수 있는 일반적인 인터넷 데이터 전송 비용입니다).
비용 최적화 팁 : Lambda 함수의 응답 페이로드 크기를 최소화합니다 (예: 불필요한 데이터 제거, 압축 사용). 또한 Lambda가 VPC 내부에 구성되어 NAT Gateway를 통해 인터넷으로 통신하는 경우, NAT Gateway의 데이터 처리 요금 및 시간당 요금, 아웃바운드 데이터 전송 요금이 추가로 발생합니다. 퍼블릭 API 호출만 하는 함수는 VPC 연결을 제거하여 NAT Gateway 관련 비용을 회피할 수 있습니다.
이 항목은 도쿄 리전(ap-northeast-1)에서 서울 리전(ap-northeast-2)으로 AWS 네트워크를 통해 전송되는 데이터 양에 대한 비용을 나타냅니다.
과금 기준: 이는 리전 간 데이터 전송(Data Transfer Out) 비용에 해당하며, Lambda 함수가 직접적으로 생성하는 비용이라기보다는 Lambda 함수가 다른 AWS 서비스(예: 다른 리전의 S3, RDS, 또는 API Gateway)와 연동될 때 발생할 수 있는 데이터 전송 비용의 일부로 간주될 수 있습니다.
비용 특징: AWS 내 리전 간 데이터 전송은 인터넷으로의 데이터 전송보다는 저렴하지만, 여전히 비용이 발생합니다.
비용 최적화 팁: 리전 간 데이터 전송은 필요한 경우에만 최소화하고, 가능하다면 동일 리전 내에서 서비스들을 구성하여 데이터 전송 비용을 절감하는 것이 좋습니다.
아래는 Lambda의 지난 6개월 비용을 usage type과 resource id로 나누어 조회해본 결과입니다.
사용 유형별(UsageType) 데이터를 보면, 2024년 11월부터 2025년 4월까지 총 $868.49의 Lambda 비용이 발생했으며, 다음과 같은 주요 특징을 확인할 수 있습니다.
APN2-Lambda-GB-Second가 주요 비용 원인
이 항목은 x86 아키텍처 Lambda의 컴퓨팅 시간(메모리 x 실행 시간)에 대한 비용으로, 전체 비용 $868.49 중 약 $614.88 (약 70.8%)를 차지하며 가장 큰 비중을 보입니다.
특히 2025년 1월 $58.36에서 2월 $124.63, 3월 $213.70으로 지속적인 증가 추세를 보이다가, 4월에 $162.23으로 소폭 감소했습니다. 이는 실행 시간 또는 할당 메모리 사용량이 계속 늘고 있음을 의미합니다.
APN2-Request 비용도 상당한 비중
함수 호출 횟수에 대한 비용으로, 약 $212.09 (약 24.4%)를 차지합니다. 이 또한 2025년 1월 $26.42에서 2월 $37.35, 3월 $72.52로 증가하는 패턴을 보이다가 4월에 $40.53으로 감소했습니다.
ARM 아키텍처 도입 및 미미한 비중
APN2-Lambda-GB-Second-ARM과 APN2-Request-ARM 항목은 2025년 4월에 처음으로 비용이 발생했으며 (각각 $38.36, $3.13), 이는 최근에 ARM 아키텍처로의 전환 또는 도입이 시작되었음을 시사합니다. 하지만 아직 전체 비용에서 차지하는 비중은 매우 작습니다 (합계 약 4.8%).
데이터 전송 비용은 미미
APN2-DataTransfer-Out-Bytes 및 APN1-APN2-AWS-Out-Bytes 항목은 거의 발생하지 않았습니다 ($0.01 미만). 이는 Lambda 함수가 외부로 대량의 데이터를 전송하거나 다른 리전과 빈번하게 통신하는 경우가 거의 없음을 나타냅니다.
리소스 ID별(Resource ID) 데이터를 보면, 특정 Lambda 함수들이 비용의 대부분을 차지하고 있음을 확인할 수 있습니다.
function:PartnerApiGW-prod-PartnerItem 함수가 가장 큰 비용원인
이 함수는 총 $549.98의 비용이 발생하여 전체 Lambda 비용의 63% 이상을 차지합니다. 특히 2025년 1월 $52.85에서 2월 $116.90, 3월 $185.10으로 크게 증가했습니다.
function:PartnerApiGW-prod-authorizerClient 함수가 그 다음
총 $215.73의 비용이 발생하여 두 번째로 높은 비중을 차지합니다. 이 함수 또한 2025년 1월 $21.96에서 2월 $36.42, 3월 $91.69로 증가했습니다.
function:ImageDims-prod-dims 함수 비용 증가
2025년 4월에 갑자기 $41.46의 비용이 발생하며 새롭게 주요 비용원으로 등장했습니다. 이는 이미지 처리 관련 워크로드가 증가했거나 최적화가 필요할 수 있음을 시사합니다.
그 밖에 나머지 함수들은 월별 $1~$4 수준의 적은 비용이 발생합니다.
위 분석을 바탕으로, 현재 Lambda 비용을 최적화하기 위한 구체적인 방안은 다음과 같습니다.
PartnerApiGW-prod-PartnerItem 및 PartnerApiGW-prod-authorizerClient 함수 최적화
이 두 함수가 전체 Lambda 비용의 대부분을 차지하며 지속적으로 증가하는 추세이므로, 이 함수들에 대한 최적화가 가장 중요합니다.
1. 실행 시간 및 메모리 최적화
코드 비효율성 진단: 해당 함수의 코드를 면밀히 검토하여 불필요한 연산, 비효율적인 알고리즘, 외부 API 호출 대기 시간, 데이터베이스 쿼리 최적화 등을 통해 실행 시간을 단축해야 합니다.
메모리 최적화: Lambda Power Tuning 도구를 사용하여 각 함수에 가장 비용 효율적인 메모리(GB-Second) 설정을 찾아 적용합니다. 메모리를 늘리면 CPU 성능도 함께 증가하여 실행 시간이 줄어들고, 결과적으로 총비용이 감소할 수 있습니다.
Cold Start 개선: 만약 이 함수들이 API Gateway와 연동되어 사용자 경험에 민감하다면, 콜드 스타트가 빈번한지 확인하고 프로비저닝된 동시성 도입을 검토할 수 있습니다. 단, 프로비저닝된 동시성은 추가적인 고정 비용을 발생시키므로, 트래픽 패턴에 맞춰 최소한으로 설정하고 필요 없는 시간대에는 해제하는 전략이 필요합니다. (예: 주간 피크 타임에만 활성화)
2. 요청 수 최적화
이벤트 소스 검토: 이 함수들을 트리거하는 이벤트 소스(예: API Gateway 요청)가 과도하게 발생하고 있지는 않은지 확인합니다. 불필요한 반복 호출이나 서비스 장애로 인한 재시도가 과도한 요청 수를 유발할 수 있습니다.
클라이언트 재시도 로직 최적화: 클라이언트 애플리케이션에서 실패한 요청에 대한 재시도(Retry) 로직이 너무 공격적으로 설정되어 있지 않은지 확인하고, 적절한 백오프(Backoff) 전략을 적용합니다.
새로운 비용원 ImageDims-prod-dims 함수 관리
2025년 4월부터 비용이 발생하기 시작한 ImageDims-prod-dims 함수에 대한 선제적인 관리가 필요합니다.
워크로드 파악: 이 함수가 어떤 이미지 처리 작업을 수행하며, 왜 갑자기 비용이 발생하기 시작했는지 정확히 파악해야 합니다. (예: 새로운 서비스 런칭, 대량의 이미지 업로드)
실행 시간/메모리/요청 수 분석: 위 PartnerApiGW 함수들과 동일하게 해당 함수의 실행 시간, 메모리, 요청 수에 대한 세부 분석을 시작하고 최적화 방안을 모색해야 합니다. 이미지 처리의 특성상 메모리 요구량이 높을 수 있으므로, 최적 메모리 설정이 특히 중요합니다.
ARM 아키텍처 전환 가속화 및 모니터링
2025년 4월부터 ARM(Graviton2) 아키텍처 사용이 시작된 것은 긍정적인 신호입니다.
전환 가속화: APN2-Lambda-GB-Second 비용이 여전히 높으므로, 나머지 x86 기반 함수들(특히 주요 비용원인 PartnerApiGW 관련 함수들)에 대해서도 ARM 아키텍처로의 전환 가능성을 적극적으로 검토합니다. ARM은 x86 대비 약 20% 저렴한 단가를 제공하므로, 전환 시 즉각적인 비용 절감 효과를 기대할 수 있습니다.
호환성 및 성능 테스트: 전환 전에는 반드시 호환성 테스트를 수행하고, 실제 워크로드에서 성능 저하가 없는지 충분히 검증해야 합니다. 필요한 경우 native binary나 Docker 이미지도 ARM64용으로 재빌드해야 합니다.
모니터링 강화: ARM 전환 후 APN2-Lambda-GB-Second-ARM의 비용 추이를 지속적으로 모니터링하여, 실제로 비용이 절감되고 성능이 유지되는지 확인해야 합니다.
CloudWatch Logs 비용 관리 (숨은 비용)
데이터 전송 비용은 미미하지만, Lambda의 실행 로깅은 CloudWatch Logs 비용을 유발합니다. 현재 데이터에 CloudWatch Logs 비용이 명시적으로 나타나 있지 않으므로, 별도로 확인하고 관리해야 합니다.
로그 출력 최소화: Lambda 함수 내에서 console.log()와 같은 로그 출력 빈도를 최소화하고, 필요한 정보만 DEBUG, INFO 레벨로 출력하도록 로깅 레벨을 관리합니다.
로그 Retention 기간 설정: CloudWatch Logs 그룹에 대한 로그 보존 기간(Retention period)을 설정하여 불필요하게 오래된 로그가 쌓이지 않도록 합니다. (예: 7일, 14일, 30일 등)
AWS Cost Explorer를 통한 Lambda 비용 분석은 단순한 숫자 놀음이 아니라, 비즈니스 효율성을 높이는 중요한 전략적 과정입니다. 우리는 사용량 유형(Usage Type)과 리소스 ID별(Resource ID) 분석을 통해, $868.49라는 총비용의 70% 이상이 특정 함수들의 컴퓨팅 시간(GB-Second)에서 비롯된다는 사실을 발견했습니다. 특히 'PartnerApiGW' 관련 함수들이 비용 급증의 주범이라는 구체적인 증거를 확보했죠.
이러한 명확한 진단을 바탕으로, 이제 실행 가능한 행동에 집중할 수 있습니다. 가장 큰 비용을 차지하는 함수들의 코드와 메모리 설정을 최적화하고, 최근에 비용이 발생하기 시작한 'ImageDims' 함수를 예방적으로 관리하며, 20%의 비용 절감 효과가 있는 ARM 아키텍처로의 전환을 가속화해야 합니다.
결국, 비용 최적화는 '그냥 사용'하는 것에서 '지능적으로 사용'하는 것으로의 전환을 의미합니다. 데이터가 주는 통찰력을 활용해 문제의 원인을 정확히 파악하고, 간결하지만 구체적인 행동 계획을 수립한다면, 보이지 않던 비용 낭비를 줄이고 AWS Lambda를 진정한 비용 효율적인 솔루션으로 만들 수 있습니다. 이제 Cost Explorer는 단순히 지난달 청구서를 확인하는 도구가 아니라, 미래의 비용을 예측하고 절감하는 전략적 무기가 될 것입니다.