Google Cloud Platform 内のプロジェクト 間でのGoogle Cloud Storage(GCSの) バケット/オブジェクトを移動する方法をご紹介します。
概要
GCS Project A のGCS Bucket 01にあるオブジェクトをCGS Project B のGCS Bukect02 にコピーさせます。
違うプロジェクトにバケット/オブジェクトをコピーするには、gsutil を使用して移動させることができます。移動させるには移動先のプロジェクトに移動元のサービス アカウントを追加する必要があります。

操作手順
サービスアカウントの設定
異なるプロジェクトにGCS バケットを移動させるには、移動させるためのサービスアカウントを追加する必要があります。このサービスアカウントにはGCS で用意されているサービスアカウントを使用します。
- 移動元のGCP プロジェクトに設定します。
- メニューからCloud Storage の「設定」をクリックします。
- Cloud Storage サービス アカウント をコピーします。
- 移動先のGCP プロジェクトに切り替えます。
- メニューからCloud Storage の「ブラウザ」をクリックします。
- 対象バケットの権限を選択し、「追加」をクリックします。
- 新しいメンバーにコピーしたサービスアカウントを設定し、ロールを「ストレージ管理者」に設定し、保存します。

GCS バケットをコピー
gsutil cp コマンドを使用し、オブジェクトを転送先にコピーします。
- Cloud Shell を開きます。
- 移動元のGCP プロジェクトを設定します。
- 移動コマンドを実行する。
次のコマンドを実行し、特定のオブジェクトを移動先のバケットをコピーします。
gsutil cp gs://[SOURCE_BUCKET]/[OBJECT_NAME] gs://[DESTINATION_BUCKET]

移動先のGCS バケットを開き、バケット/オブジェクトがコピーできていることを確認します。
追加したサービスアカウントを削除して、GCS バケットの移動は完了となります。
補足
バケットの移動コマンド
バケットをコピーさせる場合は次のコマンドになります。
gsutil cp -r gs://[SOURCE_BUCKET]/ gs://[DESTINATION_BUCKET]

すべてのフォルダ/ファイルをコピーさせるには、次のコマンドになります。
gsutil cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]
注意点
同名称のファイル名
移動先に移動させるオブジェクト名と同一名称があった場合は、オブジェクトが上書きされてしまいます。
そのため、オブジェクトを移動させる際には同一名称がないか事前に確認してください。
バケット名
バケット名はプロジェクト全体で一意(ユニーク名)のため、移動先のプロジェクトにGCS バケットとして移動させることはできません。GCS バケット のフォルダとしてを作成することができます。
ただし、 Google Cloud Storage URLは変更されてしまいます。
データは残ったまま
今回は cp コマンドを使用しているため、移動元のバケット/オブジェクトは残ったままので確認/使用済み後にバケット/オブジェクトを削除してください。
mv コマンドで使用すると、移動時に移動元のバケット/オブジェクトを削除されます。
Cloud Storage Transfer Service について
Cloud Storage Transfer Service では同じプロジェクトのGCS バケットのフォルダ/ファイルを移動はできますが、別プロジェクトへの移動はすることができませんでした。また、サービスアカウントを追加しても移動はできませんでした。
ちなみにCloud Storage Transfer Service は次のケース時に使用することが公式では推奨になっています。
- 別のクラウド ストレージプロバイダから転送する
- オンプレミスから 1 TB 超のデータを転送する
Leave a Reply
View Comments