get_bucket () дает «плохой запрос» для кодов S3, которые я не создал через Boto

Я использую Boto, чтобы попытаться получить ведро в Amazon S3, но он возвращает Bad Request, когда я использую get_bucket () для некоторых из ковшей. Я начинаю задаваться вопросом, является ли это ошибкой с Boto, так как я могу получить ведро с помощью get_all_buckets ().

>>> from boto.s3.connection import S3Connection >>> conn = S3Connection(S3_ACCESS_KEY, S3_SECRET_KEY) >>> buckets = conn.get_all_buckets() >>> buckets [<Bucket: mysite-backups>] >>> buckets[0] <Bucket: mysite-backups> >>> conn.get_bucket('mysite-backups') Traceback (most recent call last): File "<console>", line 1, in <module> File "/path/to/virtualenv/lib/python2.7/site-packages/boto/s3/connection.py", line 502, in get_bucket return self.head_bucket(bucket_name, headers=headers) File "/path/to/virtualenv/lib/python2.7/site-packages/boto/s3/connection.py", line 549, in head_bucket response.status, response.reason, body) S3ResponseError: S3ResponseError: 400 Bad Request >>> conn.create_bucket('mysite_mybucket') <Bucket: mysite_mybucket> >>> conn.get_bucket('mysite_mybucket') <Bucket: mysite_mybucket> 

Это, кажется, проблема, даже если я вхожу в систему с той же учетной записью пользователя, что и я использую учетные записи доступа и создаю их из консоли AWS.

Любая идея, почему это может произойти?

5 Solutions collect form web for “get_bucket () дает «плохой запрос» для кодов S3, которые я не создал через Boto”

Оказывается, проблема связана с регионом (я использовал Франкфурт). Два способа борьбы с ним:

  1. Откажитесь от Франкфурта (@andpei указывает, что в настоящее время есть проблемы ) и воссоздать ведро в другом регионе.

  2. Укажите регион, используя параметр «host» при подключении (спасибо @Siddarth):

     >>> REGION_HOST = 's3.eu-central-1.amazonaws.com' >>> conn = S3Connection(S3_ACCESS_KEY, S3_SECRET_KEY, host=REGION_HOST) >>> conn.get_bucket('mysite-backups') <Bucket: mysite-backups> 

    Здесь вы можете найти соответствующий регион.

Используйте подключение к региону при работе с ведрами в разных регионах.

Общее и простое решение, которое не связано с изменением региона или настройкой определенного хоста, находится по адресу https://github.com/boto/boto/issues/2916 . После некоторого редактирования:

Регион Франкфурта AWS (Ирландия и CN тоже, по-видимому) поддерживают только алгоритм подписи V4. (…)

В документации [s3] use-sigv4 = True вы можете добавить [s3] use-sigv4 = True в ваш файл ~/.boto или установить список os.environ для включения S3_USE_SIG_V4: os.environ['S3_USE_SIGV4'] = 'True' .

Добавить хост-узел s3 к подключению boto

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, host=AWS_HOST)

Мне пришлось использовать комбинацию ответов EOL и seddonym – сначала я указал, что хотел бы использовать Sigv4 со следующим:

 os.environ['S3_USE_SIGV4'] = 'True' 

Затем, подключившись к ведру, я должен был указать хост, который казался немного глупым, но здесь идет:

 s3 = S3Connection('key id', 'access key', host='s3.eu-central-1.amazonaws.com') 

Обратите внимание, что это только для Франкфурта

  • Как я могу получить последнее измененное datetime для объектов S3 с помощью boto?
  • Как клонировать ключ в Amazon S3 с помощью Python (и boto)?
  • Поиск файлов (ключ) в ведро s3 занимает больше времени
  • Невозможно подключиться к ведрам S3 с периодами от их имени, при использовании Boto на Heroku
  • Boto s3 get_metadata
  • Как получить информацию о разрешении или группе пользователей в AWS iam с помощью boto
  • Boto S3 API не возвращает полный список ключей
  • Лучшая практика для опроса очереди AWS SQS и удаления полученных сообщений из очереди?
  • Boto Ec2 и эластичные IP-адреса
  • Не удалось установить boto в python3
  • Можно ли прочитать файл с S3 в Google App Engine с помощью boto?
  • Python - лучший язык программирования в мире.