Не удалось подключить ведро aws s3 с помощью boto
AWS_ACCESS_KEY_ID = '<access key>'
AWS_SECRET_ACCESS_KEY = '<my secret key>'
Bucketname = 'Bucket-name'
import boto
from boto.s3.key import Key
import boto.s3.connection
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,
host ='s3.ap-southeast-1.amazonaws.com',
is_secure=True, # uncommmnt if you are not using ssl
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.get_bucket(Bucketname)
Ошибка:
Traceback (most recent call last):
File "uploads3.py", line 69, in <module>
upload_hello_file_s3()
File "uploads3.py", line 25, in upload_hello_file_s3
bucket = conn.get_bucket(Bucketname)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 431, in get_bucket
bucket.get_all_keys(headers, maxkeys=0)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 364, in get_all_keys
'', headers, **params)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 321, in _get_all
query_args=s)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 543, in make_request
override_num_retries=override_num_retries)
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 937, in make_request
return self._mexe(http_request, sender, override_num_retries)
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 899, in _mexe
raise e
socket.gaierror: [Errno -2] Name or service not known
пожалуйста, помогите мне решить эту проблему, нет проблем с именем и ключом ключа и секретным ключом.
Ответы
Ответ 1
Вы также можете использовать следующее (boto.s3.connect_to_region):
import boto
from boto.s3.key import Key
import boto.s3.connection
AWS_ACCESS_KEY_ID = '<access key>'
AWS_SECRET_ACCESS_KEY = '<my secret key>'
Bucketname = 'Bucket-name'
conn = boto.s3.connect_to_region('ap-southeast-1',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
is_secure=True, # uncomment if you are not using ssl
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.get_bucket(Bucketname)
Таким образом, вам не нужно заботиться о "точной" конечной точке с полным именем хоста. И да, например, @garnaat, используйте последний API-интерфейс boto.
Ответ 2
Запрос на хост s3.ap-southeast-1.amazonaws.com
не выполняется. Я также не могу решить это с моей стороны. Проверьте настройки вашего ведра для правильного хоста.
Также может возникнуть проблема с подключением к Интернету или DNS-сервером. Попробуйте вручную прогнать хост из командной строки и посмотреть, разрешится ли она. Кроме того, попробуйте использовать другой DNS.
Изменить: быстрый поиск в googling предполагает, что хост может быть s3-ap-southeast-1.amazonaws.com
.
Ответ 3
В параметре хоста есть опечатка. Правильный: s3-ap-southeast-1.amazonaws.com
ЛИТЕРАТУРЫ
Регионы и конечные точки Amazon
Ответ 4
Gotcha: захватите трафик на вашей Ethernet-ссылке и убедитесь, что CNAME в DNS-запросах НЕ содержит символ '\ r', например. в имени ведра.
Ответ 5
from boto3.session import Session
ACCESS_KEY='your_access_key'
SECRET_KEY='your_secret_key'
session = Session(aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
my_bucket = s3.Bucket('bucket_name')
for s3_file in my_bucket.objects.all():
print(s3_file.key)