Amazon S3 の Bucket 命名ルールについて

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ごあいさつ

こんにちは、会長の横田あかりです。 本日より技術ブログを始めます。 得意分野は、AWS全般です。 よろしくお願いいたします。

Amazon Simple Storage Service (Amazon S3) とは

Amazon S3 (以下、S3) は、インターネット用のストレージサービスです。ユーザはS3の全リージョン(地域)にてユニークな名前のBucketを複数作成することができます。Bucket名はそのままURLになるため、全S3ユーザでユニークである必要があります。Bucket内には複数のObjectを置くことができます。S3は、このような簡単な仕組みではありますが、大量かつ大きなファイルを安全に安価に置くことができますので様々なサービスの基盤として世界中で使われています。

Bucketの命名ルール

Bucketは、全リージョン内でユニークな名前が付いた入れ物です。ここでは、命名ルールについてご紹介します。

以下は、※US Standardリージョンに対応した命名ルールです。

  • 小文字、数字、ピリオド(.)、アンスコ(_)、ダッシュ(-)を含めることができる。
  • 数字か文字で始める
  • 3~255の間の文字長
  • IPアドレスの書式はダメ

Ireland,Northern California,Singapore,TokyoリージョンはDNS要件に従う必要があるため、以下のルールを守ってください。

  • Bucket名にアンスコ(_)を使わない
  • 3~63の間の文字長
  • ダッシュ(-)で終わらない
  • ピリオド(.)を連続して表記しない(..)
  • ダッシュ(-)前後でピリオドを使わない(-.または.-)
  • ピリオド(.)、アンスコ(_)、ダッシュ(-)で終わらない。(ドキュメントには載っていません)

もし、100文字長のBucketなど、US Standardリージョンの命名ルールに従ってBucket名を決めた場合、バーチャルホスト形式のURLリクエストに対応しませんので気を付けてください。DNS要件に従って名前を決めましょう。

http://mybucket.s3.amazonaws.com/myobject

Bucketはネストして作成することはできません。 Bucket名は全リージョンにおいてユニークである必要があります。 自動生成する場合には衝突しない接頭辞を付けるなど 工夫をしてください。

Objectの命名ルール

Bucket内に列挙されるObjectの主な構成要素は、 Key、Data、Metadataです。

Objectの名前(key)はBucket内でユニークである必要があります。

keyはUTF-8で1024バイト長まで設定できます。

key名は以下のルールに従ってください。

  • 大文字、小文字、数字、ピリオド(.)、アンスコ(_)、ダッシュ(-)、を含めることができます。
  • クエスチョン(?)、アンド(&)、ドル($)、シャープ(#)、パーセント(%)、ダブルクオート(")、シングルクオート(')、を含めることができますが、エスケープ文字とする必要があります。
  • スラッシュ(/)を使うことはできない。
  • 1文字以上

Objectの名前(Key)が、myobject?k1=v1&k2=v2 という名前の場合、 そのままエスケープせずにURLにて以下のように指定すると、

http://mybucket.s3.amazonaws.com/myobject?k1=v1&k2=v2

となり、URLのGETパラメータとして解釈される可能性から、 AccessDeniedと返答が返ってきますのでエスケープしてください。

http://mybucket.s3.amazonaws.com/myobject%3Fk1%3Dv1%26k2%3Dv2

Metadata について

MetadataはHTTPレスポンスヘッダに付加することができる情報です。

Metadataはシステムが定義したものとユーザが定義したものがあります。 システム定義したものでは、x-amz-id-2やx-amz-request-idがあります。 ユーザ定義できるものでは、Content-Type、Content-Language、Cache-Control、 Content-Disposition、Expires、Content-Encoding、x-amz-meta-xxx、 などがあります。

以下の例では、x-amz-meta-classmethod というユーザ定義のMetadataを付加して、HTTPレスポンスヘッダに含まれたことを表しています。

まとめ

今回は、S3のキホンである、BucketとObjectとMetadataについてご紹介しました。S3にアップロードしたけどファイルが見れないという問題にあたったとき、BucketやObjectの命名ルールに沿っているかご確認ください。きっと解決に繋がると思います。

次回は、引き続きS3について情報をお届けする予定です。

横田 あかり

  • Yoshikazu Tsuji

    Bucket名はリージョン内でのみユニークであればよいのではなく、ワールドワイド全体でユニークである必要があります。よければ修正をお願いします。
    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html

  • よこたさとし

    ご指摘ありがとうございました!修正しました〜