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
请帮我解决这个问题,桶名和访问密钥和密钥没有问题。
答案 0 :(得分:41)
您还可以使用以下(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)
这样你就不必关心&#39;确切的&#39;具有完整主机名的端点。是的,就像@garnaat提到的那样,使用最新的boto API。
答案 1 :(得分:1)
对主机s3.ap-southeast-1.amazonaws.com
的请求失败。我也无法解决这个问题。检查您的存储桶设置是否正确。
您的互联网连接或DNS服务器可能也存在问题。尝试从命令行手动ping主机,看看它是否解析。或者,尝试使用其他DNS。
编辑:快速谷歌搜索表明主机可能是s3-ap-southeast-1.amazonaws.com
。
答案 2 :(得分:1)
主机参数中存在拼写错误。正确的是:s3-ap-southeast-1.amazonaws.com
答案 3 :(得分:1)
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)
答案 4 :(得分:0)
问题:捕获以太网链路上的流量并确保DNS查询中的CNAME NOT 包含&#39; \ r&#39;字符例如在桶名称中。
答案 5 :(得分:0)
这个问题已经回答,但我想提供一些对我有帮助的其他信息。请记住,最新的boto是boto3,但是我在传统环境中只能使用Python 2.7。
身份验证
至少有3种通过boto进行身份验证的方法:首先,您可以在connect_to_region()调用中包括凭据(访问密钥,秘密密钥)。第二种方法是定义环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,然后在connect_to_region()调用中不提供凭证。最后,如果使用boto 2.5.1或更高版本,则boto可以对实例使用IAM角色来创建临时凭据。
对于前两个,您需要使用AWS控制台来创建有权访问存储桶的用户。在第三种方法中,创建一个具有对存储桶访问权限的IAM角色,并将其分配给实例。第三种方法通常是最好的,因为这样就不必在源代码管理中存储凭据,也不必在环境中管理凭据。
访问存储桶
现在我所犯的错误导致了与OP相同的消息。 S3中的顶级对象是存储桶,下面的所有内容都是键。在我的情况下,我要访问的对象位于s3:top / level / next-level / object。我试图这样访问它:
bucket = conn.get_bucket('top-level/next-level')
重点是,下一级不是存储桶而是密钥,如果存储桶不存在,您将收到“名称或服务未知”消息。