このページでは、オブジェクトをコピー、名前変更、移動する方法について説明します。アトミックなオブジェクト移動オペレーションを実施するツールもあれば、オブジェクトを新しい指定の場所にコピーしてから元のオブジェクトを削除することで、実質的なオブジェクト移動オペレーションを実施するツールもあります。
- オブジェクトのコピー手順については、オブジェクトをコピーするをご覧ください。
- オブジェクトをコピーして移動または名前変更する手順については、オブジェクトをコピーして移動または名前変更するをご覧ください。
- オブジェクトの名前をアトミックに変更する手順については、オブジェクトの名前をアトミックに変更するをご覧ください。
バケット間で 1 TB を超えるデータを移動する場合は Storage Transfer Service を使用することをおすすめします。
始める前に
オブジェクトをコピー、名前変更、移動するには、所定の IAM ロールを取得する必要があります。以降のセクションでは、さまざまなユースケースの IAM 要件について説明します。
オブジェクトのコピー(コピーによる移動や名前変更を含む)
オブジェクトのコピーに必要な権限を取得するには、移動するオブジェクトが存在するソースバケット、またはオブジェクトの移動先とする転送先バケットに対する次の IAM ロールの付与を管理者に依頼します。
-
ソースバケットに対する Storage オブジェクト閲覧者(
roles/storage.objectViewer
) - 転送先バケットに対するストレージ オブジェクト ユーザー(
roles/storage.objectUser
) -
Google Cloud コンソールを使用してオブジェクトをコピーする場合は、
roles/storage.objectViewer
とroles/storage.objectUser
のほかに、ソースバケットと転送先バケットの両方に対する閲覧者の基本ロール(roles/viewer
)
これらの事前定義ロールには、オブジェクトのコピーに必要な権限が割り当てられています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
オブジェクトをコピーするには次の権限が必要です。
- ソースバケットに対する
storage.objects.get
- 転送先バケットに対する
storage.objects.create
-
転送先バケットに対する
storage.objects.delete
(オブジェクトをコピーまたは移動するオペレーションの過程で、宛先バケットのオブジェクトを置き換えまたは上書きをする場合にのみ必要) -
ソースバケットに対する
storage.objects.delete
(基本的なコピーと削除のオペレーションを使用してオブジェクトを移動する場合にのみ必要) -
転送先バケットに対する
storage.folders.create
(移動するオブジェクトを収めたフォルダを、転送先バケットに作成する場合にのみ必要) -
ソースバケットと転送先バケットに対する
storage.objects.list
( Google Cloud コンソールを使用してオブジェクトをコピー、移動、名前変更する場合にのみ必要) -
ソースバケットと転送先バケットが存在するプロジェクトに対する
storage.buckets.list
( Google Cloud コンソールを使用してオブジェクトをコピー、移動、名前変更する場合にのみ必要)
カスタムロールを使用して、これらの権限を取得することもできます。
バケットに対するロールの付与については、バケットでの IAM ポリシーの設定と管理をご覧ください。プロジェクトに対するロールの付与については、プロジェクトへのアクセス権を管理するをご覧ください。
コピーするオブジェクトで特定の機能が有効になっている場合は、追加のロールや代わりのロールが必要になることがあります。たとえば、コピーするオブジェクトにオブジェクト保持構成が設定されている場合は、宛先バケットに対するロール(Storage オブジェクト管理者(roles/storage.objectAdmin
)ロールなど)に storage.objects.setRetention
権限が割り当てられている必要があります。詳細については、Cloud Storage の IAM 権限をご覧ください。
オブジェクトの名前をアトミックに変更する
オブジェクトの名前をアトミックに変更するために必要な権限を取得するには、名前を変更するオブジェクトが存在するバケットに対する Storage オブジェクト ユーザー (roles/storage.objectUser
)の IAM ロールの付与を管理者に依頼します。
この事前定義ロールには、オブジェクトの名前をアトミックに変更するために必要な権限が割り当てられています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
オブジェクトの名前をアトミックに変更するには、次の権限が必要です。
-
storage.objects.move
-
storage.objects.create
-
storage.objects.delete
(オブジェクトを上書きまたは置換する場合にのみ必要)
カスタムロールを使用して、これらの権限を取得することもできます。
バケットに対するロールの付与については、バケットでの IAM ポリシーの設定と管理をご覧ください。
オブジェクトをコピーする
このセクションでは、オブジェクトをコピーする方法について説明します。バケット間でオブジェクトをコピーできます。
コンソール
- 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
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
REST API
JSON API
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 }
XML API
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
です。
オブジェクトをコピーして移動または名前変更する
このセクションでは、基盤となるオブジェクト コピー オペレーションを使用してオブジェクトを移動または名前変更する方法について説明します。このセクションで説明するツールは、元のオブジェクトを別の名前空間にコピーしてから元のオブジェクトを削除することで、オブジェクトの移動と名前変更を実現します。
コンソール
- 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
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
REST API
JSON API
オブジェクトをコピーして移動または名前変更する JSON API の手順については、オブジェクトをコピーするをご覧ください。
XML API
オブジェクトをコピーして移動または名前変更する XML API の手順については、オブジェクトをコピーするをご覧ください。
オブジェクトの名前をアトミックに変更する
このセクションでは、バケットにあるオブジェクトの名前をアトミックに変更する方法について説明します。オブジェクトの名前を変更するには、Cloud Storage JSON API の Objects: move
メソッドを使用します。
REST API
JSON API
オブジェクトの名前をアトミックに変更する手順は次のとおりです。
gcloud CLI をインストールして初期化します。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。cURL
を使用して、Objects: move
リクエストで JSON API を呼び出します。curl -X POST
-H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Length: 0"
"https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/SOURCE_OBJECT_NAME/moveTo/o/DESTINATION_OBJECT_NAME"各変数の意味は次のとおりです。
BUCKET_NAME
は、名前を変更するオブジェクトが存在するバケットの名前です。たとえばmy-bucket
です。SOURCE_OBJECT_NAME
は、名前を変更するオブジェクトの URL エンコード名です。たとえば、pets%2Fdog.png
と URL エンコードしたpets/dog.png
です。DESTINATION_OBJECT_NAME
は、使用する URL エンコード名です。たとえば、pets%2Fcat.png
と URL エンコードしたpets/cat.png
です。
次のステップ
- オブジェクトのストレージ クラスを変更する。
- オブジェクトのメタデータを編集する。
- オブジェクトやバケットを公開アクセス可能にする。
- オブジェクトの命名要件について学習する。
- リクエストの前提条件を満たして競合状態を防ぐ方法について学習する。