Невозможно подключиться к ведрам S3 с периодами от их имени, при использовании Boto на Heroku

Мы получаем ошибку сертификата при попытке подключиться к нашему ведро S3 с помощью Boto. Как ни странно, это проявляется только при доступе к ведру с периодами в его имени WHILE, работающем на Heroku.

from boto.s3.connection import S3Connection
conn = S3Connection({our_s3_key}, {our_s3_secret})
bucket = conn.get_bucket('ourcompany.images')

Вызывает следующую ошибку:

CertificateError: имя хоста 'ourcompany.images.s3.amazonaws.com' не соответствует ни одному из '*.s3.amazonaws.com', 's3.amazonaws.com'

Но тот же код отлично работает при запуске локально, а также будет работать на Heroku, если имя bucket было "ourcompany-images" вместо "ourcompany.images"

Ответы

Ответ 1

В соответствии с соответствующей проблемой github добавьте это в конфигурацию:

[s3]
calling_format = boto.s3.connection.OrdinaryCallingFormat

Или укажите calling_format при создании S3Connection:

from boto.s3.connection import OrdinaryCallingFormat

conn = S3Connection(access_key, secret_key, calling_format=OrdinaryCallingFormat())

Код работал для вас локально и не работал на героку, скорее всего, из-за использования разных версий python. Я подозреваю, что вы используете 2.7.9 runtime для heroku, у которого включена проверка сертификатов для http-клиентов stdlib.