如何从亚马逊的请求者下载数据?

时间:2015-02-28 17:14:39

标签: amazon-web-services amazon-s3

我已经挣扎了大约一个星期来下载这里提到的arXiv文章:http://arxiv.org/help/bulk_data_s3#src

我尝试了很多东西:s3Browsers3cmd。我能够登录我的存储桶,但我无法从arXiv存储桶下载数据。

我试过了:

  1. s3cmd get s3://arxiv/pdf/arXiv_pdf_1001_001.tar
  2. 请参阅:

    $ s3cmd get s3://arxiv/pdf/arXiv_pdf_1001_001.tar
    
    
    s3://arxiv/pdf/arXiv_pdf_1001_001.tar -> ./arXiv_pdf_1001_001.tar  [1 of 1]
    s3://arxiv/pdf/arXiv_pdf_1001_001.tar -> ./arXiv_pdf_1001_001.tar  [1 of 1]
    ERROR: S3 error: Unknown error
    
    1. s3cmd getx-amz-request-payer:requester
    2. 它再次给了我同样的错误:

      $ s3cmd get --add-header="x-amz-request-payer:requester" s3://arxiv/pdf/arXiv_pdf_manifest.xml
      s3://arxiv/pdf/arXiv_pdf_manifest.xml -> ./arXiv_pdf_manifest.xml  [1 of 1]
      s3://arxiv/pdf/arXiv_pdf_manifest.xml -> ./arXiv_pdf_manifest.xml  [1 of 1]
      ERROR: S3 error: Unknown error
      
      1. 复制
      2. 我也尝试过复制该文件夹中的文件。

        $ aws s3 cp s3://arxiv/pdf/arXiv_pdf_1001_001.tar .
        
        A client error (403) occurred when calling the HeadObject operation: Forbidden
        Completed 1 part(s) with ... file(s) remaining
        

        这可能意味着我犯了一个错误。问题是我不知道如何以及添加什么会传达我的下载付费许可。

        我无法弄清楚如何从S3下载数据。我在AWS网站上已经阅读了很多内容,但我无处可以找到解决问题的方法。

        如何批量下载arXiv数据?

5 个答案:

答案 0 :(得分:12)

尝试下载s3cmd版本1.6.0http://sourceforge.net/projects/s3tools/files/s3cmd/

$ s3cmd --configure

输入您在Amazon AWS网站界面的帐户管理标签中找到的凭据。

$ s3cmd get --recursive --skip-existing s3://arxiv/src/ --requester-pays

答案 1 :(得分:3)

请求者付款是Amazon S3存储桶上的一项功能,需要存储桶用户支付与访问数据相关的数据传输费用。

通常,S3存储桶的所有者支付数据传输费用,但这对于免费/开源项目来说可能很昂贵。因此,水桶所有者可以激活请求者支付以减少他们将被收取的部分费用。

因此,在访问Requester Pays存储桶时,您需要对自己进行身份验证,以便S3知道要收费的人。

我建议使用官方的 AWS Command-Line Interface (CLI) 来访问AWS服务。您可以通过以下方式提供您的凭据:

aws configure

然后通过以下方式查看存储桶:

aws s3 ls s3://arxiv/pdf/

并通过以下方式下载:

aws s3 cp s3://arxiv/pdf/arXiv_pdf_1001_001.tar .

更新:我刚尝试了上述内容,并收到Access Denied错误消息(桶列表和下载命令)。使用s3cmd时,会显示ERROR: S3 error: Access Denied看来存储桶上的权限不再允许访问。您应该与存储桶的所有者联系以请求访问。

答案 2 :(得分:2)

this page的底部,arXiv解释说s3cmd被拒绝,因为它不支持访问请求者付费桶作为非所有者,并且您必须将补丁应用于s3cmd的源代码。但是,他们使用的s3cmd版本已过时,补丁不适用于最新版本的s3cmd。

基本上你需要允许s3cmd添加" x-amz-request-payer"标头为其对桶的HTTP请求。以下是如何解决它:

  1. 下载s3cmd的源代码。
  2. 使用文本编辑器打开S3 / S3.py。
  3. __init__函数的底部添加以下两行代码:

    if self.s3.config.extra_headers:
        self.headers.update(self.s3.config.extra_headers)
    
  4. 按照说明安装s3cmd。

答案 3 :(得分:1)

对我来说问题是我的IAM用户没有足够的权限。 设置AmazonS3FullAccess是我的解决方案。

希望它能节省时间给某人

答案 4 :(得分:1)

不想抢风头,但 OttoV 的评论实际上给出了对我有用的正确命令。

aws s3 ls --request-payer requester s3://arxiv/src/

我的 EC2 位于区域 us-east-2,但 arXiv s3 存储桶位于区域 us-east-1,所以我认为这就是需要 --request-payer requester 的原因。

来自https://aws.amazon.com/s3/pricing/?nc=sn&loc=4

<块引用>

您为进出 Amazon S3 的所有带宽付费,以下情况除外:

• 从互联网传输的数据。

• 数据传出到 Amazon Elastic Compute Cloud (Amazon EC2) 实例,当该实例与 S3 存储桶位于同一 AWS 区域时(包括传输到同一 AWS 区域中的不同账户)。

• 数据传出到 Amazon CloudFront (CloudFront)。