Cost Explorer 용어 이해하기
AWS RDS의 비용은 크게 서버 인스턴스, I/O 요청, 스토리지 사용에 따라 결정됩니다. Cost Explorer를 활용하면 지출 항목을 세부적으로 추적할 수 있으며, 예약 인스턴스(RI) 활용, 쿼리 최적화, 백업/저장 전략 설정 등을 통해 상당한 비용 절감이 가능합니다. 비용절감을 하기 위해 반드시 어떻게 비용이 나가는지 알아야 하며 Cost Explorer는 그것을 세부적으로 파악할 수 있도록 도움을 줍니다. 이번 글에서는 Cost Explorer에서 사용되는 RDS의 세부 지표들에 대해 이해할 수 있도록 합니다.
AWS를 사용하다 보면 매달 RDS 비용이 예상보다 크게 나오는 경우가 많습니다.
지난 글에서는 RDS의 기본 비용 구조를 간단히 살펴보았는데요[참조 - AWS 비용절감: ], 이번 글에서는 실제로 AWS Cost Explorer를 통해 RDS 비용이 구체적으로 어디서 발생하는지, 어떤 지표를 봐야 하는지 실무적으로 분석해보겠습니다.
먼저 Cost Explorer에서 필터 > 서비스에서 Amazon Relational Database Service를 선택합니다. 그리고 그룹화 기준으로 다른 항목들을 보면 세부 내역들을 파악할 수 있습니다. 아래 이미지는 그 중 RDS의 사용량 유형 지표들입니다. 1 depth로 RDS로 제한을 둔 뒤 2 depth로 사용량 유형을 grouping하면 RDS의 사용량 유형만을 확인할 수 있습니다.
위와 같이 사용량 유형에 사용되는 여러 지표들을 확인하실 수 있습니다. 세부적으로 지표들에 중요도 순으로 살펴볼게요. 아래에 설명한 것 외에도 지표들이 굉장히 많지만 크게 아래의 내용에서 벗어나진 않습니다. 사용량 유형을 기준으로 그룹화를 하면 각자 사용하는 Cost Explorer에서 RDS에 대해 나가는 비용들을 구체적으로 판단하실 수 있습니다.
- 이 값은 온디맨드 기준으로 r6i.2xlarge 인스턴스를 시간 단위로 사용한 비용을 나타냅니다.
- APN2 - 리전을 구분하는 의미로 서울 리전(ap-northeast-2)라고 이해하시면 됩니다.
- InstanceUsage - 온디맨드 비용임을 나타내는데 온디맨드라고 함은 별도의 장기 플랜에 따른 예약 없이 그대로 사용하고 있다는 의미입니다.
- db.r6i.2xl - 사용하고 있는 데이터베이스의 스펙으로 Aurora/리눅스 기준 시간당 $1.4가 지불됩니다. 인스턴스가 실행 중일 때 계속 과금되는 방식입니다.
서버 비용은 온디맨드를 사용하는 것과 정액제를 사용하는 방법으로 구분됩니다. 만약 1년 이상 서버를 유지하실 계획이라면 반드시 RI, Savings Plan을 적용하실 필요가 있습니다. 비용이 30%-60% 저렴하기 때문입니다. 또한 스펙을 낮추는 방식으로도 비용 최적화를 하실 수 있습니다.
- 예약 인스턴스(RI)로 구매된 r6i.2xlarge 인스턴스에 대한 사용 시간에 따른 비용을 나타냅니다. RI 적용 인스턴스에 대해 할인된 시간당 비용이 적용됩니다.
- RI(Reserved Instance)를 적용할 경우 InstanceUsage가 아닌 HeavyUsage로 비용이 잡히게 됩니다. 그리고 이 비용은 InstanceUsage와 다르게 매월 1일 일괄 적용됩니다.
리포트를 일별로 볼 경우 1일에 이 금액이 지불되니 비용분석할 때 HeavyUsage 적용유무에 따라 비용을 추산할 수 있어야 합니다. 1년만 약정하더라도 비용절감 폭이 30-40% 정도로 매우 크기 때문에 RI는 스펙이 명확하게 유지할 계획이라면 반드시 적용하는 것이 좋습니다.
- db.r6i.2xl는 한대당 24시간 요금이 $33.6이다. HeavyUsage가 4월 1일 $1987.2 과금되었다.
- $1987.2는 db.r6i.2xl 3대에 대한 한달 선불 비용이다. 3대이기 때문에 Hours 계산으로 72가 잡힌다. (24 x 3) 이는 한대당 $22.08 (1987.2 / 30 / 3)으로 정확히 계산된다.
- 이는 약 35% 절감된 비용이다. 한달 30일 기준으로 $345.6를 절감할 수 있다 ((33.6-22.08) x 30)
- Aurora에서 발생한 모든 I/O 요청 비용을 나타냅니다. 비용은 1백만의 요청당 $0.20입니다.
- 여기에 포함되는 작업은 SELECT, INSERT, UPDATE, DELETE가 있습니다. 서버에서 RDBMS에 요청하는 Write, Read의 모든 요청들이 해당됩니다.
- 그 밖에도 인덱스 재구성, binlog 기록, 백업, 복제 등의 읽기/쓰기에서도 비용이 발생합니다. 그러나 대부분의 비용은 SELECT, INSERT, UPDATE, DELETE에서 발생한다고 보실 수 있습니다.
최적화하는 방법 중의 하나는 읽기 캐시의 버퍼 히트률을 높게 관리해서 SELECT로 인한 비용을 최소화하는 방법이 있습니다. 버퍼 캐시를 활용할 경우 디스크를 직접 조회하지 않기 때문에 IO 비용이 발생하지 않습니다. 서비스 트래픽이 많을 경우, 쿼리 최적화가 안되었을 경우에는 I/O 요청 비용이 상당히 크게 지출될 수 있습니다.
- Aurora에 저장된 데이터 용량에 대한 스토리지 사용료를 나타냅니다.
- GB-Month 기준인데 이 단가가 1GB당 $0.1로 형성되어 있습니다. 예를 들어 100GB의 용량을 사용 중일 경우 한 달에 $10를 지출하게 됩니다.
- Cost Explorer에서 지출된 비용과 사용한 저장용량을 같이 확인할 수 있습니다. 월이 아닌 일 단위로 나누어서 보게 될 경우 그 저장용량 역시 해당 월의 총량에서 날짜를 나눈 기준으로 계산됩니다.
테이블의 데이터와 인덱스를 비롯해 binlog, undo log 등 전체 저장된 데이터가 포함되며 대부분은 데이터와 인덱스로 인한 비용이라고 보실 수 있습니다. Aurora의 경우 100GB 단위로 자동으로 볼륨이 확장되어 관리는 용이하나 특정 로그를 테이블로 적재한 경우 갑작스럽게 용량이 급격하게 높아질 수도 있습니다.
- RDS에서 사용하는 EBS(GP3) 볼륨의 저장 비용입니다. Aurora가 아닌 RDS를 사용중인 경우에 이 지표에서 과금되게 됩니다. 비용은 Aurora보다 저렴한데 GB-Month 기준으로 $0.08입니다.
- 백업 저장에 사용되는 비용입니다. RDS 서버의 자동 백업 비용과 수동으로 만든 스냅샷 비용도 여기에 모두 포함됩니다.
- 단가 측정방식은 Storage와 유사하며 $0.021/GB-Month 기준입니다.
- 백업 저장 시 데이터베이스의 용량만큼 무료로 지원됩니다. 그리고 그에 초과하면서 발생하는 비용이 백업 저장 비용으로 책정됩니다.
- 백업 방식은 증분 백업으로 이루어지기 때문에 최초 백업 후에 전체를 백업하지 않고 업데이트된 데이터만큼만 비용이 과금됩니다.
위 설명이 조금 헷갈릴 수 있습니다. 핵심은 7일간의 백업을 보존하면 7 x 데이터베이스 용량만큼 비용이 과금되는 것이 아닙니다. 데이터베이스 백업 보존 기간을 설정하는데 7일로 설정했다고 가정해볼게요. 현재의 데이터베이스 용량이 500GB라고 한다면 매일 매일 업데이트 되는 데이터만큼만 과금이 됩니다. 아래 예시를 보겠습니다.
예시에서는 편이상 데이터베이스 총량이 500GB로 계속 일정하다고 가정했습니다.
Day 2에 무료제공 범위를 다 사용할때까지 비용이 과금되지 않습니다. Day 3부터 초과사용분이 생기면서 과금이 되는데 Day 8의 예를 들면 Day 1의 백업 누적량인 100GB가 줄어들면서 30GB를 증분했기 때문에 초과 사용이 330GB에서 260GB로 변경됩니다. 전체 데이터베이스 총량에서 7일 간의 증분량이 과금되는 것으로 이해하시면 됩니다.
즉 Storage 총량 비용에서 추가로 백업한 것에 대한 증분금액이 과금되는 구조이기 때문에 그 금액 자체가 매우 크게 발생하지는 않습니다.
Aurora MySQL 5.7 또는 구 버전 사용 시 발생하는 연장 기술 지원(Extended Support)에 대한 비용입니다. 단가 구조가 특이한데 $0.12 per vCPU입니다. 즉 사용하는 데이터베이스 서버의 스펙에 있는 vCPU 개수에 따라 비용이 발생합니다. 2024년 12월 이후 MySQL 5.7 이하를 사용중인 경우 이 지원 비용이 크게 발생할 수 있습니다. 특히 이 비용은 RI/SP와도 무관하게 고정으로 과금되므로 빠르게 8.0 이상으로 업그레이드하실 필요가 있습니다.
db.r6i.2xlarge의 경우 vCPU가 8개인데 아래 계산에 의해 서버 비용의 70%에 가까운 비용이 추가로 과금되게 됩니다. 아래 실제로 과금된 비용을 보겠습니다.
8 vCPU x 24hr x 31일 = 약 $714/월
2월 5일 버전업이 이루어졌고 더이상 비용 지출이 되지 않습니다. 데이터베이스 유지 비용이 월 약 $3450 줄게 되었습니다. (114.96 x 30)
Aurora 데이터를 S3로 내보낼 때 발생하는 Export 비용입니다. 단가는 GB 당 $0.01입니다. Export Snapshot to S3 기능 사용 시에 발생하게 됩니다. 특별히 해당 기능을 사용하지 않으셨다면 발생하지 않는 비용입니다. 다만 대용량 데이터를 폐쇄망에서 사용하는 경우 데이터 활용이 쉽지 않으므로 이 기능이 유용할 수 있습니다. 전체 export가 아니라 필요한 스키마에서 필요한 테이블만 내보내는 구조로 활용하실 수 있습니다.
RDS에서 외부(인터넷/다른 리전 등)으로 나가는 네트워크 트래픽 비용입니다. 단가는 서울 기준 $0.09 ~ $0.12/GB입니다. 같은 리전일 경우 EC2에서 RDS에 데이터를 사용할 때는 무료입니다. 그러나 다른 리전이나 VPC Peering을 한 경우, 외부 API로 직접 호출하는 경우에는 비용이 발생합니다. AWS 내부 서버에서 RDS에 통신할 경우가 많을 경우 크게 신경 쓰지 않아도 되는 비용입니다.
외부에서 RDS로 유입된 데이터 전송은 보통 무료라고 보실 수 있습니다.
지난 글에서도 RDS의 비용 중에서 서버비용, I/O비용, 그리고 데이터 저장 비용이 중요하다고 언급한 바 있습니다.
위 Cost Explorer에서 대입해보면 그 순서대로 InstanceUsage / HeavyUsage, StorageIOUsage, 그리고 StorageUsage / GP3-Storage 비용이 중요하며 비용의 대부분을 차지합니다.
InstanceUsage / HeavyUsage 비용은 서버가 현재의 클라이언트 요청을 감당할 수 있는 선에서 적절한 최소 사양을 선택하셔야 합니다. 특히 슬로쿼리를 최소화하셔야 낮은 CPU 사용율을 유지하면서 비용을 절감하실 수 있습니다. 서비스의 규모가 커지다보면 CRUD 비용이 증가할 수 있는데 StorageIOUsage 비용을 절감하기 위해서는 Read Instance가 버퍼 내 쿼리를 잘 활용하실 수 있도록 최적화하셔야 하며 무분별한 저장, 변경, 삭제 작업을 줄이셔야 합니다.
Storage 비용은 절감하기가 쉽지 않습니다. Aurora MySQL은 내부적으로 스토리지를 자동 확장하지만, 자동 축소는 쉽게 되지 않는 구조입니다. AWS 공식 문서에서도 다음과 같이 밝히고 있습니다.
"Aurora storage automatically grows as needed, but does not automatically shrink when data is deleted."
Aurora는 내부적으로 일정 주기 또는 조건에 따라 GC(Garbage Collection) 또는 "스토리지 정리" 작업을 수행한다고 하지만 아예 줄어들지 않을 수도 있습니다. 내부적으로도 개발 환경의 데이터베이스를 크게 축소했음에도 예상만큼 줄어들지 않고 있습니다. 가장 확실한 방법은 신규 클러스터를 생성한 뒤에 데이터를 복제하고 기존 클러스터를 삭제하는 방법입니다. 신규 클러스터 생성 시에 필요한 데이터만큼만 저장되기 때문입니다.
이번 글에서는 AWS Cost Explorer를 통해 RDS 비용이 어떤 구조로 발생하는지, 주요 지표들을 중심으로 살펴보았습니다.
특히 서버 사용료(Instance/HeavyUsage), I/O 요청 비용(StorageIOUsage), 스토리지 비용(StorageUsage)이 핵심이라는 점을 기억하시면 됩니다.
다음 글에서는 실제 비용 최적화를 위한 구체적인 방법과 Cost Explorer 활용 팁까지 이어서 다뤄보겠습니다.
FinOps 커뮤니티에 함께 하실래요?
저는 최근 48%, $36000의 AWS 비용절감을 달성했습니다.
클라우드 비용을 효율화하고 싶은 분들, 비슷한 고민을 나누고 싶다면 제가 운영 중인 AWS-FINOPS-KR Slack 커뮤니티에 참여하세요. 실제 절감 사례, 질문, 전략 공유를 나누실 수 있습니다.