GCP Architecture

Cloud Storage バケットを別プロジェクトに移動させるには?

バケット名はプロジェクト全体でのユニーク名のため、別プロジェクトにバケットとして移動させることはできませんが、バケット内にフォルダとして移動させることはできます。gsutil mv コマンドとサービス アカウントを利用することでGCS バケットを移動することが可能です。
バケット名はプロジェクト全体でのユニーク名のため、別プロジェクトにバケットとして移動させることはできませんが、バケット内にフォルダとして移動させることはできます。gsutil mv コマンドとサービス アカウントを利用することでGCS バケットを移動することが可能です。

Google Cloud Platform 内のプロジェクト 間での Google Cloud Storage(GCS) バケット/オブジェクトを移動する方法をご紹介します。


概要

GCS Project A の GCS Bucket 01にあるオブジェクトを CGS Project B の GCS Bukect02 にコピーさせます。

違うプロジェクトにバケット/オブジェクトをコピーするには gsutil を使用して移動させることができます。移動させるには移動先のプロジェクトに移動元のサービス アカウントを追加する必要があります。

GCP Architecture

操作手順

サービスアカウントの設定

異なるプロジェクトに GCS バケットを移動させるには、移動させるためのサービスアカウントを追加する必要があります。このサービスアカウントには GCS で用意されているサービスアカウントを使用します。

  1. 移動元のGCP プロジェクトに設定します。
  2. メニューから Google Cloud Storage の「設定」をクリックします。
  3. Google Cloud Storage サービス アカウント をコピーします。
  4. 移動先の GCP プロジェクトに切り替えます。
  5. メニューから Google Cloud Storage の「ブラウザ」をクリックします。
  6. 対象バケットの権限を選択し、「追加」をクリックします。
  7. 新しいメンバーにコピーしたサービスアカウントを設定し、ロールを「ストレージ管理者」に設定し、保存します。
GCS サービスアカウントの設定

GCS バケットをコピー

gsutil cp コマンドを使用し、オブジェクトを転送先にコピーします。

  1. Cloud Shell を開きます。
  2. 移動元の GCP プロジェクトを設定します。
  3. 移動コマンドを実行する。

次のコマンドを実行し、特定のオブジェクトを移動先のバケットをコピーします。

gsutil cp gs://[SOURCE_BUCKET]/[OBJECT_NAME] gs://[DESTINATION_BUCKET]
ターミナル:CGS オブジェクトの移動

移動先の GCS バケットを開き、バケット/オブジェクトがコピーできていることを確認します。
追加したサービスアカウントを削除して GCS バケットの移動は完了となります。

補足

バケットの移動コマンド

バケットをコピーさせる場合は次のコマンドになります。

gsutil cp -r gs://[SOURCE_BUCKET]/ gs://[DESTINATION_BUCKET]
ターミナル:CGS バケットの移動

すべてのフォルダ/ファイルをコピーさせるには、次のコマンドになります。

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

転送するファイルが多数ある場合は最上位の gsutil-m オプションを使用して並列マルチスレッド/マルチプロセッシング コピーを実行できます。

gsutil -m cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]

注意点

同名称のファイル名

移動先に移動させるオブジェクト名と同一名称があった場合は、オブジェクトが上書きされてしまいます。
そのため、オブジェクトを移動させる際には同一名称がないか事前に確認してください。

バケット名

バケット名はプロジェクト全体で一意(ユニーク名)のため、移動先のプロジェクトにGCS バケットとして移動させることはできません。GCS バケット のフォルダとしてを作成することができます。
ただし、 Google Cloud Storage URLは変更されてしまいます。

データは残ったまま

今回は cp コマンドを使用しているため、移動元のバケット/オブジェクトは残ったままので確認/使用済み後にバケット/オブジェクトを削除してください。
mv コマンドで使用すると、移動時に移動元のバケット/オブジェクトを削除されます。

Google Cloud Storage Transfer Service について

Google Cloud Storage Transfer Service では同じプロジェクトの GCS バケットのフォルダ/ファイルを移動はできますが、別プロジェクトへの移動はすることができませんでした。また、サービスアカウントを追加しても移動はできませんでした。
ちなみに Google Cloud Storage Transfer Service は次のケース時に使用することが公式では推奨になっています。

  • 別のクラウド ストレージプロバイダから転送する
  • オンプレミスから 1 TB 超のデータを転送する

参考ページ