如何将数据直接从一个Google云端存储项目移动到另一个?

Han*_*ahS 25 google-cloud-storage

如何将数据直接从一个Google云端存储项目移动到另一个?我了解如何上传和如何下载,但我想直接在项目之间转移.

Bra*_*ugh 23

要将任何单个对象从一个GCS位置复制到另一个GCS位置,可以使用copy命令.这可以通过我们的任何公共API或我们的命令行客户端gsutil来完成.

使用gsutil,命令很简单:

gsutil cp gs://bucket1/obj gs://bucket2/obj2
Run Code Online (Sandbox Code Playgroud)

编辑:自从我写这篇文章以来,谷歌云端传输服务已经可用,这有利于在GCS项目之间复制整个存储桶,或者将整个存储桶从S3复制到GCS中.您可以在此处找到更多信息:https://cloud.google.com/storage/transfer/

  • 这似乎在同一个项目中的两个桶之间复制.您是否有从一个项目复制到另一个项目的示例? (6认同)
  • 此示例中的存储桶可以位于不同的项目中.这个例子中没有提到具体项目. (6认同)
  • 问题出在凭证中,您必须拥有可以访问这两个项目的凭据. (4认同)
  • 我最终使用:`gsutil -m rsync -pPr PROD-15745 gs:// eci_staging_transfer / PROD-15745`其中_PROD-15745_是要复制的文件夹,而_eci_staging_transfer_存储桶名称。[rsync文档。](https://cloud.google.com/storage/docs/gsutil/commands/rsync)更有用的`gsutil` cmds:`gsutil cp dmesg.txt gs:// my_bucket /`(只需复制一个文件),“ gsutil ls -al gs:// my_bucket /”(在此处列出文件),“ gsutil rm gs://my_bucket/dmesg.txt”(删除文件)。ls输出格式与您习惯的格式不同。您也始终可以通过GCP控制台GUI检查存储桶内容。 (2认同)

Obi*_*ill 21

这是[之一]最快的方法:

gsutil -m rsync -r gs://bucket-source/dir gs://bucket-destination/dir
Run Code Online (Sandbox Code Playgroud)

请注意,/dir指的是/dir1/dir2主存储桶下的目录[或子目录,例如]。它不是指文件名。如果您尝试传输单个文件,则会出现错误。

官方文档中查看更多配置选项。

但是,您应该正确设置一些内容以防止出现问题。这是一个设置列表:

  1. 为您的源存储分区创建服务帐号 [来自源项目,Google Cloud Console -> IAM -> Service Account]。使用存储管理员作为角色。确保您创建了一个 JSON 密钥并将其下载到您计算机上的安全位置。记下此文件的路径 [例如path/to/source-service-account.json],因为稍后您将需要它。
  2. 为您的目标存储桶创建一个服务帐户 [与上述过程相同,但请确保切换到目标项目]。如果您以后需要使用它,您可以下载 JSON 密钥,但这是可选的。
  3. 将源bucket的service account [created in 1. above] 添加到目标bucket [From the destination project, Google Cloud Console -> Storage -> Browser,然后点击主bucket,然后点击Permissions选项卡,然后点击“Add Members”按钮。在提供的文本框中添加源存储桶服务帐户的电子邮件地址,然后授予 Storage Admin 权限]
  4. 如果您使用 gcloud cli [命令行工具],已登录源项目,则现在可以运行该gsutil命令。但是,如果您没有经过正确的身份验证,您可能会收到访问权限错误。您可以通过运行以下命令,使用服务帐户文件 [您在上述 1. 中创建和下载的文件] 进行身份验证gcloud auth activate-service-account --key-file=/path/to/source-service-account.json。执行此操作后,您将使用服务帐户登录 GCP。您现在可以运行gsutil命令来传输文件。
  5. 完成后,使用 来检查您的登录状态gcloud auth list。而且,您可以使用切换帐户gcloud config set account 'ACCOUNT'

干杯。


Ash*_*aka 15

如果您想使用控制台,请遵循@Martin van Dam 的回答。

如果你想使用外壳:

步骤 1. 打开 google cloud shell

Step 2. 运行gcloud init并按照流程连接bucket1所属的云项目。

步骤 3. 运行 gsutil cp -r gs://[bucket1]/* gs://[bucket2]

你完成了!


*现在有一个问题!如果两个存储桶都属于同一个项目,这些步骤将完美无缺。但是,如果两个存储桶都不属于same projectsame google cloud account. 它不会工作。您需要修复权限。

如果它们属于同一个 GCP 帐户:

转到Storage> Browser> 选择存储桶 > 选项 > Edit bucket permissions> add member> 插入存储桶service account email id2 所属项目的角色 > 将角色设置为存储。Storage Admin> 保存。然后运行gstuil cp命令。

如果它们属于单独的 GCP 帐户:

转到Storage> Browser> 选择存储桶 > 选项 > Edit bucket permissions> add member> 插入存储桶gmail id2 所属的项目 > 将角色设置为存储。Storage Admin> 保存。然后运行gstuil cp命令。


Mar*_*Dam 11

打开Web控制台Storage> Tranfer以创建新传输.

选择要从中复制的源存储桶.就像上面提到的cratervale一样,存储桶标识符是全球唯一的 (这是解决方案的关键).因此,一旦到达传输表单的目标部分,就可以将目标存储桶写入/粘贴到其文本输入中.即使那个桶来自另一个项目.一旦目标被验证为现有存储桶,它将显示绿色图标.您可以再次继续表单以完成设置.

从表单开始传输后,您可以通过点击控制台顶部的刷新按钮来跟踪它的进度.


cra*_*ale 6

GCS中的存储桶名称在所有项目中都是唯一的。例如,Project1和Project2都不能都具有名为“ images”的存储桶,尽管它们各自可以在名为“ images”的存储桶中具有文件夹。

这可能会引起误解,因为gsutil可能会要求您选择要使用的项目。对于复制命令,可以忽略此选择。

gsutil cp gs://bucket1/obj gs://bucket2/obj

将允许您将Project1 / bucket1中的对象复制到Project2 / bucket2


use*_*650 5

如果您拥有可以访问这两个项目的密钥或服务帐户,则使用 gsutils 非常简单并且可以快速工作。

这是我在本地 mac 上所做的,并在几分钟内同步了数 TB 的数据(是的,几分钟而不是几小时)

gsutil -m rsync -r gs://my/source/project/bucket/files/ gs://my/target/project/bucket/directory/
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用-m标志。

查看https://cloud.google.com/storage/docs/gsutil/commands/rsync 上的官方文档了解更多详细信息。