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

时间:2015-06-25 11:49:46

标签: google-cloud-storage

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

9 个答案:

答案 0 :(得分:19)

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

使用 gsutil cp command可以像这样使用:

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

修改
自从我写这篇文章以来,Google Cloud Transfer Service已经可用,这有利于在GCS项目之间复制整个存储桶,或者将整个存储桶从S3复制到GCS中。您可以找到更多here

答案 1 :(得分:11)

这是最快的方法之一:

gsutil -m rsync -r gs://bucket-source/dir gs://bucket-destination/dir

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

official docs中查看更多配置选项。

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

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

干杯。

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:5)

GCS中的存储桶名称在所有项目中都是唯一的。例如,Project1和Project2不能同时拥有名为&#39; images&#39;的存储桶,尽管它们每个都可以在名为&#39; images&#39;的那些存储桶中包含文件夹。

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

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

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

答案 4 :(得分:1)

使用Google Cloud Shell

转到具有您要复制的存储桶的第一个项目
gcloud config set project [PROJECT1 ID]

创建一个目录,您可以将该存储桶安装到
mkdir test

将存储桶安装到目录
gcsfuse [BUCKET1] test

切换到第二个项目,其中有您要填充的存储桶
gcloud config set project [PROJECT2 ID]

将新文件夹的内容复制到第二个存储桶
gsutil cp -r /home/user/test gs://[BUCKET2]

答案 5 :(得分:0)

根据文档Moving Buckets

您可以简单地使用gsutil

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

注释:_ if如果使用zsh。确保将源存储区用单引号引起来。因为zsh会在gsutil看到通配符之前尝试扩展通配符。参见here

您可以在存储浏览器的“概述”标签中找到gsutil的链接。

答案 6 :(得分:0)

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

如果要使用外壳:

步骤1。打开google cloud shell

步骤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>为bucket2所属的项目插入service account email id>将角色设置为存储。Storage Admin>保存。然后运行gstuil cp命令。

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

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

答案 7 :(得分:-1)

如果您拥有可以访问这两个项目的密钥或服务帐户,那么它非常简单,可以轻松使用gsutils。

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

gsutil -m rsync -r gs://my/source/project/bucket/files/ gs://my/target/project/bucket/directory/

此处的关键是使用-m标志。

在[https://cloud.google.com/storage/docs/gsutil/commands/rsync]处查看官方文档以了解更多详细信息。

答案 8 :(得分:-2)

如果您想将数据从一个项目复制到另一个项目,我尝试了下面的事情并且工作正常,[将文件从项目1计算引擎server1传输到bucket1,在项目2计算引擎服务器2上下载并将其上传到存储桶2] 。
1.使用gsutil将数据传输到第一个项目/谷歌存储桶 2.登录webui,cloud.google.com,在步骤1中传输文件时选择项目并转到存储,然后查看存在的文件。选择该文件并选中右侧公开共享复选框 3.右键单击公共链接,然后选择复制链接地址 4.登录到另一个项目计算引擎服务器并使用步骤3中获得的wget和链接,就是这样。现在你可以再次使用gsutil并在另一个项目谷歌存储桶中上传文件 重要的是,请再次禁用公共共享链接。

希望它会有所帮助。