メインコンテンツに移動
コミュニティ通信

Amazon Athena から見た Amazon S3 Standard、Amazon S3 Express One Zone の比較

2025-06-03 | Author : 織田 繁 (AWS Community Hero)

はじめに

こんにちは、AWS Community Hero の織田繁です。

Amazon Simple Storage Service (Amazon S3) は、クラウドオブジェクトストレージの中でも最も広く利用されているサービスの一つです。クラウドオブジェクトストレージとは、インターネットを通じてデータを保存・管理できるサービスのことで、物理的なハードディスクや USB メモリを使わずにデータを安全に保管できます。みなさんも各種ログを Amazon S3 に格納して、Amazon Athena、Amazon OpenSearch Service などの分析サービスを使ってログ分析を実施していると思います。

今回は Athena からログ検索をする場合に、Amazon S3 Standard、S3 Express One Zone のどちらを利用すれば、性能・コストとして良いパフォーマンスを得られるのかを知るために行った調査結果となります。

  • Amazon S3 Standard : 高い耐久性と可用性を有する汎用的なストレージクラス。
  • Amazon S3 Express One Zone : 単一アベイラビリティーゾーン内で低レイテンシーかつ低コストに最適化されたストレージクラス。
各ストレージクラスにファイルを複数のパターンで配置して、Athena からクエリを実行します。

X ポスト » | Facebook シェア » | はてブ »

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

準備

検索用データ

Athena で検索するデータは API のログとしています。 以下のような 1 レコードあたり 500 バイト未満のログに対して検索を行う場合を想定しています。

xml
{
  "request_id": "308b5a32-87bc-4d5b-9735-7e9b4eaa41ae",
  "source_ip": "10.0.2.187",
  "user_id": "anonymous",
  "method": "GET",
  "path": "/health",
  "query_params": "",
  "status_code": 200,
  "status_message": "",
  "response_time_ms": 0,
  "ecs_cluster": "buildersflash-cluster",
  "ecs_service": "api-service",
  "ecs_task_id": "f50024c402714ace9bf8893064fa05ec"
}

システム構成図と資材

環境構築するための資材は github に格納していますので、是非とも自分の環境で試して頂けますと幸いです。

Amazon ECS 上で構築された API のログを Amazon Data Firehose 経由で Amazon S3 Standard に連携しています。Amazon S3 Express One Zone には AWS マネジメントコンソールから Import 機能を用いて、取り込みを行っています。

構成図

検証で利用した件数やサイズ

上記構成図で作成された API ログを各 Amazon S3 バケット に格納しています。検証で利用した件数やサイズは以下の通りです。

参考: Amazon Elastic Compute Cloud (EC2) に S3 COPY する際の性能

Athena でクエリを実施する前に、単純に Amazon S3 からAmazon Elastic Compute Cloud (Amazon EC2) に Copy した場合の性能を計測します。Athena と Amazon EC2 で同じ傾向の性能が期待できるのかを確認します。

AWS Common Runtime を有効化することでの性能差も確認します。AWS Common Runtime (CRT) は、高性能な HTTP クライアントとしての機能や暗号化ライブラリを提供し、AWS サービスへとアクセスする際の SDK 共通ライブラリとして用いることができます。Amazon S3 に対する AWS CRT は、自動マルチパートアップロードによるリクエストの並列化、DNS ロードバランシング、コネクションプールによる接続の再利用といったパフォーマンスやリソース利用効率を最適化できる機能と、タイムアウトや自動リトライなどの信頼性を向上できる機能を含んでいます。

cmd

CRT 無効の場合

bash
aws configure set default.s3.preferred_transfer_client classic
aws configure get default.s3.preferred_transfer_client
time aws s3 cp s3://<S3 Standardで JSON+GZIP 圧縮> ./download/json --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Standardで Parquet> ./download/Parquet --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Express One Zone で JSON+GZIP 圧縮>  ./download/json_express --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Express One Zone で Parquet> ./download/Parquet_express --recursive --no-progress &>/dev/null

CRT 有効の場合

bash
aws configure set default.s3.preferred_transfer_client crt
aws configure get default.s3.preferred_transfer_client
time aws s3 cp s3://<S3 Standardで JSON+GZIP 圧縮> ./download/json --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Standardで Parquet> ./download/Parquet --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Express One Zone で JSON+GZIP 圧縮>  ./download/json_express --recursive --no-progress &>/dev/null
time aws s3 cp s3://<S3 Express One Zone で Parquet> ./download/Parquet_express --recursive --no-progress &>/dev/null

結果

Amazon EC2 は m7g.xlarge を利用しています。

クエリ検証における調査方針

同じクエリを Amazon Athena から 5 回実行し、実行時間とスキャンしたデータの平均値を取得し、評価します

  • 実行時間 : クエリがワーカー上で実際に処理されて結果が返るまでに要した時間。
  • スキャンしたデータ : クエリ実行中に読み取られたデータ量。
クエリコストについては、同じクエリを 1 万回実行した場合の Amazon Athena SQL クエリ と Amazon S3 リクエストとデータ取り出し のコストで評価します。

Amazon Athena SQL クエリ と Amazon S3 リクエストとデータ取り出し のコスト

クエリ検証

該当の Amazon S3 全体にアクセスする SELECT

sql
SELECT \* FROM 各種 S3 テーブル;

結果

day=05 全体の SQL

sql
SELECT \* FROM 各種 S3 テーブル WHERE year='2025' and month='05' and day='05';

結果

day=06 全体の SQL

sql
SELECT \* FROM 各種 S3 テーブル WHERE year='2025' and month='05' and day='06';

結果

該当 の Amazon S3 かつ PATH 毎の件数

sql
SELECT PATH, count(PATH) FROM 各種 S3 テーブル GROUP BY PATH;

結果

day=05 かつ PATH 毎の件数

sql
SELECT PATH, count(PATH) FROM 各種 S3 テーブル WHERE year='2025' and month='05' and day='05' GROUP BY PATH;

結果

day=06 かつ PATH 毎の件数

sql
SELECT PATH, count(PATH) FROM 各種 S3 テーブル WHERE year='2025' and month='05' and day='06' GROUP BY PATH;

結果

保存コストの調査方針

ここまでの検証では 2 日分のデータを対象としていました、このまま増加し、1 年間分のデータを保存した場合のコストを算出します。

保存コスト

評価

Amazon EC2 を用いた検証では、AWS CRT を利用しない場合、Amazon S3 Express One Zone ストレージクラスを利用した結果は、Amazon S3 Standard クラスを利用した結果と比べ、実行時間が 20–30 % 程度短縮しました。一方で、AWS CRT を用いた場合、両者の実行時間は同程度でした。

Amazon S3 Express One Zone はデータを単一のアベイラビリティーゾーンに保存するため、可用性は 99.9% (SLA)、耐久性も同様に単一ゾーンでの設計となり、Amazon S3 Standard の 99.99% の可用性と比べて潜在的なリスクが高くなりますが、数日分のみ頻繁にアクセスされるような要件である場合には Amazon S3 Express One Zone にデータを利用するのは、コスト効率に繋がると考えます。

筆者プロフィール

織田 繁
AWS Community Hero | JAWS-UG 初心者支部

AWS Summit Tokyo 2019 で開催された Community Event に感銘を受けて、JAWS-UG 初心者支部に携わる。

Twitter : @OutputSeq
GitHub : @shigeru-oda
zenn.dev : @shigeru_oda

Missing alt text value