このページでは、Cloud Storage のバケット内またはバケット間でオブジェクトをコピー、名前変更、移動する方法について説明します。
Cloud Storage の一部のツールを使用すると、オブジェクトの移動や名前変更が独自のオペレーションとして実行されているように見えます。しかし、オブジェクトは不変であるため、実際には常に元のオブジェクトをコピーした後で削除するという複数のオペレーションが行われています。
オブジェクトのコピー
必要なロール
オブジェクトのコピーに必要な権限を取得するには、ソースバケットに対する Storage オブジェクト閲覧者(roles/storage.objectViewer
)ロールと、宛先バケットに対する Storage オブジェクト ユーザー(roles/storage.objectUser
)ロールを付与するよう管理者に依頼してください。Google Cloud コンソールを使用する場合は、Storage オブジェクト閲覧者と Storage オブジェクト ユーザーのロールに加えて、ソースバケットと宛先バケットを含むプロジェクトに対する基本ロールの閲覧者を付与するよう管理者に依頼してください。
これらのロールには、オブジェクトのコピーに必要な次の権限が含まれています。
- ソースバケットに対する
storage.objects.get
- 宛先バケットに対する
storage.objects.create
- 宛先バケットに対する
storage.objects.delete
(オブジェクトを上書きする場合にのみ必要)
Google Cloud コンソールを使用する場合は、次の権限も必要です。
- ソースバケットと宛先バケットに対する
storage.objects.list
- ソースバケットと宛先バケットを含むプロジェクトに対する
storage.buckets.list
コピーするオブジェクトに有効な機能がある場合は、別のロールが必要になることがあります。たとえば、コピーするオブジェクトに保持したいオブジェクト保持構成がある場合は、宛先バケットに対するロール(Storage オブジェクト管理者(roles/storage.objectAdmin
)ロールなど)に storage.objects.setRetention
権限が含まれている必要があります。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。
プロジェクトにロールを付与する手順については、プロジェクトへのアクセス権を管理するをご覧ください。
いずれかの Cloud Storage バケットのオブジェクトをコピーするには:
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
バケットのリストで、コピーするオブジェクトを含むバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
オブジェクトに関連付けられたオブジェクト オーバーフロー メニュー(more_vert)をクリックします。
[コピー] をクリックします。
[オブジェクトのコピー] ペインが表示されます。
[移行先] フィールドに、コピー先バケットの名前と、コピーしたオブジェクトの名前を入力します。
[参照] をクリックして保存先を選択することもできますが、ブラウジングの選択肢は現在のプロジェクト内のバケットに制限されます。
[コピー] をクリックします。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
gcloud storage cp
コマンドを使用します。
gcloud storage 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
正常に終了すると、レスポンスは次の例のようになります。
Copying gs://example-bucket/file.txt to gs://other-bucket/file-copy.txt Completed files 1/1 | 164.3kiB/164.3kiB
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。cURL
を使用して、POST
Object リクエストで JSON API を呼び出します。curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-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 "ここで
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 $(gcloud auth print-access-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 }
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。cURL
を使用して、PUT
Object リクエストで XML API を呼び出します。curl -X PUT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-copy-source:
SOURCE_BUCKET_NAME /SOURCE_OBJECT_NAME " \ "https://storage.googleapis.com/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
は、オブジェクトのコピーに付ける URL エンコード名です。例:shiba.png
オブジェクトの移動または名前の変更
必要なロール
オブジェクトの移動または名前変更に必要な権限を取得するには、ソースバケットと宛先バケットの両方に対する Storage オブジェクト ユーザー(roles/storage.objectUser
)ロールを付与するよう管理者に依頼してください。Google Cloud コンソールを使用する場合は、Storage オブジェクト ユーザーロールの付与に加えて、ソースバケットと宛先バケットを含むプロジェクトに対する基本ロールの閲覧者を付与するよう管理者に依頼してください。
これらのロールには、オブジェクトの移動または名前変更に必要な次の権限が含まれています。
- ソースバケットに対する
storage.objects.delete
(オブジェクトを上書きする場合は宛先バケットでも必要) - ソースバケットに対する
storage.objects.get
- 宛先バケットに対する
storage.objects.create
Google Cloud コンソールを使用する場合は、次の権限も必要です。
- ソースバケットと宛先バケットに対する
storage.objects.list
- ソースバケットと宛先バケットを含むプロジェクトに対する
storage.buckets.list
移動または名前変更するオブジェクトに有効な機能がある場合は、別のロールが必要になることがあります。たとえば、移動するオブジェクトにオブジェクト保持構成がある場合は、宛先バケットに対するロール(Storage オブジェクト管理者(roles/storage.objectAdmin
)ロールなど)に storage.objects.setRetention
権限が含まれている必要があります。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。
プロジェクトにロールを付与する手順については、プロジェクトへのアクセス権を管理するをご覧ください。
Cloud Storage のオブジェクトをバケット間で移動したり、バケット内のオブジェクト名を変更するには:
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
バケットのリストで、移動または名前を変更するオブジェクトを含むバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
オブジェクトに関連付けられたオブジェクト オーバーフロー メニュー(more_vert)をクリックします。
同じバケット内でオブジェクトに新しい名前を付ける場合は、[名前を変更] をクリックします。
上に重なったウィンドウで、オブジェクトの新しい名前を入力します。
[名前を変更] をクリックします。
オブジェクトを別のバケットに移動する場合は、[移動] をクリックします。
上に重なったウィンドウで [開く] をクリックします。
オブジェクトの移動先を選択します。
[選択] をクリックします。
[移動] をクリックします。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
gcloud storage mv
コマンドを使用します。
gcloud storage 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
正常に終了すると、レスポンスは次の例のようになります。
Copying gs://example-bucket/old-file.txt to gs://new-bucket/new-file.txt Removing gs://example-bucket/old-file.txt... Completed files 1/1 | 164.3kiB/164.3kiB
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
JSON API を使用してオブジェクトを直接移動するか、名前を変更するには、まず目的のプロパティを持つオブジェクトのコピーを作成して、それに目的の名前を付けてから、元のオブジェクトを削除します。
XML API を使用してオブジェクトを直接移動するか、名前を変更するには、まず目的のプロパティを持つオブジェクトのコピーを作成してから、元のオブジェクトを削除します。
バケット間で 1 TB を超えるデータを移動する場合は Storage Transfer Service を使用することをおすすめします。
次のステップ
- オブジェクトのストレージ クラスを変更する。
- オブジェクトのメタデータを編集する。
- オブジェクトやバケットを公開アクセス可能にする。
- オブジェクトの命名要件について学習する。
- リクエストの前提条件を満たして競合状態を防ぐ方法について学習する。