如何从亚马逊的请求者支付桶中下载数据?
How to download data from Amazon's requester pay buckets?
为了下载 arXiv 文章,我已经苦苦挣扎了大约一周:http://arxiv.org/help/bulk_data_s3#src。
我尝试了很多东西:s3Browser
、s3cmd
。我可以登录到我的存储桶,但无法从 arXiv 存储桶下载数据。
我试过了:
s3cmd get s3://arxiv/pdf/arXiv_pdf_1001_001.tar
参见:
$ 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
s3cmd get
与 x-amz-request-payer:requester
它又给了我同样的错误:
$ 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
- 正在复制
我也试过从那个文件夹复制文件。
$ 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 数据?
请求者付费 是 Amazon S3 存储桶上的一项功能,要求存储桶的用户支付与访问数据相关的数据传输费用。
通常情况下,S3 存储桶的所有者需要支付数据传输费用,但对于免费/开源项目来说,这可能会很昂贵。因此,存储桶拥有者可以激活请求者支付以减少他们将被收取的成本部分。
因此,在访问请求者付款存储桶时,您需要对自己进行身份验证,以便 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
。 存储桶的权限似乎不再允许访问。您应该联系存储桶的所有者请求访问。
在 this page arXiv 的底部解释说 s3cmd 被拒绝是因为它不支持作为 non-owner 访问请求者支付存储桶并且您必须对 s3cmd 的源代码应用补丁.但是,他们使用的s3cmd版本已经过时,补丁不适用于最新版本的s3cmd。
基本上,您需要允许 s3cmd 添加 "x-amz-request-payer" header 到其对存储桶的 HTTP 请求。修复方法如下:
- 下载s3cmd源码
- 用文本编辑器打开 S3/S3.py。
在__init__
函数底部添加这两行代码:
if self.s3.config.extra_headers:
self.headers.update(self.s3.config.extra_headers)
- 按照说明安装 s3cmd。
尝试下载 s3cmd
版本 1.6.0
:http://sourceforge.net/projects/s3tools/files/s3cmd/
$ s3cmd --configure
输入您在 Amazon AWS 网站界面的账户管理选项卡中找到的凭据。
$ s3cmd get --recursive --skip-existing s3://arxiv/src/ --requester-pays
对我来说,问题是我的 IAM 用户没有足够的权限。
设置 AmazonS3FullAccess
是我的解决方案。
希望它能为某人节省时间
不想抢风头,但 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 :
You pay for all bandwidth into and out of Amazon S3, except for the following:
• Data transferred in from the internet.
• Data transferred out to an Amazon Elastic Compute Cloud (Amazon EC2) instance, when the instance is in the same AWS Region as the S3 bucket (including to a different account in the same AWS region).
• Data transferred out to Amazon CloudFront (CloudFront).
为了下载 arXiv 文章,我已经苦苦挣扎了大约一周:http://arxiv.org/help/bulk_data_s3#src。
我尝试了很多东西:s3Browser
、s3cmd
。我可以登录到我的存储桶,但无法从 arXiv 存储桶下载数据。
我试过了:
s3cmd get s3://arxiv/pdf/arXiv_pdf_1001_001.tar
参见:
$ 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
s3cmd get
与x-amz-request-payer:requester
它又给了我同样的错误:
$ 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
- 正在复制
我也试过从那个文件夹复制文件。
$ 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 数据?
请求者付费 是 Amazon S3 存储桶上的一项功能,要求存储桶的用户支付与访问数据相关的数据传输费用。
通常情况下,S3 存储桶的所有者需要支付数据传输费用,但对于免费/开源项目来说,这可能会很昂贵。因此,存储桶拥有者可以激活请求者支付以减少他们将被收取的成本部分。
因此,在访问请求者付款存储桶时,您需要对自己进行身份验证,以便 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
。 存储桶的权限似乎不再允许访问。您应该联系存储桶的所有者请求访问。
在 this page arXiv 的底部解释说 s3cmd 被拒绝是因为它不支持作为 non-owner 访问请求者支付存储桶并且您必须对 s3cmd 的源代码应用补丁.但是,他们使用的s3cmd版本已经过时,补丁不适用于最新版本的s3cmd。
基本上,您需要允许 s3cmd 添加 "x-amz-request-payer" header 到其对存储桶的 HTTP 请求。修复方法如下:
- 下载s3cmd源码
- 用文本编辑器打开 S3/S3.py。
在
__init__
函数底部添加这两行代码:if self.s3.config.extra_headers: self.headers.update(self.s3.config.extra_headers)
- 按照说明安装 s3cmd。
尝试下载 s3cmd
版本 1.6.0
:http://sourceforge.net/projects/s3tools/files/s3cmd/
$ s3cmd --configure
输入您在 Amazon AWS 网站界面的账户管理选项卡中找到的凭据。
$ s3cmd get --recursive --skip-existing s3://arxiv/src/ --requester-pays
对我来说,问题是我的 IAM 用户没有足够的权限。
设置 AmazonS3FullAccess
是我的解决方案。
希望它能为某人节省时间
不想抢风头,但 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 :
You pay for all bandwidth into and out of Amazon S3, except for the following:
• Data transferred in from the internet.
• Data transferred out to an Amazon Elastic Compute Cloud (Amazon EC2) instance, when the instance is in the same AWS Region as the S3 bucket (including to a different account in the same AWS region).
• Data transferred out to Amazon CloudFront (CloudFront).