このページでは、Cloud Storage のバケット内またはバケット間でオブジェクトをコピー、名前変更、移動する方法について説明します。
Cloud Storage の一部のツールでは、オブジェクトの移動や名前変更が独自のオペレーションとして実行されているように見えます。しかし、オブジェクトは不変であるため、実際には常に元のオブジェクトをコピーした後で削除するという複数のオペレーションが行われています。
前提条件
前提条件は使用するツールによって異なります。
コンソール
Google Cloud Console を使用してこのガイドを完了するには、適切な IAM 権限が必要です。アクセスするバケットが自分で作成していないプロジェクト内に存在する場合は、必要な権限を含むロールをプロジェクト オーナーに付与する必要があります。
特定のアクションに必要な権限の一覧については、Google Cloud Console に適用される IAM 権限をご覧ください。
関連するロールのリストについては、Cloud Storage のロールをご覧ください。また、特定の制限された権限を持つカスタムロールを作成することもできます。
コマンドライン
コマンドライン ユーティリティを使用してこのガイドを完了するには、適切な IAM 権限が必要です。アクセスするバケットが自分で作成していないプロジェクト内に存在する場合は、必要な権限を含むロールをプロジェクト オーナーに付与する必要があります。
特定の操作に必要な権限の一覧については、gsutil コマンドの IAM 権限をご覧ください。
関連するロールのリストについては、Cloud Storage のロールをご覧ください。また、特定の制限された権限を持つカスタムロールを作成することもできます。
コードサンプル
Cloud Storage クライアント ライブラリを使用してこのガイドを完了するには、適切な IAM 権限が必要です。アクセスするバケットが自分で作成していないプロジェクト内に存在する場合は、必要な権限を含むロールをプロジェクト オーナーに付与する必要があります。特に断りのない限り、クライアント ライブラリのリクエストは JSON API を介して行われます。
特定のアクションに必要な権限の一覧については、JSON メソッドの IAM 権限をご覧ください。
関連するロールのリストについては、Cloud Storage のロールをご覧ください。また、特定の制限された権限を持つカスタムロールを作成することもできます。
REST API
JSON API
JSON API を使用してこのガイドを完了するには、適切な IAM 権限が付与されている必要があります。アクセスするバケットが自分で作成していないプロジェクト内に存在する場合は、必要な権限を含むロールをプロジェクト オーナーに付与する必要があります。
特定のアクションに必要な権限の一覧については、JSON メソッドの IAM 権限をご覧ください。
関連するロールのリストについては、Cloud Storage のロールをご覧ください。または、特定の制限された権限を持つカスタムロールを作成することもできます。
オブジェクトのコピー
いずれかの Cloud Storage バケットのオブジェクトをコピーするには:
コンソール
- Google Cloud コンソールで、Cloud Storage ブラウザページに移動します。
バケットのリストで、コピーするオブジェクトを含むバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
オブジェクトに関連付けられた [その他の操作] メニュー(
)をクリックします。
[コピー] をクリックします。
[オブジェクトのコピー] ペインが表示されます。
[コピー先] テキスト ボックスに、コピー先バケットの名前と、コピーするオブジェクトの名前を入力します。
[参照] をクリックして保存先を選択することもできますが、ブラウジングの選択肢は現在のプロジェクト内のバケットに制限されます。
[コピー] をクリックします。
失敗したオペレーションに関する詳細なエラー情報を Cloud Storage ブラウザで確認する方法については、トラブルシューティングをご覧ください。
コマンドライン
gsutil cp
コマンドを使用します。
gsutil cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/NAME_OF_COPY
ここで
SOURCE_BUCKET_NAME
は、コピーするオブジェクトが格納されているバケットの名前です。例:my-bucket
SOURCE_OBJECT_NAME
は、コピーするオブジェクトの名前です。例:pets/dog.png
DESTINATION_BUCKET_NAME
は、オブジェクトのコピー先のバケットの名前です。例:another-bucket
NAME_OF_COPY
は、オブジェクトのコピーに付ける名前です。例:shiba.png
成功した場合は、次の例のようなレスポンスになります。
Operation completed over 1 objects/58.8 KiB.
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
- OAuth 2.0 Playground から認証アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
cURL
を使用して、POST
Object リクエストで JSON API を呼び出します。curl -X POST \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Length: 0" \ "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/NAME_OF_COPY"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンの名前です。SOURCE_BUCKET_NAME
は、コピーするオブジェクトが格納されているバケットの名前です。例:my-bucket
SOURCE_OBJECT_NAME
は、コピーするオブジェクトの URL エンコード名です。例:pets%2Fdog.png
として URL エンコードされているpets/dog.png
DESTINATION_BUCKET_NAME
は、オブジェクトのコピー先のバケットの名前です。例:another-bucket
NAME_OF_COPY
は、オブジェクトのコピーに付ける URL エンコード名です。例:shiba.png
rewrite
メソッドではサイズ制限されたデータのかたまりをコピーするため、特に大きなオブジェクトについては、コピーで複数のリクエストが必要になる場合があります。たとえば、
rewrite
リクエストに対する次のレスポンスは、追加のrewrite
リクエストが必要であることを示します。{ "kind": "storage#rewriteResponse", "totalBytesRewritten": 1048576, "objectSize": 10000000000, "done": false, "rewriteToken": TOKEN_VALUE }
後続のリクエストで
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_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/NAME_OF_COPY"
ここで
TOKEN_VALUE
は、前のリクエストで返されたrewriteToken
値です。- 他のすべての値は、以前のリクエストで使用された値と一致します。
オブジェクトが完全にコピーされると、最後のレスポンスでは
done
プロパティがtrue
に設定され、rewriteToken
プロパティはなく、コピーのメタデータがresource
プロパティに含まれます。{ "kind": "storage#rewriteResponse", "totalBytesRewritten": 10000000000, "objectSize": 10000000000, "done": true, "resource": objects Resource }
XML API
- OAuth 2.0 Playground から認証アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
cURL
を使用して、PUT
Object リクエストで XML API を呼び出します。curl -X PUT \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-copy-source: SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME" \ "https://storage.googleapis.com/DESTINATION_BUCKET_NAME/NAME_OF_COPY"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンの名前です。SOURCE_BUCKET_NAME
は、コピーするオブジェクトが格納されているバケットの名前です。例:my-bucket
SOURCE_OBJECT_NAME
は、コピーするオブジェクトの名前です。例:pets/dog.png
DESTINATION_BUCKET_NAME
は、オブジェクトのコピー先のバケットの名前です。例:another-bucket
NAME_OF_COPY
は、オブジェクトのコピーに付ける URL エンコード名です。例:shiba.png
オブジェクトの名前を変更する
Cloud Storage バケットにある既存のオブジェクトの名前を変更するには:
コンソール
- Google Cloud コンソールで、Cloud Storage ブラウザページに移動します。
バケットのリストで、名前を変更するオブジェクトを含むバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
オブジェクトに関連付けられた [その他の操作] メニュー(
)をクリックします。
[名前を変更] をクリックします。
上に重なったウィンドウで、オブジェクトの新しい名前を入力します。
[名前を変更] をクリックします。
失敗したオペレーションに関する詳細なエラー情報を Cloud Storage ブラウザで確認する方法については、トラブルシューティングをご覧ください。
コマンドライン
gsutil mv
コマンドを使用します。
gsutil mv gs://BUCKET_NAME/OLD_OBJECT_NAME gs://BUCKET_NAME/NEW_OBJECT_NAME
ここで
BUCKET_NAME
は、名前を変更するオブジェクトが格納されているバケットの名前です。例:my-bucket
OLD_OBJECT_NAME
は、名前を変更するオブジェクトの名前です。例:pets/dog.png
NEW_OBJECT_NAME
は、オブジェクトに付ける新しい名前です。例:pets/shiba.png
成功した場合は、次の例のようなレスポンスになります。
Operation completed over 1 objects/58.8 KiB.
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
JSON API を使用してオブジェクト名を直接変更するには、まず、オブジェクトのコピーを作成します。コピーに新しい名前を付けてから、元のオブジェクトを削除します。
XML API
XML API を使用してオブジェクト名を直接変更するには、まず、オブジェクトのコピーを作成します。コピーに新しい名前を付けてから、元のオブジェクトを削除します。
オブジェクトを移動する
Cloud Storage のオブジェクトを移動するには:
コンソール
- Google Cloud コンソールで、Cloud Storage ブラウザページに移動します。
バケットのリストで、移動するオブジェクトを含むバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
オブジェクトに関連付けられた [その他の操作] メニュー(
)をクリックします。
[移動] をクリックします。
上に重なったウィンドウで [開く] をクリックします。
オブジェクトの移動先を選択します。
[選択] をクリックします。
[移動] をクリックします。
失敗したオペレーションに関する詳細なエラー情報を Cloud Storage ブラウザで確認する方法については、トラブルシューティングをご覧ください。
コマンドライン
gsutil mv
コマンドを使用します。
gsutil mv gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME
ここで
SOURCE_BUCKET_NAME
は、移動するオブジェクトが格納されているバケットの名前です。例:my-bucket
SOURCE_OBJECT_NAME
は、移動するオブジェクトの名前です。例:pets/dog.png
DESTINATION_BUCKET_NAME
は、オブジェクトの移動先のバケットの名前です。例:another-bucket
DESTINATION_OBJECT_NAME
は、新しい場所でのオブジェクトに付ける名前です。例:shiba.png
成功した場合は、次の例のようなレスポンスになります。
Operation completed over 1 objects/58.8 KiB.
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
JSON API を使用してオブジェクトを直接移動するには、新しい場所にオブジェクトのコピーを作成してから、元のオブジェクトを削除します。
XML API
XML API を使用してオブジェクトを直接移動するには、新しい場所にオブジェクトのコピーを作成してから、元のオブジェクトを削除します。
Storage Transfer Service を使用して、1 TB を超えるデータをバケット間で移動することをおすすめします。
次のステップ
- オブジェクトのストレージ クラスを変更する。
- オブジェクトのメタデータを編集する。
- Cloud Storage のフォルダとフラットな名前空間について学習する。
- オブジェクトやバケットを公開アクセス可能にする。
- オブジェクトの命名要件について学習する。
- オブジェクトの不変性について学習する。