NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

S3のフォルダ構造とプレフィックスの話

本記事は  AWSアワード記念!夏のアドベントカレンダー  2日目の記事です。
🎆🏆  1日目  ▶▶ 本記事 ▶▶  3日目  🏆🎆

 こんにちは、佐々木です。
いろいろ思うところがあって、AWS Ambassadorに復帰することになりました。今年からTier制になって、最上位のPrincipal Ambassadorというのができるようです。まだクライテリアは発表されていませんが、せっかくなのでPrincipal目指して頑張っていきます。ということで、NRIネットコムのブログイベント「AWSアワード記念!夏のアドベントカレンダー」の2日目です。
 今回は基本に立ち返って、S3のフォルダ構造とプレフィックスの話です。

S3のフォルダの不思議な挙動!?

 S3のフォルダ配下のファイルを削除したら、フォルダごと無くなってしまったという経験ないでしょうか? 軽く実験をしてみます。手順としては、次のとおりです。どんな挙動になるか解りますか? 勘の良い方は、この手順で何を説明したいのか気がつくでしょう。

  1. 実験用のバケットを作成(prefix-sample-20240708)
  2. CLIからfolder01/hoge.txtをコピーする
  3. GUIからfolder01/hoge.txtを削除する
  4. GUIからfolder02を作成する
  5. CLIからfolder02/hoge.txtをコピーする
  6. GUIからfolder02/hoge.txtを削除する

3の結果と、6の結果は、次の通りです。

folder01/hoge.txtの削除の結果、フォルダも削除される

folder02/hoge.txtを削除しても、フォルダは残る

 どうして、このような違いが出てくるのでしょうか?S3のフォルダ構成とプレフィックスの仕組みを理解していると、何故こうなるのかが説明できます。

S3のフォルダとプレフィックス

 S3上のオブジェクトの構成要素は、実はバケットとキーのみです。ファイルシステムのような階層構造は持たずに、フラットな構造です。

 この説明をすると、「でも、バケットの下に階層構造を作れるし、フォルダも作れる」という反論がでてくるでしょう。それも事実です。しかし、それはキー名をプレフィックスとオブジェクト名に分割して擬似的に階層構造を作っているだけなのです。

 そして、S3は0バイトのオブジェクトも作成できます。GUIから作成しているフォルダは、実はフォルダのプレフィックスをした0バイトのオブジェクトなのです。

docs.aws.amazon.com

先ほどの実験の解説

 ここまで説明したところで、改めて先程の実験の解説です。はじめにCLIからfolder01/hoge.txtというオブジェクトをコピーしました。これは、folder01というフォルダを作った上でhoge.txtをコピーするという挙動ではないのです。いきなりfolder01/hoge.txtというキー名を持つオブジェクトを作成しています。そのため、このhoge.txtを削除すると上位にあったと思われるfolder01も消えてしまったのです。
 次にfolder02というフォルダを作成しました。これは、folder02というキー名を持つ0バイトのオブジェクトを作成しています。その次にfolder02/hoge.txtを作成しましたが、もともと作っていたfolder02とは独立したキー名で作成されています。folder02配下に表示されるのは、S3の表示上の挙動です。そのため、folder02/hoge.txtを削除しても、オブジェクトとして別に作成されていたfolder02は消えません。

S3のフォルダ構造とプレフィックスを理解するのは、なぜ重要なのか?

 ここまでで、S3のキー名とプレフィックス・フォルダの関係は、理解できたと思います。ただ、こんなことを知らなくても何不自由なくS3を使うことはできるでしょう。では、なぜこの構造を知っているのが重要なのでしょうか?実は、S3のパフォーマンスを理解するためにも重要だからです。S3は分散ストレージです。そして、2024年7月時点の性能として、プレフィックスあたり5,500 GET リクエスト/秒の性能があります。データの配置はプレフィックスを元に配置されるので、同一のプレフィックスだと最大のパフォーマンスを発揮できなくなります。

 この図は極端な例ですが、S3の性能が今よりもっと低かった時代は図のようなプレフィックス設計が多くされていました。今は、性能が大幅に伸びていることもあり、あまりプレフィックスにこだわる必要は少なくなってきています。一方で、シビアな使い方をする場合には、いまだ重要です。

Dive deep on Amazon S3

 性能の話については、AWS Summit 2024のDive deep on Amazon S3で詳しく語られていたようです。まだ資料は閲覧可能なようなので、ぜひ参考にしてください。

https://pages.awscloud.com/rs/112-TZM-766/images/AWS-01_Storage_AWS_Summit_JP_2024.pdf

執筆者 佐々木拓郎

Japan AWS Ambassadors
ワイン飲みながら技術書を書くのが趣味なおじさんです

Twitter:https://twitter.com/dkfj

Facebook:https://www.facebook.com/takuro.sasaki

個人ブログ:https://blog.takuros.net/

Amazon著者ページ:Amazon.co.jp:佐々木 拓郎:作品一覧、著者略歴

Booth:https://takuros.booth.pm/

コーポレートサイト:https://www.nri-net.com/

ソリューションサイト:https://cloud.nri-net.com/