これが最新のAmazon S3ベストプラクティスだ! #AWS-41 #AWSSummit
本記事は、AWS Summit Japan 2021のセッション動画、「AWS-41: 【基本の AWS サービス】進化した Amazon S3 を最大限に活用する」のレポート記事です。
Amazon S3は2006年のリリースから15年が経ちましたが、今でも頻繁にアップデートされるAWSの中核サービスです。AWSを利用している方はぜひチェックしておいてください!
概要
アプリケーション・パフォーマンスとストレージ・コストの最適化には、アプリケーションのレイテンシーとアクセス・パターンに応じて異なるアプローチが必要です。このセッションでは、アクセスパターンとパフォーマンスニーズに基づいて、Amazon S3 ストレージクラスにデータを格納する際の主要な考慮事項について説明します。Amazon S3 を最大限に活用して、コストを最適化し、パフォーマンスを向上させ、データを大規模に管理する方法について説明します。
- 本セッションの対象者
- Amazon S3を現在使っているが、コストや最適化に課題を感じられる方
- AWSを使い始めている利用者ではあるが、まだS3を使いこなしているとは感じていない方
- AWSをよく提案し、EC2/EBS/RDS/VPCといった基盤は構築しているが、S3は有効な提案ができていないと感じている方
スピーカー
- 焼尾 徹 氏
- アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 テクニカルソリューション部 ソリューションアーキテクト
内容
- Amazon S3の立ち位置とユースケース
- Amazon S3におけるパフォーマンスとコスト最適化のポイント
- ケーススタディ: ソーシャルメディアのデータレイクにおけるAmazon S3パフォーマンスとコストの最適化
- まとめ
Amazon S3の立ち位置とユースケース
- Amazon S3とは?
- データレイク、IoT、モバイル、機械学習など、様々な利用シーンで使えるオブジェクトストレージ
- エクサバイトのストレージと兆単位のオブジェクト
- 毎秒数百万のリクエストを処理
- オブジェクトの性質やビジネス要件に合わせたストレージクラス
アップデートを重ねたことで、Amazon S3のユースケースも変化しています。データ分析とアプリケーション開発が強調されるようになりましたね。
Amazon S3におけるパフォーマンスとコスト最適化のポイント
- アプリケーション要件の整理
- データ配置の設計
- ストレージ状況把握、分析、最適化
- 継続的なサイジング
アプリケーション要件の整理
アプリケーション要件の整理のために、6つの観点があげられています。
- 冗長性
- どのような耐久性と冗⻑性が必要ですか?
- 可用性
- お客様のユースケースに適している可用性はどれですか?
- アクセスパターン
- ストレージにアクセスする頻度はどれくらいですか?
- パフォーマンス
- 必要なパフォーマンスはどれくらいですか? → ミリ秒のレイテンシ or 数分 or 数時間
- オブジェクトサイズ
- オブジェクトのサイズはどれくらいですか?
- 保持期間 1, S3に格納する期間はどれくらいですか?
データ配置の設計
- Amazon S3でデータ配置を決定するレイヤー
- Bucket
- 例) 部門単位でバケットを分類
- Prefix
- 例) ファイルの種類ごとに分類
- Object Tag
- 例) ファイルの属性情報を付与
- Bucket
ストレージ状況把握、分析、最適化
- アクセスパターンを理解する
- Amazon S3ストレージクラス分析
- コスト・データ量・アクセスパターンを分析する
- Amazon S3 Inventory
- Amazon CloudWatch
- AWS Budgets
- Amazon S3サーバーアクセスロギング
- ストレージを最適化して、使用状況、アクティビティ、推奨事項をアカウント間で可視化します
- S3 Storage Lens
割と新しめの機能、S3 Storage Lensに焦点を当てていきます。
- S3 Storage Lensとは?
- 17のUsage metrics、14のactivity metricsをグラフで可視化
- どのようなデータがどのようなバケットに配置されているか?が把握できる
- 集約レベル(=集計の軸)
- 組織、アカウント、リージョン、ストレージクラス、バケット、プレフィックスで整理可能
- 毎日更新、前日まで状態を可視化
- データ保持期間
- 無料版: 標準のメトリクスで14日
- 有料版: 高度なメトリクスと推奨事項(Advanced metrics and recommendations)にて最大15ヶ月
- Amazon S3コンソール内でのインタラクティブなダッシュボードを用意
- Amazon S3バケットへの出力も可能
- メトリクスに基づいた推奨事項でベストプラクティスへ誘導
継続的なサイジング
ストレージクラスは現在7種類あります。
- ストレージコストを最適化するための継続的なクラス選択
- 予測可能なアクセスパターンか?
- アプリケーション要件の整理
- S3 Storage Lensなどでストレージ状況の把握
- Yes → S3ストレージクラスとライフサイクルの適用
- No → S3 Intelligent-Tieringの適用
- 予測可能なアクセスパターンか?
- ライフサイクルポリシーによる階層化と期限切れ
- S3ストレージクラス分析を使用して、アクセス頻度の低いファイル群を特定する
- S3ライフサイクルポリシーを使用して、低コストのストレージクラスへの階層化や期限切れを行う
- バケット、プレフィックス、オブジェクトタグごとに分析を微調整する
- 例) 作成後180日経過したオブジェクトをS3 Glacierに移行し、365日経過したオブジェクトをS3 Glacier Deep Archiveに移動する
- S3 Intelligent-Tiering
- オブジェクトを4つのアクセス階層間で自動で移動
- アクセス頻度の高いオブジェクトと低いオブジェクトに適用できる2つの低レイテンシーアクセス層
- 数分と数時間でアクセスできるように設計された2つの新しいアーカイブ・アクセス層(新機能)
- 詳細なオブジェクト・レベルでコストを監視および最適化
- 月間監視と自動化の部分での課金
- ライフサイクル料金や取り出し料金はなし
- 99.9%の可用性と99.999999999%の耐久性を備えた設計
- アクセスパターンが流動的で、予測が難しい場合に最適
- オブジェクトを4つのアクセス階層間で自動で移動
Amazon S3のパフォーマンス
- Amazon S3は大規模な分散システム
- 複数のリージョン、複数AZ、複数のサーバーラックやロードバランサー
- アプリケーション側からは水平のスケーリングを意識してS3を利用するのが、パフォーマンス最大化の鍵
- 処理を多重化する
- 処理するコンピュートリソースを分ける
- 入力と出力を分ける
- オブジェクトサイズとリクエスト料金の関係
- 同じデータ量にリクエストする場合、多数の小さなオブジェクトよりも、少数の大きなオブジェクトの方がリクエスト料金的には有利
- コスト抑制の工夫
- Kinesis Data Firehoseなどで、S3に取り込む際にデータをまとめる
- EC2やEMRなどで、すでにS3に配置しているデータを束ねる
- レイテンシとリクエストサイズの関係
- オブジェクトが大きいほどレイテンシに影響する
- レイテンシ削減・スループット向上の工夫
- 大きなオブジェクトで試験した性能で要件を満たすか?ネットワークにボトルネックはないか?を確認する
- マルチパートアップロードを使用して、大きなオブジェクトを並列アップロード
- Byte-Rangeフェッチを使用して、大きなオブジェクトを並列ダウンロード
- → アプリケーションに最適なオブジェクトとリクエストサイズを割り出す
- オブジェクトキーを名前空間全体に分散
- リクエストを捌ける数は、Prefix単位で計算される
- 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD per second per prefix
- Prefixの数に制限はないため、オブジェクトに対するPrefixの数を増やし、負荷を分散させることが重要
- リクエストを捌ける数は、Prefix単位で計算される
ケーススタディ: ソーシャルメディアのデータレイクにおけるAmazon S3パフォーマンスとコストの最適化
- 毎日数千万から数億ものイベントを処理するソーシャルメディアプラットフォーム
- 毎秒数十万のイベントでピークに達する
- ペタバイトに近い容量ものデータを保存する
- このS3データレイクにおいてデータパイプラインの設計し、全ての段階でコスト最適化を目指す
- 生データ
- 加工処理(ETL)
- データレイク・本番環境
- 履歴データ
- 生データとETL
- 細かいデータを取り込む際にできるだけまとめる
- キーの名前空間をPrefixで分散させる
- S3標準クラス or S3 Intelligent-Tiering
- データレイク本番環境
- S3 Intelligent-Tiering による自動的なコスト最適化
- 大きなファイルの処理について、マルチパートアップロード or Byte-Rangeフェッチを活用
- 履歴データ
- S3 Glacierストレージクラスの活用
- S3 Intelligent-Tieringを利用しarchive-access tierを有効化
- リストアのパフォーマンスはニーズに応じて検討
- → 自由な変更がしやすいようバケットは目的別に分ける
まとめ
- アプリケーション要件の整理
- バケット、プレフィックス、オブジェクトタグを活用しデータ配置の整理
- しっかりとモニタリングして状況を把握する(S3 Storage Lensが便利)
- 最適なコストで利用すべく適切なストレージクラスを選択する
- パフォーマンスを最大化するために水平方向のスケーリングを意識する
- ワークロードのすべての段階でコストとパフォーマンスを最適化する
- 参考資料