このページでは、追加のオブジェクト データを転送せずに既存のオブジェクトから作成する複合オブジェクトについて説明します。複合オブジェクトは、既存のオブジェクトに追加する場合や、複数のコンポーネントを並行してアップロードしたオブジェクトを再構成する場合に役立ちます。
作成オペレーション
作成オペレーションでは、指定した一連のソース オブジェクト内のデータが連結され、複合オブジェクトという新しいオブジェクトが作成されます。ソース オブジェクトはすべて、次の条件を満たしている必要があります。
- ストレージ クラスが同じであること。
- 同じ Cloud Storage バケットに保存されていること。
作成を実行する場合:
- ソース オブジェクトは影響を受けません。
- 1~32 個のソース オブジェクトを使用できます。
- ソース オブジェクト自体を複合オブジェクトにすることができます。
結果として得られる複合オブジェクト:
- ソース オブジェクトと同じストレージ クラスになります。
- ソース オブジェクトがあとで置換または削除されても、これは変更されません。
gcloud storage
を使用してオブジェクトの作成を実行した場合、結果として得られる複合オブジェクトの Content-Type
は、最初のソース オブジェクトの Content-Type
と一致するように設定されます。
複合オブジェクトのメタデータ
複合オブジェクトのメタデータと他のオブジェクトのメタデータにはいくつかの違いがあります。
複合オブジェクトには、MD5 ハッシュのメタデータ フィールドはありません。
複合オブジェクトの ETag 値は MD5 ハッシュに基づいていないため、クライアント コードでは、複合オブジェクトの ETag 値は基になるオブジェクトが HTTP/1.1 の IETF 仕様に応じて変化するたびに変化するということ以外、ETag 値について仮定することはできません。
各複合オブジェクトには、複合オブジェクト内に含まれる非複合オブジェクトの数をカウントするコンポーネント数メタデータ フィールドがあります。
- 複合オブジェクトを別の場所やストレージ クラスに書き換えると、コンポーネント数が 1 の複合オブジェクトになります。
複合オブジェクトの整合性チェック
Cloud Storage は、アップロード時に各ソース オブジェクトの整合性チェックを実行し、ダウンロード時に発信者が結果の複合オブジェクトの整合性チェックを実行できるようにするために、CRC32C を使用します。CRC32C は、そのコンポーネントの CRC32C 値から効率的に計算することができる誤り検出符号です。アプリケーションで以下のように CRC32C を使用する必要があります。
- ソース オブジェクトをアップロードする場合、オブジェクト メタデータのページにリストされているような CRC32C ライブラリを使用して各オブジェクトの CRC32C を計算し、その値をリクエストに含める必要あります。指定した値に基づいて、Cloud Storage では各アップロードが検証されます。
- 作成オペレーションでは、ソース オブジェクトが正しく組み立てられているかどうかが自動的にチェックされ、作成リクエストの一部として指定した CRC32C 値は無視されます。結果として生じる複合オブジェクトの CRC32C がレスポンスで返されます。
- ソース オブジェクトのアップロード時と作成時との間に、アプリケーションでオブジェクトが変更される可能性がある場合は、競合状態を防止するために、ソース オブジェクトに世代固有の名前を付ける必要があります。あるいは、目的のソース オブジェクトの CRC32C 値から CRC32C 値をビルドし、作成オペレーションによって返された CRC32C 値と比較することもできます。
- ダウンロード時には、ダウンロードしたオブジェクトの CRC32C を計算し、その値をレスポンスに含まれた値と比較する必要があります。
制限付きの追加と編集
作成オペレーションを使用して、制限付きのオブジェクトの追加と編集を実行できます。
追加を実行するには、データを新しい一時オブジェクトにアップロードし、この一時オブジェクトとともに追加するオブジェクトを作成して、一時オブジェクトを削除します。作成オペレーションの出力には元のオブジェクトと同じ名前にすることもできます。
たとえば、gcloud CLI で既存の Cloud Storage オブジェクトに文字列 new data
を追加する一連のコマンドは次のとおりです。
$ echo 'new data' | gcloud storage cp - gs://bucket/temporary_object $ gcloud storage objects compose gs://bucket/object_to_append gs://bucket/temporary_object \ gs://bucket/object_to_append $ gcloud storage rm gs://bucket/temporary_object
また、作成オペレーションを使用して、オブジェクト編集の基本的な機能をサポートすることもできます。たとえば、シーケンス {Y1, Y2, Y3} からオブジェクト X を作成し、Y2 のコンテンツを変更して、同じコンポーネントで X を再作成できます。これを行うには、これらのコンポーネントとコンポジットに対して課金されるようにするために、Y1、Y2、Y3 を削除せずに残しておく必要がありますので注意してください。
複合オブジェクトのコンテキスト
複合オブジェクトのオペレーション中に、Cloud Storage はソース オブジェクトのすべてのコンテキスト(プレビュー)をマージし、これらのコンテキストを宛先オブジェクトに付加します。コンテキストは、次のセクションで説明するように、一意のコンテキスト キーと重複するコンテキスト キーの両方を処理するためにマージされます。
一意のコンテキスト キー
ソース オブジェクトに一意のコンテキスト キーがある場合、Cloud Storage はこれらのキーと対応する値を宛先オブジェクトに付加します。
次に例を示します。
ソース オブジェクト A のコンテキスト: Department: Engineering, Status: Active
ソース オブジェクト B のコンテキスト: Owner: m_jones, Version: 1.1
作成オペレーションの後、宛先オブジェクトには次の結合されたコンテキストがあります。
{ "contexts": { "custom": { "Department": { "value": "Engineering", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Status": { "value": "Active", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Owner": { "value": "m_jones", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Version": { "value": "1.1", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" } } } }
重複するコンテキスト キー
複数のソース オブジェクトに同じコンテキスト キーがある場合、Cloud Storage によって最後に処理されたオブジェクトの値は、それ以前に処理されたオブジェクトの値をオーバーライドします。
たとえば、次の順序で処理されるソース オブジェクトについて考えてみましょう。
ソース オブジェクト A
ソース オブジェクト B
ソース オブジェクト A のコンテキスト: Version: 1.0, ReleaseDate: 2024-01-15
ソース オブジェクト B のコンテキスト: Version: 1.1, Owner: m_jones
両方のソース オブジェクトに Version
キーがありますが、オブジェクト A には Version: 1.0
があり、オブジェクト B には Version: 1.1
があります。Cloud Storage はソース オブジェクト A の後にソース オブジェクト B を処理するため、ソース オブジェクト B の Version
値が優先され、最終的な値は 1.1
になります。
宛先オブジェクトは、これらのコンテキストを次のように結合します。
{ "contexts": { "custom": { "Version": { "value": "1.1", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" }, "ReleaseDate": { "value": "2024-01-15", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" }, "Owner": { "value": "m_jones", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" } } } }
次のステップ
- オブジェクトを作成する。
- 並列複合アップロードについて学習する。
- 複数のチャンクでオブジェクトをアップロードする方法に代わる、XML API ユーザー向けのマルチパート アップロードについて確認する。
- オブジェクト コンテキストについて学習する。