Amazon Athena는 오픈 소스 프레임워크를 기반으로 구축된 서버리스 대화형 분석 서비스로, 데이터가 있는 곳에서 페타바이트 규모의 데이터를 분석할 수 있습니다. Athena에서 SQL 또는 Apache Spark를 사용할 수 있으며 인프라를 설정하거나 관리할 필요가 없습니다. 요금은 간단합니다. 처리된 데이터 또는 사용한 컴퓨팅을 기준으로 요금이 부과됩니다.
시작하려면, 쿼리 엔진, 실행 결과를 보관하는 Amazon Simple Storage Service(S3)의 작업 디렉터리, AWS Identity and Access Management(IAM) 역할(필요 시), 리소스 태그를 지정할 수 있는 작업 그룹을 생성합니다. 작업 그룹을 사용하여 사용자, 팀, 애플리케이션 또는 워크로드를 분리하고, 각 쿼리 또는 전체 작업 그룹이 처리할 수 있는 데이터 양의 한도를 설정하고, 비용을 추적할 수 있습니다. 생성한 작업 그룹을 기반으로 (a) SQL 쿼리를 실행하고 스캔된 데이터 또는 사용한 컴퓨팅을 기준으로 요금을 지불하거나 (b) Apache Spark Python 코드를 실행하고 코드 실행에 대해 시간당 요금을 지불할 수 있습니다.
SQL 쿼리
프로비저닝된 용량을 사용한 SQL 쿼리
Apache Spark
추가 비용
Athena는 Amazon S3에서 직접 데이터를 쿼리합니다. Athena로 데이터를 쿼리하는 데 드는 스토리지 추가 비용은 없습니다. 스토리지, 요청 및 데이터 전송에 대한 표준 S3 요금이 부과됩니다. 기본적으로 쿼리 결과는 선택한 S3 버킷에 저장되고 표준 S3 요금이 청구됩니다.
- 워크로드에서 데이터를 읽고 저장하고 전송할 때 S3 요금이 부과됩니다. 여기에는 성공한 쿼리와 실패한 쿼리가 포함됩니다. 기본적으로 SQL 쿼리 결과 및 Spark 계산 결과는 선택한 S3 버킷에 저장되고 표준 S3 요금으로 청구됩니다. 자세한 내용은 Amazon S3 요금을 참조하세요.
- Athena와 함께 AWS Glue 데이터 카탈로그를 사용하면, 표준 데이터 카탈로그 요금이 부과됩니다. 자세한 내용은 AWS Glue 요금 페이지를 참조하세요.
- 페더레이션된 데이터 소스(S3에 저장되지 않은 데이터)에 대한 SQL 쿼리는 프로비저닝된 용량을 사용하지 않는 한 여러 데이터 소스를 합산하여 Athena로 스캔한 테라바이트(TB)당 요금이 부과되며 쿼리당 최소 10MB의 가장 가까운 메가바이트로 반올림됩니다. 이러한 쿼리는 계정에서 AWS Lambda 함수도 호출하므로 Lambda 사용에 대한 표준 요금이 부과됩니다. 페더레이션된 쿼리에 의해 호출되는 Lambda 함수에는 Lambda 프리 티어가 적용됩니다. 자세한 내용은 Lambda 요금 페이지를 참조하세요.
요금 예
예제 1 – SQL 쿼리
크기가 같은 4개의 컬럼으로 구성된 테이블이 있고, 총 3TB의 압축되지 않은 텍스트 파일이 Amazon S3에 저장되어 있다고 가정해 보겠습니다. 이 테이블의 한 컬럼에서 데이터를 가져오도록 쿼리를 실행하면 Amazon Athena가 전체 파일을 스캔해야 합니다. 텍스트 형식은 분할될 수 없기 때문입니다.
- 이 쿼리 비용은 15 USD가 됩니다. (3TB 스캔 요금은 3 * 5 USD/TB = 15 USD).
GZIP을 사용해 파일을 압축하면 3:1의 압축 게인을 얻을 수 있습니다. 이 경우 1TB 크기의 압축 파일이 생깁니다. 이 파일에 동일한 쿼리를 수행하면 비용이 5 USD가 됩니다. Athena는 전체 파일을 다시 스캔해야 하지만, 크기가 1/3로 줄어들었으므로 앞에서 지불했던 비용의 1/3만 지불하게 됩니다. 파일을 압축하고(3:1 압축률을 달성) 이를 Apache Parquet와 같은 컬럼 형식으로 변환하는 경우 S3에 저장되는 데이터는 여전히 1TB가 됩니다. 하지만 이 경우 Parquet이 컬럼 방식이므로 Athena는 실행되는 쿼리와 연관이 있는 컬럼만 읽게 됩니다. 이 예제에서는 쿼리가 하나의 컬럼만 참조하므로 Athena는 파일에서 해당 컬럼만 읽고 나머지 3/4는 읽지 않아도 됩니다. Athena가 이 파일의 1/4만 읽으므로 S3에서 0.25TB의 데이터만 스캔합니다.
- 이 쿼리 비용은 1.25 USD가 됩니다. 압축으로 비용이 1/3로 절감되고 하나의 컬럼만 읽음으로써 다시 1/4로 절감됩니다.
(파일 크기 = 3TB/3 = 1TB. 하나의 컬럼을 읽을 때 스캔된 데이터 = 1TB/4 = 0.25TB. 0.25TB에 대한 요금 = 0.25 * 5 USD/TB = 1.25 USD)
예제 2 - 프로비저닝된 용량을 사용한 SQL 쿼리
업무 시간 중에 쿼리를 제출하고 예측 가능한 시간 내에 쿼리를 완료할 수 있는 셀프 서비스 분석을 제공하는 웹 애플리케이션이 있다고 가정해 보겠습니다. 지난 주 애플리케이션 사용자들은 총 만 개의 쿼리를 제출하여 500TB의 데이터를 스캔했습니다. 애플리케이션 지원 팀에서는 프로비저닝된 용량을 사용하여 사용자 수가 증가하더라도 일관된 사용자 경험을 유지하고자 합니다. 쿼리를 분석한 결과 96개의 DPU가 현재 워크로드에 충분하다고 판단됩니다.
- 영업일 기준으로 하루에 프로비저닝된 용량으로 이 워크로드를 지원하는 데 드는 비용은 96 DPU * DPU 시간당 0.30 USD * 하루 12시간 = 345.60 USD로 계산됩니다.
어느 날 아침, 새로운 애플리케이션 사용자 집합이 온보딩을 완료했다는 사실을 알게 됩니다. 그 결과 쿼리 볼륨은 전날보다 2배 더 많을 것으로 예상됩니다. 사용자에게 어제와 비슷한 성능을 제공하고 싶지만 모든 사용자가 동시에 쿼리를 제출하지는 않을 것으로 예상됩니다. 2시간 후 용량을 50% 늘려 144 DPU로 늘립니다.
- 오늘의 워크로드 비용은 2시간 동안의 96DPU에 10시간 동안의 144DPU를 더한 것과 같습니다. 또는 96DPU * 시간당 0.30 USD * 2시간 + 144DPU * DPU 시간당 0.30 USD * 10시간 = 489.60 USD입니다.
예제 3 - Apache Spark 애플리케이션
이전 분기에 대한 매출 수치를 가져오고 그래픽을 그려 보고서를 생성하기 위해 Athena 콘솔의 노트북 사용을 고려합니다. 노트북을 사용하여 세션을 시작합니다. 세션이 1시간 동안 진행되고 세션의 일환으로 6개의 계산 결과가 제출됩니다. 각 계산은 20개 1-DPU 워커 노드를 통해 1분 동안 실행 및 지속됩니다.
- 워커 DPU-시간 = 계산 수 * 계산당 사용된 DPU * 계산 실행 시간 = 6개의 계산 * 계산당 20개의 DPU * 계산당 (1/60) 시간 = 2.0 DPU-시간
- 드라이버 DPU-시간 = 세션당 사용된 DPU * 세션 시간 = 세션당 1 DPU * 세션당 1시간 = 1.0 DPU-시간
- 총 DPU-시간 = 워커 DPU-시간 + 드라이버 DPU-시간 = 2.0 DPU-시간 + 1.0 DPU-시간 = 3.0 DPU-시간
- Spark 애플리케이션 충전 = DPU-시간당 0.35 USD * 3.0 DPU-시간 = 1.05 USD
참고: S3는 실행 데이터와 결과를 보관하고 읽을 때 별도로 청구합니다.
추가적인 요금 리소스
AWS에서 월별 비용을 손쉽게 계산
AWS 전문가에게 맞춤 견적 받기