【问题标题】:aws s3 downloading filesaws s3 下载文件
【发布时间】:2017-09-04 19:01:25
【问题描述】:

我正在尝试从我的 Amazon s3 存储桶之一将文件下载到 Ubuntu EC2 实例。我在 2 个不同的区域创建了两个存储桶,我可以从一个区域的存储桶访问和下载文件,但是当我尝试访问时另一个面临问题。

Here is the error,
Traceback (most recent call last):
  File "listbucket.py", line 7, in <module>
    bucket = conn.get_bucket('train-faces')
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 509, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 556, in head_bucket
    response.status, response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request

但是我可以从另一个区域的存储桶中下载文件。

【问题讨论】:

  • 当您设置 AWS 凭证时,您应该设置了默认区域。这可能就是为什么它为一个工作,而不是另一个工作。您是否在命令中指定区域?例如。 --region us-east-1
  • no iam 没有在命令中指定任何区域,但我已经配置了该区域。
  • 但是如果我更改配置中的任何其他区域,它都不起作用
  • 尝试在命令中指定
  • 实际上是使用python代码进行下载,我指定了访问密钥,但没有指定区域。

标签: python amazon-s3 amazon-ec2


【解决方案1】:

您可以在连接 Amazon S3 时指定区域。

boto

import boto
conn = boto.s3.connect_to_region('ap-southeast-2')
conn.get_bucket('train-faces')

boto3

这几天,推荐大家使用boto3:

import boto3
s3 = boto3.resource('s3', region_name = 'ap-southeast-2')
bucket = s3.Bucket('train-faces')

或

import boto3
client = boto3.client('s3', region_name = 'ap-southeast-2')

【讨论】:

    【解决方案2】:

    您可以使用以下命令下载

    import boto3
    s3 = boto3.client('s3','region_name')
    s3.download_file("bucket-name", "key-name", "tmp.txt")
    

    请看http://boto3.readthedocs.io/en/latest/guide/s3.html

    说明 - 我们首先连接到特定区域的 s3。您从一个 Bucket 获取文件的原因可能是您在配置 boto 时设置的值。在建立连接时提供 region_name 是一种很好的做法。 另一个原因可能是文件不可访问或权限被拒绝。如果稍后是问题,那么你应该是同样的错误说 Permission Denied

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-02
      • 2020-11-22
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2011-10-17
      相关资源
      最近更新 更多