mnagaaのメモ

技術的なことはこのブログで書きます

Amazon S3ストレージ最適化方法

aws.amazon.com

dev.classmethod.jp

要約

アプリケーションが生成するログファイルは時間とともに増加し、その多くが128KB未満の小さなファイルです。これらの小さなファイルをAmazon S3に大量に保存すると、特にS3 Standard-Infrequent AccessやS3 Glacier Instant Retrievalなどのストレージクラスでは、最小課金サイズが128KBであるため、実際のデータサイズよりも高いストレージコストが発生します。また、多数の小さなファイルをこれらのストレージクラスに移行すると、オブジェクトごとのライフサイクル移行料金がかかり、コストが増加します。

解決策としてのコンパクション

この問題を解決するために、AWS Step Functionsを使用して多数の小さなファイルをより大きなオブジェクトにまとめる「コンパクション」のパターンが紹介されています。コンパクションは、ファイルの形式や構造を変更せずに複数のファイルを結合する方法であり、以下の利点があります。

  • ストレージコストの削減: 小さなファイルを大きなオブジェクトにまとめることで、128KBの最小課金サイズの影響を軽減し、ストレージコストを最適化できます。
  • クエリパフォーマンスの向上: Amazon Athenaなどでクエリを実行する際、大きなファイルの方がI/Oオーバーヘッドが少なく、クエリの実行速度が向上します。

コンパクションとアーカイブの比較:

  • コンパクション:
    • データの分析価値を保持し、クエリパフォーマンスを向上させます。
    • データをそのままの形式で結合するため、既存のクエリや分析ツールに影響を与えません。
    • 主に頻繁にアクセスまたは分析が必要なデータに適しています。
  • アーカイブ:
    • 長期保存が目的で、クエリ頻度が低いデータに適しています。
    • データを圧縮して保存するため、さらなるコスト削減が可能ですが、クエリの前に解凍が必要です。

実装方法:

  • AWS LambdaとAWS Step Functionsの活用:
    • AWS Lambda関数を使用して、小さなファイルを読み込み、より大きなファイルに結合します。
    • AWS Step Functionsの分散マップ機能を使用して、複数のプレフィックスに対して並行してコンパクションを実行します。
    • この方法により、大量の小さなファイルを効率的かつ迅速に処理できます。

パフォーマンスとコストのメリット:

  • ストレージコストの削減:
    • 小さなファイルをコンパクト化することで、S3 Standard-IAやS3 Glacierなどの低コストのストレージクラスに移行しても、不要なコスト増加を防げます。
    • コンパクション後の大きなオブジェクトに対してライフサイクルポリシーを適用し、古いデータを自動的に管理できます。
  • Amazon Athenaでのクエリパフォーマンスの向上:
    • コンパクションにより、クエリ実行時間が最大66%短縮されるケースが報告されています。
    • 大きなファイルはI/Oオーバーヘッドが少なく、Athenaのデータスキャン効率が向上します。
    • データのパーティショニングを適切に行うことで、さらなるパフォーマンス最適化が可能です。

結論:

小さなオブジェクトをコンパクト化することで、Amazon S3のストレージコストを最適化し、Amazon Athenaでのクエリパフォーマンスを向上させることができます。AWS LambdaとAWS Step Functionsを活用したサーバーレスソリューションにより、運用負荷を最小限に抑えつつ、大規模なデータ処理を効率的に実行できます。