バケットの移動と名前変更

バケットを作成する際、その名前、地理的なロケーション、所属プロジェクトを完全に定義します。ただし、実際にはバケットの移動や名前変更は可能です。

  • 古いバケットにデータがない場合は、バケットを削除して、新しいロケーションで、または新しいプロジェクトで、新しい名前の別のバケットを作成します。

  • バケットにデータが含まれている場合は、新しい名前、ロケーション、プロジェクトを指定して新しいバケットを作成し、データを古い方のバケットから新しいバケットにコピーしたうえで、古いバケットとその内容を削除します。手順については、下記をご覧ください。

    新しいバケットに古いバケットと同じ名前を使用する場合は、データを 2 回移動する必要があります。つまり、仲介役となるバケットに一時的にデータを入れ、後で新しいバケットにデータを移動します。この方法により、古いバケットを削除してそのバケット名を解放し、新しいバケットにその名前を指定できます。

バケット間でデータを移動するには:

手順 1)新しいバケットを作成する

Console

  1. Google Cloud Platform Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. [バケットを作成] をクリックして、バケット作成フォームを開きます。
  3. 新しいバケット。

  4. バケット情報を入力し、[続行] をクリックして各手順を完了します。
    • バケット名の要件に従って、名前を指定します。
    • バケットのデフォルトのストレージ クラスを選択します。デフォルトのストレージ クラスは、バケットに対してアップロードされたすべてのオブジェクトにデフォルトで割り当てられます。次に、バケットデータが永続的に保存されるロケーションを選択します。

      注: 右側の [毎月の費用の見積もり] パネルでは、選択したストレージ クラスとロケーション、予想されるデータサイズとオペレーションに基づいてバケットの毎月のコストを見積もります。

    • [アクセス制御モデル] を選択して、バケットのオブジェクトに対するアクセスの制御方法を決定します。
    • 必要に応じて、バケットラベルの追加、保持ポリシーの設定、暗号化方式の選択を行えます。
  5. [完了] をクリックします。

gsutil

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

gsutil mb gs://[BUCKET_NAME]/

ここで

  • [BUCKET_NAME] は、バケットに付ける名前で、命名要件の対象となります。例: my-bucket

次のオプション フラグを設定すると、バケットの作成をより詳細に管理できます。

次に例を示します。

  gsutil mb -p [PROJECT_NAME] -c [STORAGE_CLASS] -l [BUCKET_LOCATION] -b on gs://[BUCKET_NAME]/

コードサンプル

の JSON API リファレンスをご覧ください。

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata =
      client.CreateBucket(bucket_name, gcs::BucketMetadata());

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

  std::cout << "Bucket " << bucket_metadata->name() << " created."
            << "\nFull Metadata: " << *bucket_metadata << "\n";
}

C#

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

private void CreateBucket(string bucketName)
{
    var storage = StorageClient.Create();
    storage.CreateBucket(s_projectId, bucketName);
    Console.WriteLine($"Created {bucketName}.");
}

Go

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

bucket := client.Bucket(bucketName)
if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
	StorageClass: "COLDLINE",
	Location:     "asia",
}); err != nil {
	return err
}

Java

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

Bucket bucket =
    storage.create(
        BucketInfo.newBuilder(bucketName)
            // See here for possible values: http://g.co/cloud/storage/docs/storage-classes
            .setStorageClass(StorageClass.COLDLINE)
            // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr
            .setLocation("asia")
            .build());

Node.js

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

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

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

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

// Creates a new bucket in the Asia region with the coldline default storage
// class. Leave the second argument blank for default settings.
//
// For default values see: https://cloud.google.com/storage/docs/locations and
// https://cloud.google.com/storage/docs/storage-classes
await storage.createBucket(bucketName, {
  location: 'ASIA',
  storageClass: 'COLDLINE',
});

console.log(`Bucket ${bucketName} created.`);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Create a Cloud Storage Bucket.
 *
 * @param string $bucketName name of the bucket to create.
 * @param string $options options for the new bucket.
 *
 */
function create_bucket($bucketName, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->createBucket($bucketName, $options);
    printf('Bucket created: %s' . PHP_EOL, $bucket->name());
}

Python

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

def create_bucket(bucket_name):
    """Creates a new bucket."""
    storage_client = storage.Client()
    bucket = storage_client.create_bucket(bucket_name)
    print('Bucket {} created'.format(bucket.name))

Ruby

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

# project_id    = "Your Google Cloud project ID"
# bucket_name   = "Name of Google Cloud Storage bucket to create"
# location      = "Location of where to create Cloud Storage bucket"
# storage_class = "Storage class of Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.create_bucket bucket_name,
                                location:      location,
                                storage_class: storage_class

puts "Created bucket #{bucket.name} in #{location}" +
     " with #{storage_class} class"

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
  2. 次の情報が含まれる .json ファイルを作成します。
  3. {
      "name": "[BUCKET_NAME]",
      "location": "[BUCKET_LOCATION]",
      "storageClass": "[STORAGE_CLASS]"
    }

    ここで

  4. cURL を使用して JSON API を呼び出します。
    curl -X POST --data-binary @[JSON_FILE_NAME].json \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "Content-Type: application/json" \
         "https://www.googleapis.com/storage/v1/b?project=[PROJECT_ID]"

    ここで

    • [JSON_FILE_NAME] は手順 2 で作成した JSON ファイルの名前です。
    • [OAUTH2_TOKEN] は、ステップ 1 で生成したアクセス トークンです。
    • [PROJECT_ID] は、バケットが関連付けられるプロジェクトの ID です。例: my-project

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
  2. 次の情報を含む .xml ファイルを作成します。
  3. <CreateBucketConfiguration>
       <LocationConstraint>[BUCKET_LOCATION]</LocationConstraint>
       <StorageClass>[STORAGE_CLASS]</StorageClass>
    </CreateBucketConfiguration>

    ここで

  4. cURL を使用して、XML API を呼び出します。
    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "x-goog-project-id: [PROJECT_ID]" \
         "https://storage.googleapis.com/[BUCKET_NAME]"

    ここで

    • [XML_FILE_NAME] は手順 2 で作成した XML ファイルの名前です。
    • [OAUTH2_TOKEN] は、ステップ 1 で生成したアクセス トークンです。
    • [PROJECT_ID] は、バケットが関連付けられるプロジェクトの ID です。例: my-project
    • [BUCKET_NAME] は、バケットに付ける名前で、命名要件の対象となります。例: my-bucket

手順 2)古いバケットから新しいバケットにオブジェクトをコピーする

Console

Google Cloud Platform Console から Cloud Storage Transfer Service を使用し、Cloud Storage のバケット間でデータをコピーします。

  1. Google Cloud Platform Console で [転送] ページを開きます。

    [転送] ページを開く

  2. [転送ジョブを作成] をクリックします。
  3. 段階的チュートリアルに沿って、各手順を完了するごとに [次へ] をクリックします。

    • ソースの選択: 選択したソースとして Google Cloud Storage バケットを使用し、[参照] をクリックして、オブジェクトを削除するバケットを見つけて選択します。

    • 転送先の選択: [参照] をクリックして、オブジェクトの移動先のバケットを見つけて選択します。

      また、[転送完了後に転送元オブジェクトを削除する] チェックボックスをオンにします。

    • 転送の構成: このセクションは無視してください。

  4. 段階的なチュートリアルの完了後、[作成] をクリックします。

    これで古いバケットから新しいバケットへのオブジェクトのコピーが開始されます。このプロセスには時間がかかる場合がありますが、[作成] をクリックした後は Google Cloud Platform Console を離れることができます。

転送の進行状況を表示するには、Google Cloud Platform Console で [転送] ページを開きます。

[転送] ページを開く

gsutil

  1. 少なくとも gsutil 4.12 がインストールされていることを確認してください。
  2. -r オプション付きで gsutil cp コマンドを使用し、転送元バケットからすべてのオブジェクトを転送先バケットに再帰的にコピーします。

    gsutil cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]

    ここで

    • [SOURCE_BUCKET] は、元のバケットの名前です。例: old-bucket
    • [DESTINATION_BUCKET] は、手順 1)新しいバケットを作成するで作成した新しいバケットの名前です。例: my-bucket

REST API

JSON API

JSON API の rewrite メソッドを使用し、サイズ制限されたデータのかたまりを複数のリクエストを介してコピーします。この操作を行う際は、すべてのデータの移動が完了するまで rewrite メソッドをループして呼び出す必要があります。

  1. cURLJSON API rewrite メソッドを使用して、転送元バケットから転送先バケットにデータをコピーします。

    curl -X POST \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    "https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1)新しいバケットを作成するのステップ 1 で生成したアクセス トークンです。
    • [SOURCE_BUCKET] は、元のバケットの名前です。例: old-bucket
    • [OBJECT_NAME] は、コピーするオブジェクトの名前です。例: pets/dog.png
    • [DESTINATION_BUCKET] は、手順 1)新しいバケットを作成するで作成した新しいバケットの名前です。例: my-bucket

    たとえば、オブジェクトのサイズが 10 GB の場合、このリクエストへのレスポンスは次のようになります。

    {
    "kind": "storage#rewriteResponse",
    "totalBytesRewritten": 1048576,
    "objectSize": 10000000000,
    "done": false,
    "rewriteToken": [TOKEN_VALUE]
    }
  2. 後続のリクエストで rewriteToken を使用して、データのコピーを続行します。

    curl -X POST \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    -d '{"rewriteToken": "[TOKEN_VALUE]"}' \
    "https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1)新しいバケットを作成するのステップ 1 で生成したアクセス トークンです。
    • [TOKEN_VALUE] は、ステップ 1 で返された rewriteToken 値です。
    • [SOURCE_BUCKET] は、元のバケットの名前です。例: old-bucket
    • [OBJECT_NAME] は、コピーするオブジェクトの名前です。例: pets/bunny.png
    • [DESTINATION_BUCKET] は、手順 1)新しいバケットを作成するで作成した新しいバケットの名前です。例: my-bucket

すべてのデータがコピーされると、最後のレスポンスに true と等しい done プロパティは含まれますが、rewriteToken プロパティは含まれず、オブジェクトにコピーされたメタデータが resource プロパティに含まれます。

{
  "kind": "storage#rewriteResponse",
  "totalBytesRewritten": 10000000000,
  "objectSize": 10000000000,
  "done": true,
  "resource": objects Resource
}

手順 3)古いバケットのオブジェクトを削除する

Console

古いバケットからオブジェクトを削除するために行う必要があることはありません。転送サービスを使用したオブジェクトのコピーの一部として、古いオブジェクトは自動的に削除されます。この場合、[転送完了後に転送元のオブジェクトを削除する] がオンになっていることが前提です。

gsutil

-r オプション付きで gsutil rm コマンドを使用して、転送元バケットからすべてのオブジェクトとバケット自体を再帰的に削除します。

gsutil rm -r gs://[SOURCE_BUCKET]

ここで、[SOURCE_BUCKET] は元のバケットの名前です。例: old-bucket

または、オブジェクトは削除しますが、転送元バケットは維持します。

gsutil rm -a gs://[SOURCE_BUCKET]/**

REST API

JSON API

  • cURLJSON API delete メソッドを使用して、次のコマンドで元のバージョンのデータを削除します。

    curl -X DELETE \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    "https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1)新しいバケットを作成するのステップ 1 で生成したアクセス トークンです。
    • [SOURCE_BUCKET] は、元のバケットの名前です。例: old-bucket
    • [OBJECT_NAME] は、削除するオブジェクトの名前です。例: pets/dog.png

成功すると、このメソッドによって空のレスポンスが返されます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。