2016-11-07 2 views
0

Привет Я пытаюсь подключиться к Python S3 во Франкфурте области с использованием бото 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 ?? Любые решения, пожалуйста,

ответ

-1

Используйте boto3, это проще. boto2 не поддерживается AWS и boto уже устарел и нет намерения для функций

Ошибка появляется, потому что она не может найти регион. Boto/boto3 API проверит имя региона внутри этапа инициализации услуги boto/boto3. Если вы не указали это, он будет искать имя региона по умолчанию, определяющее внутри файла учетных данных или переменную среды (например, ~/.aws/config).

Это верно, даже если вы явно указываете URL-адрес конечной точки S3. Если вы не хотите жестко кодировать учетные данные, имя региона, то вы должны установить учетные данные AWS, как указано здесь: credential configuration.

Выполнение 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"] 

Тем не менее, вы можете по-прежнему жёстко ключ доступа, идентификатор secre_key, название региона и т.д., передавая параметр при инициализации бото/boto3 ресурсы. (boto API аналогичен)

import boto3 
s3 = boto3.client(
    "s3", 
    region_name = "eu-central-1", 
    aws_access_key_id = 'xxxxxxxx", 
    aws_secret_access_key= = "yyyyyyy") 
Смежные вопросы