【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

AWSのS3の転送速度を早くする裏ワザをAWSの中の人に聞いてきた

インフラエンジニアの伊藤です。

Amazon S3
非常なスケーラブルなシステムで、99.99%の可用性を誇るシステムです。
(ちなみに堅牢性は99.9999999%になります)

静的サイトとしてS3を使用している人もいらっしゃるでしょうし、
ストレージとして使用している人もいるでしょう。

やっぱり気になるのは転送速度。

AWSの中の人がいってた「転送速度を速くするワザ」を今回紹介したいと思います!

S3ってディレクトリ-ファイルの構造じゃない

転送速度を速くするワザの前に・・・
S3は上記の堅牢性や可用性を担保するために、ファイルをアップロードしたタイミングで、
同じリージョンの3つのデータセンターに対してコピーを行っています。

で、S3にはバケットとオブジェクトというものがあり、「フォルダ=バケット」、「ファイル=オブジェクト」というイメージをしますが、実体はそうじゃないのです。

引用します。

mazon S3の基礎技術は、単純なKVS(Key-Value型データストア)でしかありません。例えば下記のようなフォルダ(と我々が認識している)構造があったとします。(本エントリーでは、bar.txtにはbar、baz.txtにはbazっていう文字が入っていると単純に考えることにします。)
(ルート)
└ foo/
└ bar.txt
ただこれは、我々がこのように認識しているだけであって、S3的には単純に下記のような情報を保持しているに過ぎません。S3においては基本的に、/に特別な意味は無いのです。
キー(フルパス名) バリュー(ファイルの内容)
foo/bar.txt bar

参考サイト:Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする | Developers.IO

Amazon S3 ではバケットとオブジェクトをサポートしていますが、Amazon S3 には階層がありません。ただし、オブジェクトキー名のプレフィックスと区切り記号によって、Amazon S3 コンソールや AWS SDK で階層を暗示し、フォルダの概念を導入できます。

参考サイト:オブジェクトキーとメタデータ - Amazon Simple Storage Service

バケットとオブジェクトを使うとフォルダとファイルっぽいですが、あくまで概念として作っているだけのようです。

キーバリュー型のデータなので、データを取得するときは単純に検索がかかっていきます。
また、同じようなバケット名にしてしまうと、同じデータセンターにデータが格納されてからデータコピーをしてしまい、
転送速度が遅くなりがちになるようです。

バケット名の先頭にハッシュ値をつけよう

バケット名に何文字か適当なハッシュ値をつけることで、同じデータセンターに書き込まれることがなくなります。

  • test01
  • test02
  • test03

ではなく、

  • abctest01
  • yjctest02
  • ckttest03

と言った感じですね。

ただ、どんなバケット名でもいいかというとそうではなくて、
命名規則にも制限があるので、注意しましょう。

  • バケット名は、3~63 文字以内にする必要があります。
  • バケット名は、1 つのラベルまたは一連の複数のラベルとして指定します。隣り合うラベルは単一のピリオドで区切ります。バケット名には、小文字の英文字、数字、およびハイフン(-)を含めることができます。各ラベルの先頭および末尾は、小文字の英文字または数字にする必要があります。
  • バケット名は、IP アドレスの形式(192.168.5.4 など)にはできません。
  • SSL と共に仮想ホスティング形式のバケットを使用した場合、SSL ワイルドカード証明書は、ピリオドを含まないバケットのみと一致します。この問題を回避するには、HTTP を使用するか、または独自の証明書検証ロジックを記述します。 バケット名にピリオド (「.」) は使用しないことをお勧めします。

引用元:バケットの制約と制限 - Amazon Simple Storage Service

これによって、各種データが同じリージョン内の違うデータセンターに書き込まれるので、
同じデータセンター内に書き込まれるより速くなることが期待できます。

先頭に何文字以上が必要やったけな…確か3文字以上とかだった気がします。

では、よきS3ライフを!

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
25,789
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author