S3ストレージクラスの選択に迷った時に見るフローチャートを作ってみた(2022年8月版)
みなさん、こんにちは。
AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。
みなさんは、S3のストレージクラスをどのように選ばれていますか?
本エントリでは、S3ストレージクラスの選択に迷った時にみて参考にできるフローチャートを作成してみました。
きっかけ
私はS3設計の際、基本的に毎回すべて忘れているので、設計の都度公式ドキュメントと睨めっこしながら各ストレージクラスの仕様を確認して設計します。
公式ドキュメントとの対面が辛くなった時は、以下のブログをよく読みます。
こちらのブログでは簡潔にポイントが抑えられたフロー図が掲載されており、大変参考になります。
ですが、このブログの後にS3の新しいストレージクラスであるGlacier Instant Retrieval
がリリースされたこともあり、最新の情報でS3ストレージクラスを設計したい場合は、やはり公式ドキュメントを眺める必要があります。
ということで改めて新しいものを作ってしまおう!と思い、今回「2022年8月版」のフローチャートを作ってみました。
前置きはここまでです。
S3ストレージ選択のフローチャート
今回作成したフローチャートはこちらです。
フローチャートだけ見たかったんだ、という読者の方はここまで見てくださってありがとうございました。
ここからはこのフローチャートの設計思想やポイントについて解説します。以降もお付き合いいただける皆様は、引き続きよろしくお願いいたします。
フローチャート解説
長くなりそうなので一番初めにまとめを置いておきます。
いきなりまとめ
- S3ストレージクラスは全部で9つある
- フローチャートではその中の6つにルーティング
- S3ストレージクラスの設計のポイントは以下
- S3オブジェクトへのアクセス頻度
- アクセス頻度がわからない場合
Standard
に保存しましょう - アクセス頻度がわかる場合は次の選択肢へ
- アクセス頻度がわからない場合
- S3オブジェクトのサイズ
S3 Standard - IA
、S3 One Zone - IA
、S3 Glacier Instant Retrieval
では最小オブジェクトサイズ(128KB
)が設定されている- オブジェクト数が膨大でない場合は利用費への影響が少ないことが想定できたり、128KBを下回るオブジェクトは特定のパターンのライフサイクル移行で移行対象にならないなど、オブジェクトサイズについては無視しても問題ない場合がある。
- S3オブジェクトのマルチAZ可用性
- 基本的にはマルチAZ可用性は必要なので、
S3 Standard - IA
を選択すべき。 - コスト削減がマルチAZ可用性よりも重要な場合は、利用費が20%安価な
S3 One Zone - IA
が選択可能
- 基本的にはマルチAZ可用性は必要なので、
- S3オブジェクトの取り出しに許容できる時間
- 許容できる取り出し時間から
S3 Glacier Flexible Retrieval
orS3 Glacier Deep Archive
のどちらかを選択 - ミリ秒単位のアクセスが必要な場合は
S3 Glacier Instant Retrieval
を選択
- 許容できる取り出し時間から
- S3オブジェクトへのアクセス頻度
まずは、各ストレージクラスについておさらいしましょう。
S3ストレージクラスについて
2022年7月20日現在利用できるS3のストレージクラス一覧がこちらです。
- S3 Standard
- S3 Standard - IA
- S3 One Zone - 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 One Zone - 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 Lensという機能を有効化した状態でしばらく運用することをおすすめします。
S3 Storage Lensを有効化すると、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 Instant Retrievalであれば128KB
が設定されています。
最小オブジェクトサイズが設定されているストレージタイプで、そのサイズに満たないオブジェクトであっても最小オブジェクトサイズの128KB
で料金が計算されます。
チェックポイントとしていますが、分岐がなく点線の括弧書きで表している理由は、2点あります。(チェックポイントとして設定した意図は、このポイントをご認識いただくことは重要だろうと感じたからです)
1点目は、すべてのオブジェクトが128KB以上でなくとも利用費に大きな影響はない
ためです。
「最小オブジェクトサイズに大きく達しない数Byte単位の細かいオブジェクトを大量に保存する」ような特別なユースケースでなければ、利用費に影響することはあまりないでしょう。
2点目は、以下の組み合わせのライフサイクルルールによる移行では、128KB以下のオブジェクトは移行の対象にならないためです。
S3 Standard もしくは S3 Standard-IA
からS3 Intelligent - Tiering もしくは S3 Glacier Instant Retrieval
への移行S3 Standard
からS3 Standard - IA もしくは S3 One Zone - IA
余談ですが、こちらの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 One Zone - IAは、オブジェクトが1つのAZにのみ保存されるためAZ単位での耐障害性を持っておりません。耐久性はS3 Standardと同様の99.999999999% (イレブンナイン)
ですが、AZ単位での耐障害性がないことから、可用性が99.5%
と少し劣っています。
可用性が劣る代わりに、ストレージ料金がS3 Standard - IAと比較して20%安価なため、よりコストを抑えることが可能です。可用性よりもコストを優先すべき時に選択するストレージクラスになります。
以下ここまでの説明をまとめた表です。
ストレージクラス | 耐久性 | 可用性 |
---|---|---|
S3 Standard - IA | 99.999999999% | 99.99% |
S3 One Zone - IA | 99.999999999% | 99.5% |
大半のユースケースでは、高い可用性が提供されるS3 Standard - IA
を選択することになると思いますが、可用性よりもコストを優先したい場合にS3 One Zone - 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 - IA
、S3 One Zone-IA
、S3 Glacier Instant Retrieval
では最小オブジェクトサイズ(128KB
)が設定されている- オブジェクト数が膨大でない場合は利用費への影響が少ないことが想定できたり、128KBを下回るオブジェクトは特定のパターンのライフサイクル移行で移行対象にならないなど、オブジェクトサイズについては無視しても問題ない場合がある
- S3オブジェクトのマルチAZ可用性
- 基本的にはマルチAZ可用性は必要なので、
S3 Standard - IA
を選択すべき。 - コスト削減がマルチAZ可用性よりも重要な場合は、利用費が20%安価な
S3 One Zone - IA
が選択可能
- 基本的にはマルチAZ可用性は必要なので、
- S3オブジェクトの取り出しに許容できる時間
- 許容できる取り出し時間から
S3 Glacier Flexible Retrieval
orS3 Glacier Deep Archive
のどちらかを選択 - ミリ秒単位のアクセスが必要な場合は
S3 Glacier Instant Retrieval
を選択
- 許容できる取り出し時間から
- S3オブジェクトへのアクセス頻度
参考ドキュメント
- Amazon S3 ストレージクラスを使用する - Amazon Simple Storage Service
- アーカイブされたオブジェクトの復元
- 料金 - Amazon S3 |AWS
- 6つのS3ストレージクラスの選択に迷った時みるチャートをつくってみた | DevelopersIO
- [新機能] S3 の利用状況が一目瞭然!しかも無料!「Amazon S3 Storage Lens」がリリースされました! | DevelopersIO
最後に
今回は、S3ストレージクラスの選択に迷った時にみて参考にできるフローチャートを作成してみました。
今後S3のストレージクラスを選ぶ際には積極的に使っていこうと思います。
より良いフローチャートにしたいため、御意見ご要望あれば(@ashi_ssan)までTwitterのリプライやDMお待ちしています。
本エントリが皆様のお役に立てれば幸いです。
以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。
- アクセス頻度が3ヶ月に1回程度なのに、保存してから1ヶ月でオブジェクトを削除しませんよね、という想定です ↩