如何将数据直接从一个Google云端存储项目移动到另一个? 我了解如何上传和如何下载,但我想直接在项目之间转移。
答案 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中查看更多配置选项。
但是,应该正确设置一些内容以防止出现问题。这是一个设置列表:
Google Cloud Console -> IAM -> Service Account
为源存储桶创建服务帐户。使用Storage Admin作为角色。确保创建JSON密钥并将其下载到计算机上的安全位置。记录此文件的路径[例如path/to/source-service-account.json
],因为您以后会需要它。Google Cloud Console -> Storage -> Browser
,然后单击主存储桶,然后单击 Permissions < / em>标签,然后单击“添加成员”按钮。在提供的文本框中添加源存储桶服务帐户的电子邮件地址,然后授予存储管理员权限] gsutil
命令。但是,如果未正确验证身份,则可能会出现访问权限错误。您可以通过运行以下命令gcloud auth activate-service-account --key-file=/path/to/source-service-account.json
使用服务帐户文件[在上面的1.中创建和下载的文件]进行身份验证。完成此操作后,您将使用服务帐户登录GCP。现在,您可以运行gsutil
命令来传输文件。gcloud auth list
检查您的登录状态。而且,您可以使用gcloud config set account 'ACCOUNT'
干杯。
答案 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 project
或same 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并在另一个项目谷歌存储桶中上传文件
重要的是,请再次禁用公共共享链接。