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

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

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

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

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

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

Console

Google Cloud Console から Cloud Storage Transfer Service を使用して、1 つの Cloud Storage バケットから別の Cloud Storage バケットにデータをコピーします。

  1. まだ転送先バケットがない場合は、バケットを作成します
  2. Google Cloud Console で [転送] ページを開きます。

    [転送] ページを開く

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

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

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

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

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

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

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

    転送の進行状況を確認するには: Google Cloud Console で [転送] ページを開きます。

    [転送] ページを開く

    Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。

  6. 設定時に [転送完了後に転送元オブジェクトを削除する] チェックボックスをオンにしていれば、転送が完了した後、古いバケットからオブジェクトを削除するために必要な操作はありません。ただし、古いバケットを削除することもできます。その場合は別途行う必要があります。

gsutil

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

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

    ここで

    • SOURCE_BUCKET は、元のバケットの名前です。例: old-bucket
    • DESTINATION_BUCKET は、データ移動先のバケットの名前です。例: my-bucket
  4. -r オプション付きで gsutil rm コマンドを使用して、転送元バケットからすべてのオブジェクトとバケット自体を再帰的に削除します。

    gsutil rm -r gs://SOURCE_BUCKET

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

    または、オブジェクトは削除しますが、転送元バケットは維持する場合、次のようにします。

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

REST API

JSON API

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

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
  2. まだ転送先バケットがない場合は、バケットを作成します

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

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

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • SOURCE_BUCKET は、元のバケットの名前です。例: old-bucket
    • OBJECT_NAME は、コピーするオブジェクトの名前です。例: pets/dog.png
    • DESTINATION_BUCKET は、データ移動先のバケットの名前です。例: my-bucket

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

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

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

    ここで

    • OAUTH2_TOKEN は、手順 1 で生成したアクセス トークンです。
    • TOKEN_VALUE は、前の手順で返された rewriteToken 値です。
    • SOURCE_BUCKET は、元のバケットの名前です。例: old-bucket
    • OBJECT_NAME は、コピーするオブジェクトの名前です。例: pets/bunny.png
    • DESTINATION_BUCKET は、データ移動先のバケットの名前です。例: my-bucket

    すべてのデータがコピーされると、最新のレスポンスの done プロパティが true になり、rewriteToken プロパティがなくなります。また、コピー先オブジェクトのメタデータが resource プロパティに含まれます。

    {
      "kind": "storage#rewriteResponse",
      "totalBytesRewritten": 10000000000,
      "objectSize": 10000000000,
      "done": true,
      "resource": objects Resource
    }
  5. cURLJSON API delete メソッドを使用して、次のコマンドで元のバージョンのデータを削除します。

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

    ここで

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

次のステップ