オブジェクトのバージョニングの使用

コンセプトに移動

このページでは、オブジェクトのバージョニングの設定方法と使用例を示します。

オブジェクトのバージョニングの設定

以降のセクションでは、gsutil ツールJSON APIXML API を使用してオブジェクトのバージョニングを有効または無効にする方法について説明します。現在、オブジェクトのバージョニングは Google Cloud Console を使用して制御できません。

オブジェクトのバージョニングの有効化

バケットでオブジェクトのバージョニングを有効にするには:

gsutil

gsutil versioning set on コマンドを使用します。

gsutil versioning set on gs://BUCKET_NAME

BUCKET_NAME は、該当するバケットの名前です。例: my-bucket

コードサンプル

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{true}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

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

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class EnableBucketVersioning {
  public static void enableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

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

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(true).build().update();

    System.out.println("Versioning is now enabled for bucket " + bucketName);
  }
}

Python

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

from google.cloud import storage

def enable_versioning(bucket_name):
    """Enable versioning for this bucket."""
    # bucket_name = "my-bucket"

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.versioning_enabled = True
    bucket.patch()

    print("Versioning was enabled for bucket {}".format(bucket.name))
    return bucket

REST API

JSON API

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

    {
      "versioning": {
        "enabled": true
      }
    }
  3. cURL を使用して JSON API を呼び出し、PATCH Bucket リクエストを行います。

    curl -X PATCH --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?fields=versioning"

    ここで

    • JSON_FILE_NAME は、手順 2 で作成したファイルです。
    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

XML API

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

    <VersioningConfiguration>
      <Status>Enabled</Status>
    </VersioningConfiguration>
  3. cURL を使用して、PUT Bucket リクエストと versioning クエリ文字列パラメータを含めた XML API を呼び出します。

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

    ここで

    • XML_FILE_NAME は、手順 2 で作成したファイルです。
    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

オブジェクトのバージョニングが有効になると、オブジェクトのライブ バージョンが置換または削除されるたびに、そのバージョンが非現行バージョンになります。

オブジェクトのバージョニングの無効化

バケットでオブジェクトのバージョニングを無効にするには:

gsutil

gsutil versioning set off コマンドを使用します。

gsutil versioning set off gs://BUCKET_NAME

BUCKET_NAME は、該当するバケットの名前です。例: my-bucket

コードサンプル

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{false}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

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

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DisableBucketVersioning {
  public static void disableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

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

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(false).build().update();

    System.out.println("Versioning is now disabled for bucket " + bucketName);
  }
}

Python

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

from google.cloud import storage

def disable_versioning(bucket_name):
    """Disable versioning for this bucket."""
    # bucket_name = "my-bucket"

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.versioning_enabled = False
    bucket.patch()

    print("Versioning was disabled for bucket {}".format(bucket))
    return bucket

REST API

JSON API

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

    {
      "versioning": {
        "enabled": false
      }
    }
  3. cURL を使用して JSON API を呼び出し、PATCH Bucket リクエストを行います。

    curl -X PATCH --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?fields=versioning"

    ここで

    • JSON_FILE_NAME は、手順 2 で作成したファイルです。
    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

XML API

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

    <VersioningConfiguration>
      <Status>Suspended</Status>
    </VersioningConfiguration>
  3. cURL を使用して、PUT Bucket リクエストと versioning クエリ文字列パラメータを含めた XML API を呼び出します。

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

    ここで

    • XML_FILE_NAME は、手順 2 で作成したファイルです。
    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

オブジェクトのバージョニングが有効になっているかどうかの確認

バケットでオブジェクトのバージョニングが有効になっているかどうかを確認するには:

gsutil

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

gsutil versioning get gs://BUCKET_NAME

BUCKET_NAME は、該当するバケットの名前です。例: my-bucket

オブジェクトのバージョニングが有効になっている場合のレスポンスは次のようになります。

gs://my-bucket: Enabled

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して JSON API を呼び出し、GET Bucket リクエストを行います。

    curl -X GET \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=versioning"

    ここで

    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、GET Bucket リクエストと versioning クエリ文字列パラメータを含めた XML API を呼び出します。

    curl -X GET \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/BUCKET_NAME?versioning"

    ここで

    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

バージョニングされたオブジェクトの操作

以下では、バージョニングされたオブジェクトを操作する方法について説明します。オブジェクトのバージョニングの操作方法について詳しくは、オブジェクトのバージョン管理の例をご覧ください。

非現行バージョンのオブジェクトの一覧表示

オブジェクトのライブ バージョンと非現行バージョンの両方を一覧表示し、generation 番号を表示するには:

gsutil

gsutil ls -a コマンドを使用します。

gsutil ls -a gs://BUCKET_NAME

BUCKET_NAME は、該当するバケットの名前です。例: my-bucket

次の例のようなレスポンスになります。

gs://BUCKET_NAME/OBJECT_NAME1#GENERATION_NUMBER1
gs://BUCKET_NAME/OBJECT_NAME2#GENERATION_NUMBER2
gs://BUCKET_NAME/OBJECT_NAME3#GENERATION_NUMBER3
...

コードサンプル

C++

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

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name) {
  for (auto&& object_metadata :
       client.ListObjects(bucket_name, gcs::Versions{true})) {
    if (!object_metadata) {
      throw std::runtime_error(object_metadata.status().message());
    }

    std::cout << "bucket_name=" << object_metadata->bucket()
              << ", object_name=" << object_metadata->name()
              << ", generation=" << object_metadata->generation() << "\n";
  }
}

Go

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

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

	"cloud.google.com/go/storage"
	"google.golang.org/api/iterator"
)

// listFilesAllVersion lists both live and noncurrent versions of objects within specified bucket.
func listFilesAllVersion(w io.Writer, bucket string) error {
	// bucket := "bucket-name"
	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()

	it := client.Bucket(bucket).Objects(ctx, &storage.Query{
		// Versions true to output all generations of objects
		Versions: true,
	})
	for {
		attrs, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Bucket(%q).Objects(): %v", bucket, err)
		}
		fmt.Fprintln(w, attrs.Name, attrs.Generation, attrs.Metageneration)
	}
	return nil
}

Java

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

import com.google.api.gax.paging.Page;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class ListObjectsWithOldVersions {
  public static void listObjectsWithOldVersions(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";
    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    Page<Blob> blobs = bucket.list(Storage.BlobListOption.versions(true));

    for (Blob blob : blobs.iterateAll()) {
      System.out.println(blob.getName() + "," + blob.getGeneration());
    }
  }
}

Node.js

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function listFilesWithOldVersions() {
  const [files] = await storage.bucket(bucketName).getFiles({
    versions: true,
  });

  console.log('Files:');
  files.forEach(file => {
    console.log(file.name, file.generation);
  });
}

listFilesWithOldVersions().catch(console.error);

Python

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

from google.cloud import storage

def list_file_archived_generations(bucket_name):
    """Lists all the blobs in the bucket with generation."""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()

    blobs = storage_client.list_blobs(bucket_name)

    for blob in blobs:
        print("{},{}".format(blob.name, blob.generation))

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、LIST Object リクエストで JSON API を呼び出します。

    curl -X GET \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o?versions=true"

    ここで

    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

非現行バージョンのオブジェクトには timeDeleted プロパティがあります。

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、GET Bucket リクエストと versions クエリ文字列パラメータを含めた XML API を呼び出します。

    curl -X GET \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/BUCKET_NAME?versions"

    ここで

    • OAUTH2_TOKEN は、手順 1 で作成したアクセス トークンです。
    • BUCKET_NAME は、関連するバケットの名前です。例: my-bucket

versions クエリ文字列パラメータを使用する場合と使用しない場合では、GET リクエストの結果にいくつかの違いが生じます。具体的には、リクエストに versions クエリ パラメータを含めると、Cloud Storage から次の情報が返されます。

  • 各オブジェクトに関する情報が含まれる Version 要素。
  • オブジェクトが非現行バージョンになった(削除や置換)時間を含む DeletedTime 要素。
  • 特定のオブジェクトが最新バージョンかどうかを示す IsLatest 要素。
  • オブジェクトのリストが部分的なリストである場合は、NextGenerationMarker 要素が返されます。これは、バケットに多数のオブジェクトのバージョンがある場合に発生します。最後のポイントから再開するには、後続のリクエストの generationmarker クエリ パラメータでこの要素の値を使用します。generationmarker クエリ パラメータは、marker クエリ パラメータを使用して、バージョニングされていないバケットのリストをページ割り付けするのと同じ方法で使用されます。

非現行バージョンのオブジェクトへのアクセス

オブジェクトのダウンロード、オブジェクトのメタデータの表示、オブジェクトのメタデータの更新などのタスクを実行するときにオブジェクトの非現行バージョンを使用するには:

gsutil

  1. オブジェクト名に、非現行バージョンの generation 番号を追加します。

    OBJECT_NAME#GENERATION_NUMBER

    ここで

    • OBJECT_NAME は、非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、非現行バージョンの世代番号です。例: 1560468815691234
  2. 手順 1 の文字列を使用して、通常のライブ バージョンのオブジェクトの場合と同じように処理します。

REST API

JSON API

  1. オブジェクトの URI に非現行バージョンの generation 番号を追加します。

    https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?generation=GENERATION_NUMBER

    ここで

    • BUCKET_NAME は、非現行バージョンを含むバケットの名前です。例: my-bucket
    • OBJECT_NAME は、非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、非現行バージョンの世代番号です。例: 1560468815691234
  2. 手順 1 の URI を使用して、通常のライブ バージョンのオブジェクトの場合と同じように処理します。

XML API

  1. オブジェクトの URI に非現行バージョンの generation 番号を追加します。

    https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?generation=GENERATION_NUMBER

    ここで

    • BUCKET_NAME は、非現行バージョンを含むバケットの名前です。例: my-bucket
    • OBJECT_NAME は、非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、非現行バージョンの世代番号です。例: 1560468815691234
  2. 手順 1 の URI を使用して、通常のライブ バージョンのオブジェクトの場合と同じように処理します。

非現行バージョンのオブジェクトのコピー

非現行バージョンのオブジェクトをコピーするには:

gsutil

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

gsutil cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME#GENERATION_NUMBER gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME

ここで

  • SOURCE_BUCKET_NAME は、コピーする非現行バージョンを含むバケットの名前です。例: my-bucket
  • SOURCE_OBJECT_NAME は、コピーする非現行バージョンの名前です。例: pets/dog.png
  • GENERATION_NUMBER は、コピーする非現行バージョンの世代番号です。例: 1560468815691234
  • DESTINATION_BUCKET_NAME は、非現行バージョンをコピーするバケットの名前です。例: my-bucket
  • DESTINATION_OBJECT_NAME は、非現行バージョンのコピーの名前です。例: pets/shiba.png

成功した場合は、次の例のようなレスポンスになります。

Operation completed over 1 objects/58.8 KiB.

コードサンプル

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& source_bucket_name,
   std::string const& source_object_name,
   std::string const& destination_bucket_name,
   std::string const& destination_object_name,
   std::int64_t source_object_generation) {
  StatusOr<gcs::ObjectMetadata> copy =
      client.CopyObject(source_bucket_name, source_object_name,
                        destination_bucket_name, destination_object_name,
                        gcs::SourceGeneration{source_object_generation});
  if (!copy) throw std::runtime_error(copy.status().message());

  std::cout << "Successfully copied " << source_object_name << " generation "
            << source_object_generation << " in bucket " << source_bucket_name
            << " to bucket " << copy->bucket() << " with name "
            << copy->name()
            << ".\nThe full metadata after the copy is: " << *copy << "\n";
}

Java

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

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class CopyOldVersionOfObject {
  public static void copyOldVersionOfObject(
      String projectId,
      String bucketName,
      String objectToCopy,
      long generationToCopy,
      String newObjectName) {
    // 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 GCS object to copy an old version of
    // String objectToCopy = "your-object-name";

    // The generation of objectToCopy to copy
    // long generationToCopy = 1579287380533984;

    // What to name the new object with the old data from objectToCopy
    // String newObjectName = "your-new-object";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Storage.CopyRequest copyRequest =
        Storage.CopyRequest.newBuilder()
            .setSource(BlobId.of(bucketName, objectToCopy, generationToCopy))
            .setTarget(BlobId.of(bucketName, newObjectName))
            .build();
    storage.copy(copyRequest);

    System.out.println(
        "Generation "
            + generationToCopy
            + " of object "
            + objectToCopy
            + " in bucket "
            + bucketName
            + " was copied to "
            + newObjectName);
  }
}

Node.js

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const srcBucketName = 'Name of the source bucket, e.g. my-bucket';
// const srcFilename = 'Name of the source file, e.g. file.txt';
// const destBucketName = 'Name of the destination bucket, e.g. my-other-bucket';
// const destFilename = 'Destination name of file, e.g. file.txt';
// const generation = 'The generation of file to copy, e.g. 1'

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function copyOldVersionOfFile() {
  // Copies the file to the other bucket
  await storage
    .bucket(srcBucketName)
    .file(srcFilename, {
      generation,
    })
    .copy(storage.bucket(destBucketName).file(destFilename));

  console.log(
    `Generation ${generation} of file ${srcFilename} in bucket ${srcBucketName} was copied to ${destFilename} in bucket ${destBucketName}.`
  );
}

copyOldVersionOfFile().catch(console.error);

Python

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

from google.cloud import storage

def copy_file_archived_generation(
        bucket_name, blob_name, destination_bucket_name, destination_blob_name, generation
):
    """Copies a blob from one bucket to another with a new name with the same generation."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # destination_bucket_name = "destination-bucket-name"
    # destination_blob_name = "destination-object-name"
    # generation = 1579287380533984

    storage_client = storage.Client()

    source_bucket = storage_client.bucket(bucket_name)
    source_blob = source_bucket.blob(blob_name)
    destination_bucket = storage_client.bucket(destination_bucket_name)

    blob_copy = source_bucket.copy_blob(
        source_blob, destination_bucket, destination_blob_name, source_generation=generation
    )

    print(
        "Generation {} of the blob {} in bucket {} copied to blob {} in bucket {}.".format(
            source_blob.generation,
            source_blob.name,
            source_bucket.name,
            blob_copy.name,
            destination_bucket.name,
        )
    )

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、POST Object リクエストで JSON API を呼び出します。

    curl -X POST \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/upload/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/NAME_OF_COPY?sourceGeneration=GENERATION_NUMBER"

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • SOURCE_BUCKET_NAME は、コピーする非現行バージョンを含むバケットの名前です。例: my-bucket
    • SOURCE_OBJECT_NAME は、コピーする非現行バージョンの名前です。例: pets/dog.png
    • DESTINATION_BUCKET_NAME は、非現行バージョンをコピーするバケットの名前です。例: my-bucket
    • NAME OF COPY は、非現行バージョンのコピーの名前です。例: pets/shiba.png
    • GENERATION_NUMBER は、コピーする非現行バージョンの世代番号です。例: 1560468815691234

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、PUT Object リクエストで XML API を呼び出します。

    curl -X PUT \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "x-goog-copy-source: SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME" \
      -H "x-goog-copy-source-generation:GENERATION_NUMBER" \
      "https://storage.googleapis.com/DESTINATION_BUCKET_NAME/NAME_OF_COPY"

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • SOURCE_BUCKET_NAME は、コピーする非現行バージョンを含むバケットの名前です。例: my-bucket
    • SOURCE_OBJECT_NAME は、コピーする非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、コピーする非現行バージョンの世代番号です。例: 1560468815691234
    • DESTINATION_BUCKET_NAME は、非現行バージョンをコピーするバケットの名前です。例: my-bucket
    • NAME OF COPY は、非現行バージョンのコピーの名前です。例: pets/shiba.png

非現行バージョンのオブジェクトの削除

非現行バージョンのオブジェクトを削除するには:

gsutil

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

gsutil rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

ここで

  • BUCKET_NAME は、削除する非現行バージョンを含むバケットの名前です。例: my-bucket
  • OBJECT_NAME は、削除する非現行バージョンの名前です。例: pets/dog.png
  • GENERATION_NUMBER は、削除する非現行バージョンの世代番号です。例: 1560468815691234

成功した場合は、次の例のようなレスポンスになります。

Operation completed over 1 objects.

コードサンプル

C++

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

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name, std::int64_t object_generation) {
  google::cloud::Status status = client.DeleteObject(
      bucket_name, object_name, gcs::Generation{object_generation});
  if (!status.ok()) throw std::runtime_error(status.message());

  std::cout << "Deleted " << object_name << " generation "
            << object_generation << " in bucket " << bucket_name << "\n";
}

Java

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

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DeleteOldVersionOfObject {
  public static void deleteOldVersionOfObject(
      String projectId, String bucketName, String objectName, long generationToDelete) {
    // 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 your GCS object
    // String objectName = "your-object-name";

    // The generation of objectName to delete
    // long generationToDelete = 1579287380533984;

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    storage.delete(BlobId.of(bucketName, objectName, generationToDelete));

    System.out.println(
        "Generation "
            + generationToDelete
            + " of object "
            + objectName
            + " was deleted from "
            + bucketName);
  }
}

Node.js

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to delete, e.g. file.txt';
// const generation = 'Generation of file to delete, e.g. 1';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function deleteOldVersionOfFile() {
  // Deletes the file from the bucket with given version
  await storage
    .bucket(bucketName)
    .file(filename, {
      generation,
    })
    .delete();

  console.log(
    `Generation ${generation} of file ${filename} was deleted from ${bucketName}.`
  );
}

deleteOldVersionOfFile().catch(console.error);

Python

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

from google.cloud import storage

def delete_file_archived_generation(bucket_name, blob_name, generation):
    """Delete a blob in the bucket with the given generation."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # generation = 1579287380533984

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.delete_blob(blob_name, generation=generation)
    print(
        "Generation {} of blob {} was deleted from {}".format(
            generation, blob_name, bucket_name
        )
    )

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、DELETE Object リクエストで JSON API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?generation=GENERATION_NUMBER"

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • BUCKET_NAME は、削除する非現行バージョンを含むバケットの名前です。例: my-bucket
    • OBJECT_NAME は、削除する非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、削除する非現行バージョンの世代番号です。例: 1560468815691234

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、DELETE Object リクエストで XML API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?generation=GENERATION_NUMBER"

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • BUCKET_NAME は、削除する非現行バージョンを含むバケットの名前です。例: my-bucket
    • OBJECT_NAME は、削除する非現行バージョンの名前です。例: pets/dog.png
    • GENERATION_NUMBER は、削除する非現行バージョンの世代番号です。例: 1560468815691234

次のステップ