【问题标题】:Fetch content in AWS S3 public bucket from GCP Data Storage从 GCP 数据存储中获取 AWS S3 公共存储桶中的内容
【发布时间】:2019-02-17 21:04:12
【问题描述】:

我正在尝试通过 gsutil 或传输服务从 GCP 数据存储中获取存储桶 s3://open-images-dataset 的内容。在命令行替代的情况下,我使用以下命令:

gsutil -m -o GSUtil:parallel_composite_upload_threshold=150M cp -r --no-sign-request s3://open-images-dataset gs://<bucket-name>

这里的问题是s3://open-images-dataset 是公开的,下载到本地目录时通常会使用--no-sign-request。但是,据我所知,GCP 不允许任何选项解决此问题。对这个问题有任何想法吗?

我无法先将其下载到我的本地机器,因为存储桶的内容太大。

【问题讨论】:

    标签: amazon-web-services amazon-s3 google-cloud-platform google-cloud-storage gsutil


    【解决方案1】:

    目前不可能,但 PR 已发布到 boto 库。

    【讨论】:

      【解决方案2】:

      gsutil 使用the Boto library 处理与 S3 的通信。在对代码进行了一些挖掘之后,Boto 似乎允许指定 an individual connection should be anonymous... 但它看起来需要修补 Boto 库以使给定会话的所有 S3 连接都是匿名的(即设置 Boto 配置选项,如[s3] 部分下的“no_sign_request = True”)。

      当我尝试通过 gsutil ls s3://open-images-dataset 列出设置了 AWS 凭证的存储桶时,签名请求成功。鉴于它有效,您是否有任何特殊原因不希望签署请求?

      编辑

      我提交了这个拉取请求以在 Boto 中添加对 no_sign_request 的支持:

      https://github.com/boto/boto/pull/3833

      每当他们决定发布它时,它就会出现在 Boto 的下一个版本中。此时,gsutil 可以获取新版本并将其包含在后续版本中。

      【讨论】:

      • 您的解决方案在设置 AWS 凭证后运行良好。就我而言,我试图避免需要从 AWS 请求这些的部分过程。在请求凭据之前,当我尝试解决方案时,输出如下: ERROR 0915 11:05:35.895289 utils.py] 无法读取实例数据,放弃失败:没有处理程序准备好进行身份验证。检查了 4 个处理程序。 ['HmacAuthV1Handler', 'DevshellAuth', 'OAuth2Auth', 'OAuth2ServiceAccountAuth'] 检查您的凭据。但是,您的建议是一个非常好的解决方法,我非常感谢!
      • 有道理。我在 GitHub 上向 Boto 提交了 PR,以添加我在回答中提到的功能:github.com/boto/boto/pull/3833
      猜你喜欢
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2020-11-09
      • 2016-09-18
      • 2020-08-21
      相关资源
      最近更新 更多