ある企業が、Amazon S3 への大量のオブジェクトアップロードを行っており、S3 PUT リクエストのコストが高額になっている。現在は 1KB 以下の小さいファイルを毎回個別に PUT しているが、同じプレフィックスのオブジェクトを後で Amazon Athena でクエリする際に大量の小さいファイルは効率が悪い。コストを削減しながらクエリ効率も向上させる最も適切なアーキテクチャはどれか。
- A. S3 Transfer Acceleration を有効化してアップロード速度を向上させる。
- B. S3 の PUT リクエスト数を削減するため、複数の小さいファイルを Amazon Kinesis Data Firehose でバッファリング(バッファサイズ 128MB または 5 分ごと)してから S3 に書き込む。配信時に Parquet 変換も適用する。
- C. 各ファイルを別々の S3 バケットにアップロードして管理を簡素化する。
- D. Amazon EFS にファイルを保存して後で一括で S3 に移動する。
解答と解説を見る
正解: B
Amazon Kinesis Data Firehose はデータをバッファリング(サイズベースまたは時間ベース)して S3 にまとめて書き込む機能を持つ。128MB のバッファを使うと 1KB のファイル 131,000 個を 1 回の S3 PUT で書き込めるため、PUT リクエスト数を劇的に削減できる。さらに Firehose のデータ変換(JSON→Parquet)を組み合わせると Athena でのクエリ効率も大幅に向上する。選択肢AのS3 Transfer Acceleration はアップロード速度を向上させるが PUT リクエスト数を削減しないため、コスト削減にはつながらない(むしろ Transfer Acceleration の料金が追加で発生する)。選択肢Cの S3 バケットの分割は小さいファイルの問題を解決せず、管理コストが増加する。選択肢DのEFS 中間保存は追加のストレージコスト・管理コストが発生し、PUT 問題の根本解決にならない。
📚 関連サービスの解説: Amazon S3 ・ Amazon Kinesis