[レポート] STG240: Amazon S3のコストを最適化するためのガイドラインと設計パターン #reinvent

2019.12.05

こんにちは、コンサル部の望月です。

S3 使ってますか? すべての AWS ユーザーが使っているといっては過言ではない S3 をコスト最適化するということは AWS ユーザーすべてにとって、有益な情報かと思います。

数ある S3 ストレージクラスをしっかり理解し、コスト削減を行っていきたいですね。

そこで本記事では AWS re:Invent 2019のセッション「STG240: Guidelines and design patterns for optimizing cost in Amazon S3」 のレポートをお送りします。

セッション概要

Effective cost optimization across Amazon S3 storage classes can require different approaches, depending on application latency and access patterns. In this session, we review key cost optimization guidelines for storing data in both synchronous and asynchronous storage classes. We also share design patterns for common Amazon S3 workloads to help you optimize for cost while meeting workload performance requirements.

スピーカー

  • Ruhi Dang
    • Senior Product Manager - Technical, Amazon Web Services
  • Erik Durand
    • Principal Product Manager, Amazon Web Services

まとめ

とてもまとまっていて素晴らしいセッションだったなーとレポートを書いていたら、大迫力なレポートになりました。

いきなりすべてのストレージクラスを利用するのも難しいかと思うので、徐々にストレージクラスの変更を取り入れ、最終的にすべてのストレージクラスを最適に利用することでコストの削減が実現できるかと思います。

私も『多くのコスト最適化ガイドラインと設計パターン』などを再度復習して、各ストレージクラスに最適なデータなどをしっかり抑えておきたいと思います。

レポート

Agenda

  • Amazon S3 概要
  • コスト最適化の柱
  • S3 ストレージクラスオプション
  • 多くのコスト最適化ガイドラインと設計パターン
  • お客様の例:Pinterest
  • まとめ

Amazon S3 概要

  • Amazon S3は、業界をリードするスケーラビリティ、可用性、セキュリティ、パフォーマンスを提供
    • 数百万のドライブに保存されたエクサバイト
    • 世界中に何兆ものオブジェクトを保存
    • 毎秒数百万のリクエストで定期的にピークに達する
    • 1つの地域で、1日で60 tbpsを超えるピークを処理する
    • リージョンごと、3 つ以上の AZ の 235 以上の分散マイクロサービス

コスト最適化の柱

  • アプリケーション要件
    • 冗長性
    • 可用性
    • アクセス頻度
    • 性能
    • オブジェクトサイズ
    • 期間
  • データ編成
    • オブジェクトタグとプレフィックスを使用してデータを整理する
      • 単一のバケットには、あらゆるストレージクラスに保存されたオブジェクトを含めることができる
        • アクセスの制御
        • 使用状況の分析
        • ライフサイクルポリシーの管理
        • オブジェクトの複製オブジェクトごとに最大 10 個の変更可能なメタデータタグ(キーと値のペア)
    • データ形式を決定する
      • 最適なデータ形式ではないが、コスト、パフォーマンス、サポートのトレードオフ
      • 構造化されていない形式 (CSV、TSV、JSON、XMLなど) で理解しやすく、処理しやすいが、効率が低い
      • Columnar 圧縮形式 (Parquet、ORC、Carbon Dataなど) は、低コストの固有圧縮を提供し、より効率的なスキャンとクエリ (自己記述型) を提供する
      • raw データを最適化された形式に変換し、raw データをアーカイブに圧縮しておく
  • 適切なサイジング
    • 最適なストレージクラスを選択する
    • Amazon S3 は 99.999999999% の耐久性のために設計されている
      • 22のリージョン
        • 地理的に離れた複数の物理的に分離されたアベイラビリティーゾーンを持つ地理的な場所
      • 69のアベイラビリティーゾーン
        • 3AZSに及ぶ複数のデバイスに保存されたオブジェクト。 AZが失われた場合、マルチAZストレージクラスは正常に機能する
      • 高耐久性
        • AZ 全体が失われた場合、同時にデバイス障害とデータを維持するように設計
  • 監視、分析、最適化、管理
    • Amazon S3 inventory、Amazon CloudWatch、S3 サーバーアクセスログで監視する
    • ストレージクラス分析でアクセスパターンを理解する
    • Batch Operations を使用して、数千、数百、または数十億のオブジェクトにわたってAPIアクションを実行する
    • ライフサイクルポリシーを使用してストレージを手動で階層化および期限切れにするか、S3 Intelligent-Tiering を使用して自動コスト最適化
  • AWSの価格設定の原則
    • 先行投資なし
    • 従量課金制アプローチ
    • より多くを使用することでより少ない支払い
    • AWS の成長に応じてより少ない料金で

S3 ストレージクラスオプション

  • 価格の引き下げと保管オプションの増加
    • ストレージ価格の低下
    • イノベーションの加速
  • Amazon S3 ストレージクラスの選択
    • S3 Standard
      • アクティブにアクセスするデータ
    • S3 Intelligent-Tiering
      • アクセスパターンが変化するデータ
    • S3 Standard-IA
      • アクセス頻度の低いデータ
    • S3 One Zone-IA
      • 再作成可能でアクセス頻度の低いデータ
    • S3 Glacier
      • アーカイブデータ
    • S3 Glacier Deep Archive
      • 長期アーカイブデータ
  • S3 INT は、コスト削減を自動化する世界で唯一のクラウドストレージクラス
    • アクセスパターンを変更してデータのストレージコストを自動的に最適化する
    • 頻繁なアクセスとまれなアクセス用に最適化されたオブジェクトを2つのアクセス層に保存する
    • アクセスパターンを監視し、詳細なオブジェクトレベルでコストを最適化
    • パフォーマンスへの影響なし、運用が楽、取得手数料なし
  • Amazon S3 Intelligent-Tiering の理想的なユースケース
    • Data Lakes
      • 複数のアプリケーションで使用されるアクセスパターンが変化するストレージ
    • Big Data Analytics
      • ストレージアクセスパターンがアプリケーションによって異なる予測不可能なワークロード
    • Long tail
      • ストレージ自体を最適化するためのリソースと経験の制約
  • S3 Glacier Deep Archive の低コストのクラウドストレージ
    • 管理するテープなし
    • 99.999999999%の耐久性を備えた設計
    • 数時間と数日/数週間でデータをリカバリー
    • GB月あたり 0.00099 ドル
      • S3 Glacierのコストの1/4未満
  • S3 Glacier Deep Archive の理想的なユースケース
    • コンプライアンスアーカイブ
      • 金融サービスやヘルスケアなどの多くの企業は、規制およびコンプライアンスのアーカイブを長期間保持する必要がある
    • データ保持
      • 予期しない将来のニーズに備えて、長期にわたって貴重なデータを保持する
    • DR
      • 重要なデータをセカンダリリージョンに複製することにより、災害復旧目標を達成
  • Amazon S3 コストを監視する
    • AWS Budgets を使用すると、コストまたは使用量が予算額を超えた (または超過すると予測される) ときに警告するカスタム予算を設定できる
    • Amazon CloudWatch を使用すると、毎日の S3 ストレージのメトリックスを監視し、リクエストアクティビティを細かく確認したり、リクエストカウントとデータ転送に関するアラームをリアルタイムで設定したりできる

多くのコスト最適化ガイドラインと設計パターン

  • データ保護および保持戦略
    • バックアップと復元
      • 偶発的な削除
      • 既存のバックアップメカニズム
      • バックアップデータの保持
    • データ保持
      • データ
      • アクセス時間
      • コンプライアンス
    • DR
      • 目標復旧
      • ポイント目標復旧時間
      • 地理的冗長性
  • バージョン管理戦略
    • アップロードするたびに新しいバージョンを作成します。以前のバージョンは保持され、上書きされない
    • バージョン ID なしで削除要求を行うと、オブジェクトへのアクセスは削除されますが、データは保持されない
    • ライフサイクルで以前のバージョンを管理。オブジェクトが現在のバージョンではなくなってから指定された日数後にオブジェクトを移行または期限切れにする
    • S3 Inventory を使用して複雑なクリーンアップワークフローを管理します (たとえば、以前のバージョンの固定数を保持)
  • レプリケーション戦略
    • Amazon S3 same-region replication (SRR)
    • Amazon S3 cross-region replication (CRR)
    • Amazon S3 replication with S3 object lock
    • Amazon S3 replication time control
  • ストレージへのアクセス方法を理解する
    • 頻繁なアクセス
      • 毎月取得されるストレージの 100% 以上
      • ストレージは頻繁にアクセスされ続ける
      • 例:
        • ビッグデータ分析
        • 動的なWebサイトホスティング
        • loTセンサーデータ
      • ストレージクラス:
        • S3 Standard
        • S3 INT
    • まれなアクセス
      • 1か月あたりに取得されるストレージは 100% 未満です
      • ストレージは時間とともに「クールオフ」します
      • 例:
        • データログ
        • 顧客生成コンテンツ
        • モバイル同期およびバックアップ
      • ストレージクラス:
        • S3 Standard + Lifecycle + S3 S-IA / Z-IA
        • S3 INT for automated cost savings
        • S3 Glacier/Glacier Deep Archive for archiving
    • アクセスを変更する
      • 変更または予測不可能なアクセスパターン。しばらくしてからデータが「ウォームアップ」される
      • 例:
        • データレイク
        • MLトレーニングデータ
        • 地理空間データ
      • ストレージクラス:
        • S3 INT for automated cost savings
  • S3 のビルディングブロックまたは S3 INT を使用してアクセスパターンを理解する
    • オプション1:S3のビルディングブロックを使用した最適化
      • ストレージクラス分析は頻繁またはまれにアクセスされるデータとして分類する
      • ライフサイクル管理と組み合わせて予測可能なワークロードに最適
      • バケット、プレフィックス、またはオブジェクトタグでフィルタリングできる
    • オプション2:S3 Intelligent-Tieringによる自動最適化
      • S3 Intelligent-Tieringは、2つのアクセス層にオブジェクトを保存
        • 頻繁なアクセスとまれなアクセス予測不能または未知のアクセスパターンに最適
      • Amazon CloudWatch はアクセス層ごとにバイトを表示し、S3 インベントリはアクセス層ごとにオブジェクトを表示する
  • ストレージを体系的に階層化、アーカイブ、および期限切れにするための S3 ライフサイクルポリシーの設定
    • S3 ストレージクラス分析を使用して、アクセス頻度の低いストレージ層を特定する
    • 低コストのストレージクラスと期限切れオブジェクトへの階層化のためのS3ライフサイクルポリシー。バケット、プレフィックス、またはオブジェクトタグによる分析の微調整
    • たとえば、180 日を超えるオブジェクトを S3 Glacier に移行し、365 日を超えるオブジェクトを S3 Glacier Deep Archive に移行する
    • S3 ライフサイクルポリシーを使用して、すべての不完全なマルチパートアップロードを自動的にキャンセルする
  • S3 Batch Operations で何十億ものオブジェクトを管理
    • オブジェクトを選択
      • S3 inventory report
      • CSV list
      • Use case:
        • S3 inventory report を作成し、Amazon Athena クエリを実行して 2MB を超えるオブジェクトを取得します
    • 操作を選択
      1. コピー
      2. S3 Glacier からリストアする
      3. アクセス制御リスト(ACL)を配置する
      4. オブジェクトタグセットを置き換え、Lambda functions を実行します
      • Use case:
        • S3 バッチ操作を実行して、2MB を超えるオブジェクトのオブジェクトタグセットを置き換え
    • 進行状況を表示
      • オブジェクトレベルの進捗状況
      • ジョブ通知、自動再試行
      • 完了レポート、監査
      • Use case:
        • タグ付きオブジェクトを S3 Standard から INT に移行する S3 ライフサイクルポリシーを作成する
  • データセットの特性を知る
    • 個々のオブジェクトのサイズは、最小 0 から最大 5TB の範囲で、オブジェクトパーツのサイズは最大 5GB
    • オブジェクトカウントとストレージのストレージバイト分布を理解する (最小/最大、平均、サイズビン別)
    • ストレージバイトの大部分が存在する場所で、必ずしもオブジェクト数が累積される場所ではないストレージコストを最適化する
  • パフォーマンス要件を理解する
    • 同期
      • 測定と反復
      • キースペースを設計し、水平方向にスケールする
      • stragglers の監視と再試行
    • 非同期
      • アクセスパターンを理解する
      • ピークリストアを計画する
      • オブジェクトサイズを最適化する
  • S3ストレージクラスのパワー
    • 業界をリードするパフォーマンス、スケーラビリティ、可用性、耐久性
    • 比類のないセキュリティ、コンプライアンス、および監査機能
    • 詳細なオブジェクトレベルでのコスト最適化
    • ワークロードに合ったストレージクラス
    • S3 Select、Athena、Amazon Redshift、Amazon EMR などの分析サービスのセット
    • すべてのs3ストレージクラスを利用して、ストレージコストとパフォーマンスを最適化する
  • データレイクに適したストレージクラスを選択する
    • Raw Data
    • ETL
    • Production Data Lake
    • Historical Data

お客様の例:Pinterest

  • AWSでの Clinical trial アプリケーション
  • 大規模なデータ保護と管理

まとめ

  • アプリケーション要件を理解する
  • タグとプレフィックスを使用してデータを整理する
  • すべてのストレージクラスでコストを最適化 (オブジェクト、タグ、プレフィックスごと)
  • S3 ビルディングブロックを使用して、ストレージを監視、分析、および管理する
  • S3 Intelligent-Tiering に保存して、自動化されたコスト削減を実現
  • 最低のストレージ価格で S3 Glacier Deep Archive にアーカイブ