オブジェクトの作成

コンセプトに移動

このページでは、ソース オブジェクトを作成して複合オブジェクトを作成する方法について説明します。1 つのリクエストで 1~32 個のソース オブジェクトを作成できます。

複合オブジェクトを作成するには:

Console

Cloud Console では、オブジェクト作成の実行はサポートされていません。代わりに gsutil を使用してください。

gsutil

gsutil compose コマンドを使用します。

gsutil compose gs://BUCKET_NAME/SOURCE_OBJECT_1 gs://BUCKET_NAME/SOURCE_OBJECT_2 gs://BUCKET_NAME/COMPOSITE_OBJECT_NAME

ここで

  • BUCKET_NAME は、ソース オブジェクトを含むバケットの名前です。
  • SOURCE_OBJECT_1SOURCE_OBJECT_2 は、オブジェクト作成で使用するソース オブジェクトの名前です。
  • COMPOSITE_OBJECT_NAME は、オブジェクト作成の結果に付ける名前です。

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& destination_object_name,
   std::vector<gcs::ComposeSourceObject> const& compose_objects) {
  StatusOr<gcs::ObjectMetadata> composed_object = client.ComposeObject(
      bucket_name, compose_objects, destination_object_name);

  if (!composed_object) {
    throw std::runtime_error(composed_object.status().message());
  }

  std::cout << "Composed new object " << composed_object->name()
            << " in bucket " << composed_object->bucket()
            << "\nFull metadata: " << *composed_object << "\n";
}

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// composeFile composes source objects to create a composite object.
func composeFile(w io.Writer, bucket, object1, object2, toObject string) error {
	// bucket := "bucket-name"
	// object1 := "object-name-1"
	// object2 := "object-name-2"
	// toObject := "object-name-3"

	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %v", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	src1 := client.Bucket(bucket).Object(object1)
	src2 := client.Bucket(bucket).Object(object2)
	dst := client.Bucket(bucket).Object(toObject)

	// ComposerFrom takes varargs, so you can put as many objects here
	// as you want.
	_, err = dst.ComposerFrom(src1, src2).Run(ctx)
	if err != nil {
		return fmt.Errorf("ComposerFrom: %v", err)
	}
	fmt.Fprintf(w, "New composite object %v was created by combining %v and %v\n", toObject, object1, object2)
	return nil
}

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class ComposeObject {
  public static void composeObject(
      String bucketName,
      String firstObjectName,
      String secondObjectName,
      String targetObjectName,
      String projectId) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of the first GCS object to compose
    // String firstObjectName = "your-first-object-name";

    // The ID of the second GCS object to compose
    // String secondObjectName = "your-second-object-name";

    // The ID to give the new composite object
    // String targetObjectName = "new-composite-object-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();

    Storage.ComposeRequest composeRequest =
        Storage.ComposeRequest.newBuilder()
            // addSource takes varargs, so you can put as many objects here as you want, up to the
            // max of 32
            .addSource(firstObjectName, secondObjectName)
            .setTarget(BlobInfo.newBuilder(bucketName, targetObjectName).build())
            .build();

    Blob compositeObject = storage.compose(composeRequest);

    System.out.println(
        "New composite object "
            + compositeObject.getName()
            + " was created by combining "
            + firstObjectName
            + " and "
            + secondObjectName);
  }
}

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

def compose_file(bucket_name, sources, destination_blob_name):
    """Concatenate source blobs into destination blob."""
    # bucket_name = "your-bucket-name"
    # sources = [blob_1, blob_2]
    # destination_blob_name = "destination-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    destination = bucket.blob(destination_blob_name)
    destination.content_type = "text/plain"
    destination.compose(sources)

    print(
        "Composed new object {} in the bucket {}".format(
            destination_blob_name, bucket.name
        )
    )
    return destination

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

現時点では、C# クライアント ライブラリを使用してオブジェクトを作成することはできません。

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

NodeJS を使用してオブジェクトを作成する方法については、バケットのリファレンス ドキュメントをご覧ください。

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

PHP を使用してオブジェクトを作成する方法については、Google\Cloud\Storage\Bucket のリファレンス ドキュメントをご覧ください。

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

Ruby を使用してオブジェクトを作成する方法については、Google::Cloud::Storage のリファレンス ドキュメントをご覧ください。

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報が含まれる .json ファイルを作成します。

    {
      "sourceObjects": [
        {
          "name": "SOURCE_OBJECT_1"
        },
        {
          "name": "SOURCE_OBJECT_2"
        }
      ],
      "destination": {
        "contentType": "COMPOSITE_OBJECT_CONTENT_TYPE"
      }
    }

    ここで

    • SOURCE_OBJECT_1SOURCE_OBJECT_2 は、オブジェクト作成で使用するソース オブジェクトの名前です。
    • COMPOSITE_OBJECT_CONTENT_TYPE は、結果として得られる複合オブジェクトの Content-Type です。
  3. cURL を使用して、POST Object リクエストで JSON API を呼び出します。

    curl -X POST --data-binary @JSON_FILE_NAME.json \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/COMPOSITE_OBJECT_NAME/compose"

    ここで

    • JSON_FILE_NAME は、前の手順で作成したファイルの名前です。
    • OAUTH2_TOKEN は、ガイドの早い段階で生成したアクセス トークンです。
    • BUCKET_NAME は、ソース オブジェクトを含むバケットの名前です。
    • COMPOSITE_OBJECT_NAME は、オブジェクト作成の結果に付ける名前です。

成功した場合、レスポンスは結果として得られる複合オブジェクトのオブジェクト リソースです。

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報を含む .xml ファイルを作成します。

      <ComposeRequest>
        <Component>
          <Name>SOURCE_OBJECT_1</Name>
        </Component>
        <Component>
          <Name>SOURCE_OBJECT_2</Name>
        </Component>
      </ComposeRequest>

    ここで

    • SOURCE_OBJECT_1SOURCE_OBJECT_2 は、オブジェクト作成で使用するソース オブジェクトの名前です。
  3. cURL を使用して、PUT Object リクエストと compose クエリ文字列パラメータを含めた XML API を呼び出します。

    curl -X PUT --data-binary @XML_FILE_NAME.xml \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: COMPOSITE_OBJECT_CONTENT_TYPE" \
      "https://storage.googleapis.com/BUCKET_NAME/COMPOSITE_OBJECT_NAME?compose"

    ここで

    • XML_FILE_NAME は、前の手順で作成したファイルの名前です。
    • OAUTH2_TOKEN は、ガイドの早い段階で生成したアクセス トークンです。
    • COMPOSITE_OBJECT_CONTENT_TYPE は、結果として得られる複合オブジェクトの Content-Type です。
    • BUCKET_NAME は、ソース オブジェクトを含むバケットの名前です。
    • COMPOSITE_OBJECT_NAME は、オブジェクト作成の結果に付ける名前です。

成功した場合は、空のレスポンス本文が返されます。

次のステップ