オブジェクトのメタデータ

管理

このページでは、Cloud Storage でオブジェクトとともに保存され、よく使用されるメタデータ フィールドについて説明します。

はじめに

Cloud Storage に保存されるオブジェクトには、メタデータが関連付けられます。メタデータは、オブジェクトのプロパティを示し、アクセスの際の処理方法を指定します。メタデータは Key-Value というペアで存在します。たとえば、オブジェクトのストレージ クラスはメタデータ エントリ storageClass:STANDARD によって表されます。storageClass はメタデータのキーで、すべてのオブジェクトにはこのようなキーが関連付けられています。STANDARD は、このオブジェクトの値です。値はオブジェクトごとに異なります。

メタデータにはさまざまな種類があり、いつでも編集できるメタデータもあれば、オブジェクトの作成時にのみ設定できるメタデータもあります。表示しかできないメタデータもあります。たとえば、Cache-Control メタデータの値はいつでも編集できますが、storageClass メタデータはオブジェクトの作成または再書き込みの際にしか割り当てることができません。また、generation メタデータの値を直接編集することはできませんが、オブジェクトが置換されると、generation の値は変化します。

編集可能なメタデータ

オブジェクトでユーザーが変更できるメタデータには次の 2 つのカテゴリがあります。

  • 固定キーメタデータ: キーが設定されたメタデータ。ユーザーは値を指定できます。

  • カスタム メタデータ: ユーザーがキーとキーに関連する値の両方を指定して、追加するメタデータ。

メタデータを編集するときは、一般に非 ASCII 文字を使用しないでください。これらの文字は、XML API が使用する HTTP ヘッダーで許可されないためです。

固定キーメタデータ

オブジェクトについて次のメタデータを編集できますが、そのためには十分な権限が必要です。

アクセス制御メタデータ

Cloud Storage では、Identity and Access Management(IAM)アクセス制御リスト(ACL)を使用してオブジェクトへのアクセスを制御します。これらのアクセス制御方法や関連するメタデータについては、該当するリンクをご覧ください。

Cache-Control

Cache-Control メタデータでは、Cloud Storage でのデータの使用方法に関して、データをキャッシュに保存できるかどうか、データを変換できるかどうかの 2 つを指定できます。

データをキャッシュに格納する

Cache-Control メタデータを使用すると、キャッシュにオブジェクトを保存するかどうか、またキャッシュの有効期間を設定できます。また、これによって将来のリクエストに対応できます。キャッシュには、ブラウザ キャッシュ、インターネット キャッシュ、Cloud Storage の組み込みキャッシュが含まれます。

該当するオブジェクトに Cache-Control メタデータ エントリがない場合、Cloud Storage は次のデフォルト値を使用します。

キャッシュへの保存を有効にした場合、新しいバージョンをアップロードした後でも、引き続き以前のバージョンのオブジェクトを受け取る可能性があります。これは、max-age によって指定された期間中、以前のバージョンをキャッシュで「新規」のままにするためです。また、オブジェクトはインターネット上のさまざまな場所のキャッシュに保存されます。このため、キャッシュに保存されているオブジェクトをすべて強制的に期限切れにすることはできません。オブジェクトに対する公開アクセスを無効にしても、最後にアクセスされた日時とその Cache-Control 設定によっては、オブジェクトがキャッシュから提供される可能性があります。たとえば、Cache-Controlpublic, max-age=3600 に設定した場合、オブジェクトはキャッシュに 1 時間残ります。キャッシュに保存されたバージョンが一般公開されることを回避するには、オブジェクトに対して Cache-Control: no-store を設定します。

キャッシュの動作をより細かく制御するには、バケットの前に 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 オブジェクトのバージョンを明確にします。バケットでオブジェクトのバージョニングを使用しているかどうかに関係なく、オブジェクトごとに存在します。
  • オブジェクト バージョンの generation 値は変更されません。同じ名前の新しいオブジェクトを使用すると、既存のオブジェクトを置き換えることができますが、新しいオブジェクトには常に異なる generation が割り当てられます。
  • 後続のバージョンで世代番号が増えるとは限りません。新しいバージョンにのみ一意の世代番号が割り当てられます。
  • オブジェクトが同じバケット内にある場合でも、無関係なオブジェクトの世代番号には関係がありません。
metageneration これにより、メタデータのバージョンを識別します。対応する generation のメタデータが更新されるたびに増加します。
  • metageneration は、オブジェクトの新しい generation ごとに 1 から始まります。
  • metageneration プロパティは generation プロパティがないと意味がないため、必ず一緒に使用する必要があります。2 つのオブジェクト バージョンのメタデータの世代を比較しても意味がありません。

generation プロパティと metageneration プロパティは、次のような状況で使用されます。

チェックサム

チェックサムは、関連付けられたオブジェクトのデータから計算されるメタデータです。チェックサムは、オブジェクト データが破損していないことを検証するために使用されます。Cloud Storage オブジェクトには、いくつかのチェックサム メタデータ フィールドがあります。

CRC32C

Cloud Storage のすべてのオブジェクトに CRC32C ハッシュがあります。CRC32C を計算するためのライブラリには、以下があります。

Base64 でエンコードされた CRC32C のバイト順はビッグ エンディアンです。

MD5

次の条件を満たす場合、Cloud Storage オブジェクトに MD5 ハッシュが設定されます。

このハッシュは、完全なオブジェクトにのみ適用されるため、範囲 GET の実行によって生じる部分ダウンロードの整合性チェックには使用できません。

ETag

すべての Cloud Storage オブジェクトには ETag があります。ただし、XML API からのリクエストと JSON API からのリクエストでは、同じオブジェクトでも ETag 値が異なる場合があります。大半は、仕様のとおりです。ETag で使用される値について、基になるデータまたはメタデータが変更されるたびに値が変化するということ以外は想定できません。

次のすべてに該当する場合、オブジェクトの ETag ヘッダーはオブジェクトの MD5 値を返します。

変更日時

メタデータの一部として、すべての Cloud Storage オブジェクトには、オブジェクトのメタデータが最後に変更された日時を示す updated プロパティがあります。updated 時間はオブジェクトの作成時間に設定され、その後、オブジェクトのメタデータが変更されるたびに変更されます。この変更には、カスタム メタデータの変更など、リクエスト元による変更だけでなく、リクエスト元の代わりに Cloud Storage が行う変更(オブジェクトのライフサイクル構成に基づくストレージ クラスの変更など)も含まれます。

次のステップ