Python boto 连接到 S3 抛出错误

Python boto connecting to S3 throwing error

您好,我正在尝试使用 boto 2.43 将 Python 连接到法兰克福地区的 S3,我想在其中打印存储桶名称的内容... 以下是我的代码:

from boto.s3.connection import S3Connection
hostname='s3.eu-central-1.amazonaws.com'
conn = S3Connection(aws_access_key_id,aws_secret_access_key, host=hostname)
bucket_name = conn.get_bucket('jd-eu01-isg-analytics-data-from-us01', validate=False)
for key in bucket_name.list(prefix='EU_Scripts_For_Frankfurt/'):
    print key
    continue

当我执行它时,它抛出以下错误:

    File "/usr/lib/python2.7/site-packages/boto/s3/bucketlistresultset.py", line 34, in bucket_lister
    encoding_type=encoding_type)
  File "/usr/lib/python2.7/site-packages/boto/s3/bucket.py", line 473, in get_all_keys
    '', headers, **params)
  File "/usr/lib/python2.7/site-packages/boto/s3/bucket.py", line 399, in _get_all
    query_args=query_args)
  File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 668, in make_request
    retry_handler=retry_handler
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 1071, in make_request
    retry_handler=retry_handler)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 927, in _mexe
    request.authorize(connection=self)
  File "/usr/lib/python2.7/site-packages/boto/connection.py", line 377, in authorize
    connection._auth_handler.add_auth(self, **kwargs)
  File "/usr/lib/python2.7/site-packages/boto/auth.py", line 727, in add_auth
    **kwargs)
  File "/usr/lib/python2.7/site-packages/boto/auth.py", line 546, in add_auth
    string_to_sign = self.string_to_sign(req, canonical_request)
  File "/usr/lib/python2.7/site-packages/boto/auth.py", line 486, in string_to_sign
    sts.append(self.credential_scope(http_request))
  File "/usr/lib/python2.7/site-packages/boto/auth.py", line 468, in credential_scope
    region_name = self.determine_region_name(http_request.host)
  File "/usr/lib/python2.7/site-packages/boto/auth.py", line 662, in determine_region_name
    return region_name
UnboundLocalError: local variable 'region_name' referenced before assignment

如何解决这个问题??这是因为boto版本吗??任何解决方案请

使用boto3,更简单。 AWS 不支持 boto2,并且 boto 已被弃用,并且无意添加功能

因为找不到区域而弹出错误。 Boto/boto3 API 将在 boto/boto3 服务初始化阶段检查区域名称。如果您未指定它,它将查找在凭据文件或环境变量中定义的默认区域名称(例如 ~/.aws/config)。

即使您明确指定 S3 端点也是如此 URL。如果您不想对凭据、区域名称进行硬编码,则必须按照此处指定的方式设置 AWS 凭据:credential configuration

使用 credential file/environment 变量制作 boto/boto3 将使您的代码更简洁、更灵活,例如您甚至可以在不更改代码的情况下使用 STS。例如:

import boto3
# You can choose between service resource or service client.
s3 = boto3.client("s3")

response = s3.list_objects_v2(
  Bucket="jd-eu01-isg-analytics-data-from-us01", 
  Prefix="EU_Scripts_For_Frankfurt"
)

for content in response["Contents"]:
    print content["Key"]

尽管如此,您仍然可以通过在初始化boto/boto3资源时传递参数来硬编码访问密钥ID、secre_key、区域名称等。 (boto API 类似)

import boto3
s3 = boto3.client(
  "s3",
  region_name = "eu-central-1",
  aws_access_key_id = 'xxxxxxxx",
  aws_secret_access_key= = "yyyyyyy")