このページでは、Cloud Storage でオブジェクトとともに保存され、よく使用されるメタデータ フィールドについて説明します。
はじめに
Cloud Storage に保存されるオブジェクトには、メタデータが関連付けられます。メタデータは、オブジェクトのプロパティを示し、アクセスの際の処理方法を指定します。メタデータは Key-Value というペアで存在します。たとえば、オブジェクトのストレージ クラスはメタデータ エントリ storageClass:STANDARD
によって表されます。storageClass
はメタデータのキーで、すべてのオブジェクトにはこのようなキーが関連付けられています。STANDARD
は、このオブジェクトの値です。値はオブジェクトごとに異なります。
メタデータにはさまざまな種類があり、いつでも編集できるメタデータもあれば、オブジェクトの作成時にのみ設定できるメタデータもあります。表示しかできないメタデータもあります。たとえば、Cache-Control
メタデータの値はいつでも編集できますが、storageClass
メタデータはオブジェクトの作成または再書き込みの際にしか割り当てることができません。また、generation
メタデータの値を直接編集することはできませんが、オブジェクトが置換されると、generation
の値は変化します。
編集可能なメタデータ
オブジェクトでユーザーが変更できるメタデータには次の 2 つのカテゴリがあります。
固定キーメタデータ: キーが設定されたメタデータ。ユーザーは値を指定できます。
カスタム メタデータ: ユーザーがキーとキーに関連する値の両方を指定して、追加するメタデータ。
メタデータを編集するときは、一般に非 ASCII 文字を使用しないでください。非 ASCII 文字は、XML API が使用する HTTP ヘッダーで許可されません。
固定キーメタデータ
オブジェクトについて次のメタデータを編集できますが、そのためには十分な権限が必要です。
- アクセス制御メタデータ
- Cache-Control
- Content-Disposition
- Content-Encoding
- Content-Language
- Content-Type
- Custom-Time
- オブジェクト保留
- 保持の構成
アクセス制御メタデータ
Cloud Storage では、Identity and Access Management(IAM)とアクセス制御リスト(ACL)を使用してオブジェクトへのアクセスを制御します。これらのアクセス制御方法や関連するメタデータについては、該当するリンクをご覧ください。
Cache-Control
Cache-Control
メタデータでは、Cloud Storage でのデータの使用方法に関して、データをキャッシュに保存できるかどうか、データを変換できるかどうかの 2 つを指定できます。
データをキャッシュに格納する
Cache-Control
メタデータを使用すると、ブラウザ キャッシュとインターネット キャッシュにオブジェクトを保存するかどうかを設定できます。また、これによって将来のリクエストに対応できます。Cloud Storage ネットワークは、次のオブジェクトにアクセスするときにのみ、オブジェクトの Cache-Control
設定を考慮します。
- 一般公開されている。
- リクエスト元による支払いが有効になっているバケットに保存されていない。
- 顧客指定の暗号鍵で暗号化されていない。
Cloud Storage は、次のような Cache-Control
の標準値を遵守します。
public
: オブジェクトを任意のキャッシュに保存できます。private
: オブジェクトは、リクエスト元のローカル キャッシュに保存されます。no-cache
: オブジェクトは、キャッシュに保存されますが、Cloud Storage によって最初に検証されない限り、将来のリクエストには使用されません。no-store
: オブジェクトはキャッシュに保存されません。max-age=TIME_IN_SECONDS
: キャッシュに保存されたオブジェクトが古くなったとみなされるまでの時間。max-age
には任意の長さの時間を設定できます。特別な状況を除いて、古くなったオブジェクトは、キャッシュから提供されません。
該当するオブジェクトに Cache-Control
メタデータ エントリがない場合、Cloud Storage は次のデフォルト値を使用します。
public, max-age=3600
(オブジェクトが、顧客管理の暗号鍵を使用して暗号化されていないか、Virtual Private Cloud サービス境界内に保存されている場合)no-cache, no-store, max-age=0
(オブジェクトが顧客管理の暗号鍵で暗号化されている場合)。private, max-age=0
(オブジェクトが Virtual Private Cloud サービス境界内に格納されている場合)no-cache, no-store, max-age=0, must-revalidate
(オブジェクトが Virtual Private Cloud サービス境界内に格納されており、さらに、顧客管理の暗号鍵により暗号化されている場合)
キャッシュへの保存を有効にした場合、新しいバージョンをアップロードした後でも、引き続き以前のバージョンのオブジェクトを受け取る可能性があります。これは、max-age
によって指定された期間中、以前のバージョンがキャッシュで「新規」のままであるためです。また、オブジェクトはインターネット上のさまざまな場所のキャッシュに保存されます。このため、キャッシュに保存されているオブジェクトをすべて強制的に期限切れにすることはできません。キャッシュに保存されたバージョンが一般公開されることを回避するには、オブジェクトに対して Cache-Control: no-store
を設定します。
Cloud Storage と Cloud CDN によるキャッシュの詳細については、キャッシュ保存をご覧ください。
キャッシュの動作をより細かく制御するには、バケットの前に Cloud CDN を構成します。
データの変換
Cache-Control
メタデータを使用すると、互換性のないクライアントのために gzip content-encoding を削除するなど、データに変換を適用せずに、保存されたままの状態でオブジェクトを提供することもできます。オブジェクトをそのままで提供するには、Cache-Control:no-transform
を設定します。
Content-Disposition
Content-Disposition
メタデータは、転送するデータに関する表示情報を指定します。Content-Disposition
を設定すると、コンテンツの表示スタイルを制御できます。たとえば、添付ファイルを自動的に表示したり、開く前にユーザーに操作を要求することもできます。Content-Disposition
の仕様については、https://datatracker.ietf.org/doc/html/rfc6266 をご覧ください。
Content-Encoding
Content-Encoding
メタデータを使用すると、オブジェクトが圧縮されているが、基礎となる Content-Type
を維持していることを示すことができます。たとえば、gzip 圧縮されているテキスト ファイルについては、Content-Type
で示されるようにテキスト ファイルであるという事実と、Content-Encoding
で示されるように gzip 圧縮されているという事実があります。指定された Content-Encoding
を使用してファイルが実際に圧縮されていることを、アップロードする前に確認する必要があります。そうしないと、オブジェクトをダウンロードしようとして予期しない動作が発生する可能性があります。詳細については、トランスコーディングのページをご覧ください。
テキストなど圧縮可能なコンテンツの場合は、Content-Encoding: gzip
を使用すると、ネットワークとストレージのコストを抑え、コンテンツ配信のパフォーマンスを向上させることができます。ただし、アーカイブや多くのメディア形式など、本来すでに圧縮されているコンテンツの場合は、さらに圧縮を適用し、それを Content-Encoding
メタデータにマーキングすることは、一般にオブジェクトのサイズとパフォーマンスの両方にとって弊害となるため、避けてください。
Content-Language
Content-Language
メタデータは、オブジェクトが対応する言語を指定します。このメタデータの一般的な値については、ISO 639-1 言語コードをご覧ください。
Cloud Storage では、最大 100 文字の Content-Language
値がサポートされています。
Content-Type
最もよく設定されるメタデータは Content-Type
(メディアタイプともいう)です。ブラウザは、このメタデータを使用してオブジェクトを正しく表示します。すべてのオブジェクトは Content-Type
メタデータに値が指定されていますが、この値はオブジェクトの基になる型と一致する必要はありません。たとえば、Content-Type
がアップロード時に指定されておらず判別できない場合、アップロード方法に応じて application/octet-stream
または application/x-www-form-urlencoded
に設定されます。有効なコンテンツ タイプの一覧については、IANA メディアタイプのページをご覧ください。
Custom-Time
Custom-Time
メタデータは、RFC 3339 形式のユーザー指定の日時です。YYYY-MM-DD'T'HH:MM:SS.SS'Z'
または YYYY-MM-DD'T'HH:MM:SS'Z'
(ミリ秒がゼロの場合)で表されます。このメタデータは通常、オブジェクトのライフサイクル管理で DaysSinceCustomTime
条件を使用するために設定されます。
オブジェクトに一度設定された Custom-Time
は削除できません。また、Custom-Time
の値を小さくすることはできません。つまり、Custom-Time
を既存の Custom-Time
よりも前の日時に設定することはできません。ただし、オブジェクトを書き換えることで Custom-Time
の削除やリセットを効果的に行うことができます。
オブジェクト保留
メタデータ フラグを使用して、オブジェクト保留を設定します。これにより、オブジェクトの削除や置き換えを防ぐことができます。詳しくは、オブジェクト保留のページをご覧ください。
保持の構成
オブジェクトの保持構成が存在する場合、それより前の日時はオブジェクトの削除や置換ができなくなります。詳細については、オブジェクト保持ロックをご覧ください。
カスタム メタデータ
カスタム メタデータは、キーと値の両方を定義するメタデータです。カスタム メタデータを作成するには、キーと値の両方を指定します。カスタム メタデータの key:value
ペアを作成した後で、キーの削除や値の変更を行うことができます。
カスタム メタデータにはサイズ上限があり、ストレージ費用が発生します。
メタデータの表示と編集のページに、カスタム メタデータの設定に関する情報が記載されています。
x-goog-meta-
接頭辞
XML API は、リクエスト ヘッダーを使用してオブジェクト メタデータの設定と取得を行います。JSON API は、リクエスト ヘッダーを使用して、再開可能なアップロードの最終リクエストでカスタム メタデータを設定できます。カスタム メタデータ ヘッダーと標準のリクエスト ヘッダーを明確に区別するため、どちらの API もカスタム メタデータ ヘッダーに x-goog-meta-
という接頭辞を付けます。
編集不可能なメタデータ
一部のメタデータは直接編集できません。このようなメタデータは、オブジェクトの作成または再書き込み時に設定されます。オブジェクトの作成や再書き込みの際に、ユーザーが設定できるメタデータ(オブジェクトのストレージ クラスや顧客管理の暗号鍵など)もあります。オブジェクトの世代番号または作成時刻などの他のメタデータは自動的に追加され、表示のみが可能です。
世代番号とメタ世代番号
メタデータの一部として、すべての Cloud Storage オブジェクトには、オブジェクトを一意に識別する数値 generation
プロパティと数値 metageneration
プロパティがあります。
プロパティ | 説明 |
---|---|
generation |
オブジェクトのバージョンを明確にします。バケットでオブジェクトのバージョニングを使用しているかどうかに関係なく、オブジェクトごとに存在します。
|
metageneration |
これにより、メタデータのバージョンを識別します。対応する generation のメタデータが更新されるたびに増加します。
|
generation
プロパティと metageneration
プロパティは、次のような状況で使用されます。
リクエストでの前提条件の使用: 前提条件が満たされていない場合、リクエストが失敗します。このように失敗することで、間違ったオブジェクト データを取得したり、オブジェクトのメタデータの誤った状態を変更することにより、オブジェクトの予期しないバージョンにリクエストが適用されるのを防ぐことができます。
非現行バージョンのオブジェクトの一覧表示、アクセス、復元、削除: 非現行バージョンのオブジェクトは、オブジェクトのバージョニングを使用しているバケット、または以前に使用していたバケットに関連したものです。
チェックサム
チェックサムは、関連付けられたオブジェクトのデータから計算されるメタデータです。チェックサムは、オブジェクト データが破損していないことを検証するために使用されます。Cloud Storage オブジェクトには、いくつかのチェックサム メタデータ フィールドがあります。
CRC32C
Cloud Storage のすべてのオブジェクトに CRC32C ハッシュがあります。CRC32C を計算するためのライブラリには、以下があります。
- Google の CRC32C(C++ 用)
- hash/crc32(Go 用)
- GoogleAPIs Guava(Java 用)
- google-crc32c(Python 用)
- digest-crc(Ruby 用)
Base64 でエンコードされた CRC32C のバイト順はビッグ エンディアンです。
MD5
次の条件を満たす場合、Cloud Storage オブジェクトに MD5 ハッシュが設定されます。
- オブジェクトが複合オブジェクトではない
- オブジェクトが XML API マルチパート アップロードを使用してアップロードされたものではない
このハッシュは、完全なオブジェクトにのみ適用されるため、範囲 GET の実行によって生じる部分ダウンロードの整合性チェックには使用できません。
ETag
すべての Cloud Storage オブジェクトには ETag があります。ただし、XML API からのリクエストと JSON API からのリクエストでは、同じオブジェクトでも ETag 値が異なる場合があります。大半は、仕様のとおりです。ETag で使用される値について、基になるデータまたはメタデータが変更されるたびに値が変化するということ以外は想定できません。
次のすべてに該当する場合、オブジェクトの ETag ヘッダーはオブジェクトの MD5 値を返します。
- XML API を介してリクエストが行われている場合
- オブジェクトが、サーバーサイドの暗号化に Google が所有し管理する鍵のみを使用する場合
- オブジェクトが複合オブジェクトではなく、XML API マルチパート アップロードを使用してアップロードされなかった場合。
変更日時
メタデータの一部として、すべての Cloud Storage オブジェクトには、オブジェクトのメタデータが最後に変更された日時を示す updated
プロパティがあります。updated
時間はオブジェクトの作成時間に設定され、その後、オブジェクトのメタデータが変更されるたびに変更されます。この変更には、カスタム メタデータの変更など、リクエスト元による変更だけでなく、リクエスト元の代わりに Cloud Storage が行う変更(オブジェクトのライフサイクル構成に基づくストレージ クラスの変更など)も含まれます。
次のステップ
- オブジェクトのメタデータを表示および編集する。
- 利用可能なストレージ クラスを確認する。
- JSON API で使用可能なすべてのオブジェクト メタデータ フィールドを確認する。JSON のオブジェクト リファレンス ドキュメントをご覧ください。
- Storage Insights のインベントリ レポートについて学習する。このレポートでは、バケット内のすべてのオブジェクトのメタデータを一度に取得できます。