SAA-046
S3に蓄積された数TBのアクセスログに対し、月に数回だけアドホックなSQL分析を実行したいです。分析基盤の常時稼働コストとインフラ管理を避けたい場合、最も適したサービスはどれですか?
選択肢
解説と正解
解説と正解を読む(先に自分で回答してから開くのがおすすめです)
正解:B. Amazon Athenaで、S3上のデータに対して直接SQLクエリを実行する
解説
Amazon AthenaはS3上のデータへ直接SQLを実行できるサーバーレスのクエリサービスで、スキャンしたデータ量に対してのみ課金されます。クラスターの構築も常時稼働も不要なため、実行頻度の低いアドホック分析に最も適しています。
選択肢ごとの解説
A. Amazon RDS for PostgreSQLインスタンスにログを取り込み、SQLで集計する
RDSは常時稼働のインスタンス課金であり、数TBのログを取り込む処理と保存領域の確保も必要です。アドホックな分析用途には向きません。
B. Amazon Athenaで、S3上のデータに対して直接SQLクエリを実行する
正解です。テーブル定義をGlueデータカタログに登録すれば、データをS3に置いたまま即座にクエリできます。
C. Amazon Redshiftのプロビジョンドクラスターを作成し、ログをロードしてクエリする
Redshiftのプロビジョンドクラスターは起動している間ずっと課金されます。ログのロード作業も必要で、月数回の利用に対しては過剰な構成です。
D. Amazon EMRクラスターを起動し、Spark SQLで集計する
EMRクラスターは必要なときだけ起動する運用も可能ですが、クラスターの構成管理やジョブの実装が必要で、SQL分析だけが目的なら運用負荷が過大です。
実務での使いどころ
Amazon Athena は、S3 に置かれたデータへ標準 SQL を直接実行できるサーバーレスのクエリサービスである。データを別のデータベースへロードする必要がなく、テーブルのスキーマを AWS Glue データカタログに登録するだけでクエリできる。CSV、JSON、ORC、Parquet、Avro といった形式に対応し、CloudTrail ログ、VPC フローログ、ALB アクセスログ、CloudFront ログといった AWS が出力するログの分析用途で広く使われる。課金はクエリがスキャンしたデータ量に対する従量制で、クラスターの起動時間に対する課金は発生しない。 コストと性能を左右するのは「スキャン量をいかに減らすか」である。データを Parquet や ORC といった列指向フォーマットへ変換すると、必要な列だけを読むため CSV や JSON に比べてスキャン量が大幅に減る。加えて、S3 のキー設計を年 / 月 / 日などで区切ってパーティション化し、WHERE 句でパーティション列を指定すれば、対象外のファイルを読まずに済む。データ量が増えてきたら圧縮(Snappy / GZIP)も併用する。分析基盤の選択肢としては、繰り返し実行する定型のダッシュボードやサブ秒応答が求められる BI 用途なら Amazon Redshift、大規模な ETL や機械学習の前処理なら Amazon EMR や AWS Glue、という棲み分けになる。 SAA-C03 では「S3 上のデータをそのまま SQL で分析したい」「サーバーレスで始めたい」「アドホックな分析」「クエリした分だけ課金」というキーワードが出たら Athena が正解になる。誤答には Redshift クラスター(常時稼働のコスト)、RDS へのロード(取り込み負荷)、EMR クラスター(運用負荷)が並ぶ。逆に「日常的に大量の集計を高速に行う」「多数のユーザーが同時にダッシュボードを見る」という条件なら Redshift が正解になるという読み分けも押さえておきたい。