【发布时间】:2014-02-21 15:37:10
【问题描述】:
我可以使用 AWS SDK for Java 和 Azure SDK for Java 将数据从 Amazon AWS S3 迁移到 Azure。现在我想使用 Java 将数据从 Amazon AWS S3 迁移到 Google Cloud 存储。
【问题讨论】:
我可以使用 AWS SDK for Java 和 Azure SDK for Java 将数据从 Amazon AWS S3 迁移到 Azure。现在我想使用 Java 将数据从 Amazon AWS S3 迁移到 Google Cloud 存储。
【问题讨论】:
gsutil 命令行工具支持 S3。在你 configured gsutil 之后,你会在你的 ~/.boto 文件中看到这个:
# To add aws credentials ("s3://" URIs), edit and uncomment the
# following two lines:
#aws_access_key_id =
#aws_secret_access_key =
使用您的 S3 凭据填写 aws_access_key_id 和 aws_secret_access_key 设置并取消注释变量。
设置完成后,从 S3 复制到 GCS 非常简单:
gsutil cp -R s3://bucketname gs://bucketname
如果您有很多对象,请使用-m 标志运行以与多个线程并行执行复制:
gsutil -m cp -R s3://bucketname gs://bucketname
【讨论】:
rsync 命令不是更适合这个用例吗?如果它真的是一次性迁移,那将是相同的,但如果它需要多次或持续进行,rysnc 将节省大量迁移。 cloud.google.com/storage/docs/interoperability
.boto 文件)是gcloud init。我对自己的知识不太自信,所以我不会编辑答案,但我想把它放在那里。
使用谷歌云存储transfer tool。
【讨论】:
gsutil transfer 可以从命令行执行此操作。传输工具很好,但仅限网络,因此无法编写脚本。或者有人知道如何以编程方式处理传输工具?
jterrace 建议的答案(.boto 文件中的 aws 密钥和秘密)是正确的,并且适用于许多区域,但不适用于仅需要 AWS 签名版本 4 的某些区域。例如,在连接到“孟买”区域时,我收到此错误:
BadRequestException: 400 无效请求 不支持您提供的授权机制。请使用 AWS4-HMAC-SHA256
为了克服这个问题(让 gsutil 使用 AWS Signature v4),我必须在 ~/.boto 文件中添加以下附加行。这些行在配置文件中创建了一个新部分 [s3]:
[s3]
主机 = s3.ap-south-1.amazonaws.com
use-sigv4 = True
参考:
Interoperability support for AWS Signature Version 4
Gsutil cannot copy to s3 due to authentication
【讨论】:
创建一个新的 .boto 文件
[Credentials]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
还有这个命令
BOTO_CONFIG=.boto gsutil -m cp s3://bucket-name/filename gs://bucket-name
或者这个
BOTO_CONFIG=.boto gsutil -m cp gs://bucket-name/filename s3://bucket-name
【讨论】: