オブジェクトキーとメタデータ
Amazon S3 の各オブジェクトには、データ、キー、メタデータが含まれます。オブジェクトキー (またはキー名) によって、バケット内のオブジェクトは一意に識別されます。オブジェクトメタデータは、名前と値のペアのセットです。オブジェクトメタデータは、オブジェクトをアップロードするときに設定できます。オブジェクトのアップロード後にはオブジェクトメタデータは変更できません。オブジェクトメタデータを変更する唯一の方法は、オブジェクトのコピーを作成し、メタデータを設定することです。
トピック
オブジェクトキー
オブジェクトを作成するときに、キー名を指定します。これにより、バケット内のオブジェクトは一意に識別されます。たとえば、Amazon S3 コンソール
Amazon S3 のデータモデルはフラットな構造です。バケットを作成し、そのバケットにオブジェクトが保存されます。サブバケットやサブフォルダの階層はありません。ただし、Amazon S3 コンソールで使用されているようなキー名のプレフィックスや区切り記号を使用して論理的な階層を暗示できます。Amazon S3 コンソールでは、フォルダの概念をサポートしています。Amazon S3 コンソールからメタデータを編集する方法の詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「オブジェクトメタデータの編集」を参照してください。
-
Amazon S3 ではバケットとオブジェクトをサポートしており、階層はありません。ただし、オブジェクトキー名のプレフィックスと区切り記号により、Amazon S3 コンソールや AWS SDK で階層を暗示し、フォルダの概念を導入できます。
-
Amazon S3 コンソールは、フォルダーのプレフィックスと区切り記号の値をキーとしてゼロバイトのオブジェクトを作成することにより、フォルダーオブジェクトの作成を実装します。これらのフォルダオブジェクトはコンソールに表示されません。それ以外の場合は、他のオブジェクトと同様に動作し、REST API、AWS CLI、および AWS SDK を使用して表示および操作できます。
オブジェクトキーの命名のガイドライン
オブジェクトキー名には UTF-8 文字を使用できます。ただし、キー名に特定の文字を使用すると、一部のアプリケーションやプロトコルで問題が発生することがあります。以下のガイドラインは、DNS、ウェブセーフ文字、XML パーサー、その他の API とのコンプライアンスを最大化するのに役立ちます。
セーフ文字
以下の文字セットは、一般的にキー名で使用しても安全です。
アルファベットの文字 |
|
特殊文字 |
|
有効なオブジェクトキー名の例を次に示します。
-
4my-organization
-
my.great_photos-2014/jan/myvacation.jpg
-
videos/2014/birthday/video1.wmv
オブジェクトキー名が単一のピリオド (.)、2 つのピリオド (..) で終了する場合は、Amazon S3 コンソールを使用してオブジェクトをダウンロードすることはできません。「.」または「..」で終わるキー名のオブジェクトをダウンロードするには、AWS コマンドラインインターフェイス (AWS CLI)、AWS SDK、または REST API を使用する必要があります。
特殊な処理を必要とする可能性がある文字
キー名で以下の文字を使用すると、追加のコード処理が必要になる場合があり、16 進数として URL エンコードまたは参照することが必要になる可能性があります。これらの文字の一部は表示不可能な文字であり、ブラウザで処理されない場合があります。この場合も、特殊な処理が必要です。
-
アンパサンド ("&")
-
ドル記号 ("$")
-
16 進数の 00~1F (10 進数の 0~31) の範囲および 7F (10 進数の 127) の ASCII 文字
-
アットマーク ("@")
-
等号 ("=")
-
セミコロン (";")
-
コロン (":")
-
プラス記号 ("+")
-
スペース – いくつかの用途 (特に複数のスペース) では、スペースの重要なシーケンスが失われる可能性があります。
-
カンマ (",")
-
疑問符 ("?")
使用しない方がよい文字
すべてのアプリケーションで一貫性を維持するには相当な量の特殊な処理が必要になるため、キー名には以下の文字を使用しないでください。
-
バックスラッシュ ("\")
-
左中括弧 ("{")
-
表示不可能な ASCII 文字 (10 進数の 128 ~ 255 の文字)
-
カレット ("^")
-
右中括弧 ("}")
-
パーセント記号 ("%")
-
アクサングラーブ/バックティック ("`")
-
右角括弧 ("]")
-
引用符
-
大なり記号 (">")
-
左角括弧 ("[")
-
チルダ ("~")
-
小なり記号 ("<")
-
シャープ記号 ("#")
-
縦棒/パイプ ("|")
オブジェクトメタデータ
メタデータにはシステムメタデータとユーザー定義メタデータの 2 種類があります。
システムで定義されたオブジェクトメタデータ
Amazon S3 では、バケットに格納されるオブジェクトごとに、一連のシステムメタデータが維持されます。このシステムメタデータは必要に応じて処理されます。例えば、オブジェクトの作成日とサイズに関するメタデータが維持され、オブジェクト管理の目的でこの情報が使用されます。
システムメタデータには 2 つのカテゴリがあります。
-
オブジェクト作成日などのメタデータはシステムによって制御され、Amazon S3 だけがその値を変更できます。
-
他のシステムメタデータ (オブジェクトに設定済みのストレージクラスや、オブジェクトでサーバー側の暗号化が有効になっているかどうかなど) は、ユーザーが値を制御するシステムメタデータの例です。バケットをウェブサイトとして設定している場合、ページリクエストを別のページや外部 URL にリダイレクトしたいことがあります。この場合、ウェブページはバケット内のオブジェクトです。Amazon S3 は、ページリダイレクト値をシステムメタデータとして保存し、ユーザーがその値を制御します。
オブジェクトを作成するときに、このようなシステムメタデータ項目の値を設定したり、必要に応じてその値を更新したりできます。ストレージクラスの詳細については、「Amazon S3 ストレージクラス」を参照してください。
サーバーサイドの暗号化の詳細については、「暗号化を使用したデータの保護」を参照してください。
次の表は、システム定義のメタデータのリストとユーザーがそれを更新できるかどうかをまとめたものです。
名前 | 説明 | ユーザーが値を変更できるか |
---|---|---|
日付 | 現在の日付と時刻。 | いいえ |
Content-Length | オブジェクトのサイズ (バイト単位)。 | いいえ |
Content-Type | オブジェクトタイプ。 | はい |
Last-Modified |
オブジェクト作成日または最終更新日のいずれか遅い方。 |
いいえ |
Content-MD5 | オブジェクトの base64 エンコードされた 128 ビット MD5 ダイジェスト。 | はい |
x-amz-server-side-encryption | オブジェクトでサーバー側の暗号化が有効であるか、また暗号化が AWS Key Management Service (AWS KMS) または Amazon S3 マネージド暗号化 (SSE-S3) によるものかを示します。詳細については、「サーバー側の暗号化を使用したデータの保護」を参照してください。 | はい |
x-amz-version-id | オブジェクトのバージョン。バケットのバージョニングを有効にすると、Amazon S3 ではバケットに追加されたオブジェクトにバージョン番号が割り当てられます。詳細については、「バージョニングの使用」を参照してください。 | いいえ |
x-amz-delete-marker | バージョニングが有効にされているバケットで、このブール値マーカーはオブジェクトが削除マーカーであるかどうかを示します。 | いいえ |
x-amz-storage-class | オブジェクトの保存に使われるストレージクラス。詳細については、「Amazon S3 ストレージクラス」を参照してください。 | はい |
x-amz-website-redirect-location | 関連付けられたオブジェクトのリクエストを同じバケット内の別のオブジェクトまたは外部 URL にリダイレクトします。詳細については、「(オプション) ウェブページリダイレクトの設定」を参照してください。 | はい |
x-amz-server-side-encryption-aws-kms-key-id | x-amz-server-side-encryption が存在し、その値が aws:kms である場合、これはオブジェクトに使用された AWS KMS 対称カスタマーマスターキー (CMK) の ID を示します。
|
はい |
x-amz-server-side-encryption-customer-algorithm | お客様が用意した暗号化キーを使用したサーバー側の暗号化 (SSE-C) が有効であるかどうかを示します。詳細については、「お客様が用意した暗号化キーによるサーバー側の暗号化 (SSE-C) を使用したデータの保護」を参照してください。 | はい |
ユーザー定義のオブジェクトメタデータ
オブジェクトをアップロードするときに、そのオブジェクトにメタデータを割り当てることもできます。このオプション情報は、オブジェクトを作成するための PUT リクエストまたは POST リクエストを送信するときに、名前と値 (キーと値) のペアとして指定します。REST API を使用してオブジェクトをアップロードするときは、オプションのユーザー定義メタデータ名を「x-amz-meta-」で始め、他の HTTP ヘッダーと区別する必要があります。REST API を使用してオブジェクトを取得するときは、このプレフィックスが返されます。SOAP API を使用してオブジェクトをアップロードする場合、このプレフィックスは不要です。SOAP API を使用してオブジェクトを取得するときは、オブジェクトのアップロードに使用した API にかかわらず、プレフィックスは削除されます。
SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP では、Amazon S3 の新機能がサポートされなくなります。REST API か AWS SDK を使用することをお勧めします。
REST API を介してメタデータを取得するとき、同じ名前を持つヘッダー (大文字と小文字は区別されません) は Amazon S3 によってカンマ区切りリストに結合されます。出力不可能な文字が含まれているメタデータは返されません。その代わりに、x-amz-missing-meta
ヘッダーが、出力不可能なメタデータエントリの数を示す値と共に返されます。
ユーザー定義メタデータはキーと値のペアのセットです。Amazon S3 はユーザー定義メタデータキーを小文字で保存します。
Amazon S3 では、任意の Unicode 文字をメタデータ値で使用できます。
これらのメタデータ値の表示に伴う問題を回避するために、REST を使用する場合は US-ASCII 文字を使用してください。SOAP またはブラウザベースのアップロードを POST 経由で使用する場合は UTF-8 を使用してください。
US-ASCII 以外の文字をメタデータ値で使用すると、指定した Unicode 文字列に US-ASCII 以外の文字が含まれていないかどうか調べられます。文字列に US-ASCII 文字のみが含まれている場合は、そのまま表示されます。文字列に US-ASCII 以外の文字が含まれている場合は、最初に UTF-8 を使用して文字エンコードされ、次に US-ASCII にエンコードされます。
例:
PUT /Key HTTP/1.1 Host: awsexamplebucket1.s3.amazonaws.com x-amz-meta-nonascii: ÄMÄZÕÑ S3 HEAD /Key HTTP/1.1 Host: awsexamplebucket1.s3.amazonaws.com x-amz-meta-nonascii: =?UTF-8?B?w4PChE3Dg8KEWsODwpXDg8KRIFMz?= PUT /Key HTTP/1.1 Host: awsexamplebucket1.s3.amazonaws.com x-amz-meta-ascii: AMAZONS3 HEAD /Key HTTP/1.1 Host: awsexamplebucket1.s3.amazonaws.com x-amz-meta-ascii: AMAZONS3
PUT リクエストヘッダーのサイズは 8 KB に制限されています。PUT リクエストヘッダー内のユーザー定義メタデータのサイズは 2 KB に制限されています。ユーザー定義メタデータのサイズは、キーと値の各ペアを UTF-8 にエンコードしたバイト数の合計に基づいて測定されます。
アップロード後にオブジェクトにメタデータを追加する方法については、Amazon Simple Storage Service コンソールユーザーガイドの「S3 オブジェクトにメタデータを追加する方法」を参照してください。