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")
您好,我正在尝试使用 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")