S3ストレージクラスの選択に迷った時に見るフローチャートを作ってみた(2022年8月版)

たくさんあるS3のストレージクラスからどれを選んだら良いか迷ったそこのあなた。そんな時に役に立つフローチャートを作りました。
2022.08.03

みなさん、こんにちは。

AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

みなさんは、S3のストレージクラスをどのように選ばれていますか?

本エントリでは、S3ストレージクラスの選択に迷った時にみて参考にできるフローチャートを作成してみました。

きっかけ

私はS3設計の際、基本的に毎回すべて忘れているので、設計の都度公式ドキュメントと睨めっこしながら各ストレージクラスの仕様を確認して設計します。

公式ドキュメントとの対面が辛くなった時は、以下のブログをよく読みます。

こちらのブログでは簡潔にポイントが抑えられたフロー図が掲載されており、大変参考になります。

ですが、このブログの後にS3の新しいストレージクラスであるGlacier Instant Retrievalがリリースされたこともあり、最新の情報でS3ストレージクラスを設計したい場合は、やはり公式ドキュメントを眺める必要があります。

ということで改めて新しいものを作ってしまおう!と思い、今回「2022年8月版」のフローチャートを作ってみました。

前置きはここまでです。

S3ストレージ選択のフローチャート

今回作成したフローチャートはこちらです。

フローチャートだけ見たかったんだ、という読者の方はここまで見てくださってありがとうございました。

ここからはこのフローチャートの設計思想やポイントについて解説します。以降もお付き合いいただける皆様は、引き続きよろしくお願いいたします。

フローチャート解説

長くなりそうなので一番初めにまとめを置いておきます。

いきなりまとめ

  • S3ストレージクラスは全部で9つある
    • フローチャートではその中の6つにルーティング
  • S3ストレージクラスの設計のポイントは以下
    • S3オブジェクトへのアクセス頻度
      • アクセス頻度がわからない場合Standardに保存しましょう
      • アクセス頻度がわかる場合は次の選択肢へ
    • S3オブジェクトのサイズ
      • S3 Standard - IAS3 Glacier Flexible Retrievalでは最小オブジェクトサイズ(128KB)が設定されている
      • オブジェクト数が膨大でない場合は、利用費への影響は少ないため無視してもOK
    • S3オブジェクトのマルチAZ可用性
      • 基本的にはマルチAZ可用性は必要なので、S3 Standard - IAを選択すべき。
      • コスト削減がマルチAZ可用性よりも重要な場合は、利用費が20%安価なS3 1 ゾーン - IAが選択可能
    • S3オブジェクトの取り出しに許容できる時間
      • 許容できる取り出し時間からS3 Glacier Flexible Retrieval or S3 Glacier Deep Archiveのどちらかを選択
      • ミリ秒単位のアクセスが必要な場合はS3 Glacier Instant Retrievalを選択

まずは、各ストレージクラスについておさらいしましょう。

S3ストレージクラスについて

2022年7月20日現在利用できるS3のストレージクラス一覧がこちらです。

  • S3 Standard
  • S3 Standard - IA
  • S3 1 ゾーン - IA
  • S3 Glacier Instant Retrieval
  • S3 Glacier Flexible Retrieval
  • S3 Glacier Deep Archive
  • S3 Intelligent-Tiering
  • RRS
  • S3 on Outposts

今回作成したフローチャートに登場するストレージクラスは太字で表したクラスです。

それぞれ概要を解説していきます。

  • S3 Standard
    • デフォルトのストレージクラス
    • ミリ秒アクセスが必要で、月に 2 回以上の頻繁なアクセスがあるデータが対象
  • S3 Standard - IA
    • アクセス頻度が低いオブジェクトのためのストレージクラス
    • ミリ秒アクセスが必要で、月に1回程度のアクセス頻度が低いデータが対象
  • S3 1 ゾーン - IA
    • アクセス頻度が低いオブジェクトのためのストレージクラス
    • ミリ秒アクセスが必要で、月に1回程度のアクセス頻度が低い、再作成が可能なデータが対象
  • S3 Glacier Instant Retrieval
    • オブジェクトアーカイブに適したストレージクラス
    • ミリ秒アクセスが必要で、四半期に1回アクセスされるアーカイブデータが対象
  • S3 Glacier Flexible Retrieval
    • オブジェクトアーカイブに適したストレージクラス
    • アクセスに数分から数時間かかっても問題ない、年に1回アクセスされるアーカイブデータが対象
  • S3 Glacier Deep Archive
    • オブジェクトアーカイブに適したストレージクラス
    • アクセスに数時間かかっても問題ない、年に1回もアクセスされないアーカイブデータが対象

その他のストレージクラスはフローチャートから除外しました。

ストレージクラスの特徴および除外した理由は以下です。

  • S3 Intelligent-Tiering
    • オブジェクトのアクセス頻度によってオブジェクトのストレージクラスの階層を自動で変更させるストレージクラス
    • その他のストレージクラスと性質が異なり、設計時の考え方もまた別だと考えたので、除外した
  • RRS
    • S3 Starndardより耐久性・可用性は劣るがコストを落としたストレージクラス
    • 現在は旧世代のストレージクラスとして、AWSが非推奨としているため除外
  • S3 on Outposts
    • Outpostsにデータを保存する場合に使用されるストレージクラス
    • Outpostsを使う場合のみに使用されるストレージクラスであるため除外

ストレージクラス選定の際に意識すること

この4点です。

  • S3オブジェクトへのアクセス頻度
  • S3オブジェクトのサイズ
  • S3オブジェクトのマルチAZ可用性
  • S3オブジェクトの取り出しに許容できる時間

それぞれ解説していきます。

S3オブジェクトへのアクセス頻度

フローチャートの一番初めのチェックポイントである、「オブジェクトへのアクセス頻度はどの程度か?」の箇所に関する項目です。

S3では、オブジェクトに対しGET,PUT,LISTのようなAPIリクエストや、アーカイブオブジェクトに対するデータの取り出しアクションなどオブジェクトに対するアクセスを行う際にアクセス料金が発生します。

S3は、ストレージ料金が安価なストレージクラスほどオブジェクトへのアクセス料金が高い傾向があるため、事前にアクセス頻度を確認する必要があります。(参考:料金 - Amazon S3 |AWS

アクセス頻度が事前にわからない場合は一旦S3 Standardに保存し、S3 Storage Lenzという機能を有効化した状態でしばらく運用することをおすすめします。

S3 Storage Lenzを有効化すると、AWSマネジメントコンソールからS3の利用状況を確認できるダッシュボードが利用可能になります。

アクセス頻度を確認するために、高度なメトリクスオプションをオプトインする必要はありますが、月の監視対象 100万 オブジェクトあたり$0.20と安価に利用できるため、オプトインを検討する価値はあると思います。


また、ストレージタイプによりますが最小ストレージ期間という保存期間の下限が設定されているものがあります。

S3 Standard - IAであれば30日、S3 Glacier Instant Retrievalであれば90日が設定されています。

オブジェクトがS3に保存されてから最小ストレージ期間が経過する前に削除された場合、残りの日数分のストレージ料金に等しい日割りの料金が追加で発生します。つまり、最小ストレージ期間の間オブジェクトを保存した場合と同じ料金が発生します。

フローチャートでは最小ストレージ期間に関するチェックポイントを別で用意しておりませんが、チェックポイントのアクセス頻度の日数(1ヶ月、3ヶ月、1年)と振り分けられるストレージクラスの最小ストレージ期間は等しい or 最小ストレージ期間の方が短いので、このアクセス頻度に関するチェックポイントが最小ストレージ期間のチェックを兼ねています。1

S3オブジェクトのサイズ

フローチャートでは二番目のチェックポイントである、「(すべてのオブジェクトサイズが128KB以上である)」の箇所に関する項目です。

※フローチャートにある通りですがこのチェックポイントでは分岐は発生しません、と前置きしておきます。理由は後述します。

ストレージタイプによりますが、保存するオブジェクトの最小サイズが定義されているタイプがあります。

S3 Standard - IAやS3 Glacier Flexible Retrievalであれば128KBが設定されています。

最小オブジェクトサイズが設定されているストレージタイプで、そのサイズに満たないオブジェクトであっても最小オブジェクトサイズの128KBで料金が計算されます。

チェックポイントとしていますが、分岐がなく点線の括弧書きで表している理由は、すべてのオブジェクトが128KB以上でなくとも利用費に大きな影響はないと考えたからです。

最小オブジェクトサイズに大きく達しない数Byte単位の細かいオブジェクトを大量に保存する」ような特別なユースケースでなければ、利用費に影響することはあまりないでしょう。ですが、このポイントをご認識いただくことは重要だろうと感じてフローチャートのチェックポイントとして設定しました。


余談ですが、こちらのS3公式ドキュメントではS3 Glacier Flexible Retrieval、S3 Glacier Deep Archiveにて最小オブジェクトサイズが40KBとの記載があり、S3料金ページではアーカイブ保存用のメタデータの付与によりオブジェクトに40KBが追加されるとの記載がありました。

0Byteのオブジェクトであっても40KBが追加されるため、事実上の最小オブジェクトサイズが40KBであるようです。S3 Standard - IAなどの最小オブジェクトサイズとは少し異なる仕様であることをご認識ください。

S3オブジェクトのマルチAZ可用性

つづいて、「オブジェクトのマルチAZ可用性は必要か?」の分岐箇所に関するチェックポイントです。

まず、S3の可用性について簡単に説明します。

S3(ここではS3 Standard クラスとします)は、物理的に離れている少なくとも3つのAvailability Zone(AZ)にデータを格納し、各AZは最大8つのデータセンターで構成されています。そのため、事故や地理的災害によってAZ内のデータセンター1つや1つのAZすべてが使用不可能になっても、S3としての可用性に影響はありません。

このようにAZ単位での障害に高い耐障害性を持っており、S3 Standardは99.999999999% (イレブンナイン) の耐久性と、99.99% に及ぶ可用性を誇ります。


S3 Standard - IAについてですが、S3 Standardと同様の耐久性、可用性となっております。

対して、S3 1ゾーン - IAは、オブジェクトが1つのAZにのみ保存されるためAZ単位での耐障害性を持っておりません。耐久性はS3 Standardと同様の99.999999999% (イレブンナイン)ですが、AZ単位での耐障害性がないことから、可用性が99.5%と少し劣っています。

可用性が劣る代わりに、ストレージ料金がS3 Standard - IAと比較して20%安価なため、よりコストを抑えることが可能です。可用性よりもコストを優先すべき時に選択するストレージクラスになります。


以下ここまでの説明をまとめた表です。

ストレージクラス 耐久性 可用性
S3 Standard - IA 99.999999999% 99.99%
S3 1ゾーン - IA 99.999999999% 99.5%

大半のユースケースでは、高い可用性が提供されるS3 Standard - IAを選択することになると思いますが、可用性よりもコストを優先したい場合にS3 1ゾーン - IAを選択しましょう。

S3オブジェクトの取り出しに許容できる時間

つづいて、「オブジェクトの取り出しに許容できる時間は?」の分岐箇所に関するチェックポイントです。

基本的にユーザーはS3オブジェクトに対しミリ秒単位でアクセスできますが、ストレージクラスによってはオブジェクトにアクセスする前に「オブジェクトの復元(取り出し)」を行う必要がありミリ秒単位でのアクセスが提供されていない場合があります。

アクセス時に「オブジェクトの復元(取り出し)」が必要なストレージクラスが以下の2つのストレージクラスです。

  • S3 Glacier Flexible Retrieval
  • S3 Glacier Deep Archive

ミリ秒単位のアクセスはこれらのストレージクラスでは提供されていないため、S3 Glacier Instant Retrievalを選択することになります。


S3のオブジェクトの取り出し時は、以下の3つのオプションが指定できます。

上の方のオプションであれば取り出し時間がより短くなります。

  • Expedited(迅速)
  • Standard
  • Bulk(大容量)

S3 Glacier Flexible Retrieval、S3 Glacier Deep Archiveでそれぞれのオプションと取り出し時間をまとめた表が以下です。

ストレージクラス Expedited(迅速) Standard Bulk(大容量)
S3 Glacier Flexible Retrieval 1~5 分 3~5 時間 5~12 時間
S3 Glacier Deep Archive 利用不可 12 時間以内 48 時間以内

また、オブジェクトの取り出し時には以下の2つの利用料金が別途課金されることも認識しておきましょう。

  • 取り出しリクエスト料金(1000リクエスト単位)
  • 取り出し料金(GB単位)

まとめ

  • S3ストレージクラスは全部で9つある
    • フローチャートではその中の6つにルーティング
  • S3ストレージクラスの設計のポイントは以下
    • S3オブジェクトへのアクセス頻度
      • アクセス頻度がわからない場合Standardに保存しましょう
      • アクセス頻度がわかる場合は次の選択肢へ
    • S3オブジェクトのサイズ
      • S3 Standard - IAS3 Glacier Flexible Retrievalでは最小オブジェクトサイズ(128KB)が設定されている
      • オブジェクト数が膨大でない場合は、利用費への影響は少ないため無視してもOK
    • S3オブジェクトのマルチAZ可用性
      • 基本的にはマルチAZ可用性は必要なので、S3 Standard - IAを選択すべき。
      • コスト削減がマルチAZ可用性よりも重要な場合は、利用費が20%安価なS3 1 ゾーン - IAが選択可能
    • S3オブジェクトの取り出しに許容できる時間
      • 許容できる取り出し時間からS3 Glacier Flexible Retrieval or S3 Glacier Deep Archiveのどちらかを選択
      • ミリ秒単位のアクセスが必要な場合はS3 Glacier Instant Retrievalを選択

参考ドキュメント

最後に

今回は、S3ストレージクラスの選択に迷った時にみて参考にできるフローチャートを作成してみました。

今後S3のストレージクラスを選ぶ際には積極的に使っていこうと思います。

より良いフローチャートにしたいため、御意見ご要望あれば(@ashi_ssan)までTwitterのリプライやDMお待ちしています。


本エントリが皆様のお役に立てれば幸いです。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。


  1. アクセス頻度が3ヶ月に1回程度なのに、保存してから1ヶ月でオブジェクトを削除しませんよね、という想定です