Python 无法使用boto连接aws s3存储桶 AWS\u访问\u密钥\u ID='' AWS_SECRET_ACCESS_KEY='' Bucketname='Bucket name' 进口波托 从boto.s3.key导入密钥 导入boto.s3.connection conn=boto.connect\u s3(AWS\u访问\u密钥\u ID、AWS\u机密\u访问\u密钥、, host='s3.ap-southerast-1.amazonaws.com', is_secure=True,#如果不使用ssl,则取消选中 调用_format=boto.s3.connection.OrdinaryCallingFormat(), ) bucket=conn.get_bucket(Bucketname)

Python 无法使用boto连接aws s3存储桶 AWS\u访问\u密钥\u ID='' AWS_SECRET_ACCESS_KEY='' Bucketname='Bucket name' 进口波托 从boto.s3.key导入密钥 导入boto.s3.connection conn=boto.connect\u s3(AWS\u访问\u密钥\u ID、AWS\u机密\u访问\u密钥、, host='s3.ap-southerast-1.amazonaws.com', is_secure=True,#如果不使用ssl,则取消选中 调用_format=boto.s3.connection.OrdinaryCallingFormat(), ) bucket=conn.get_bucket(Bucketname),python,amazon-web-services,amazon-s3,boto,Python,Amazon Web Services,Amazon 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,

错误:

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)
回溯(最近一次呼叫最后一次):
文件“uploads3.py”,第69行,在
上传_hello_文件_s3()
文件“uploads3.py”,第25行,在upload\u hello\u文件\u s3中
bucket=conn.get_bucket(Bucketname)
文件“/usr/local/lib/python2.7/dist packages/boto/s3/connection.py”,第431行,在get_bucket中
bucket.get_all_键(headers,maxkeys=0)
文件“/usr/local/lib/python2.7/dist packages/boto/s3/bucket.py”,第364行,在get\u all\u键中
'',标题,**参数)
文件“/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py”,第321行,全部
查询(args=s)
文件“/usr/local/lib/python2.7/dist packages/boto/s3/connection.py”,第543行,在make_请求中
覆盖次数重试次数=覆盖次数重试次数)
文件“/usr/local/lib/python2.7/dist packages/boto/connection.py”,第937行,在make_请求中
返回self.\u mexe(http\u请求、发送方、覆盖\u num\u重试)
文件“/usr/local/lib/python2.7/dist-packages/boto/connection.py”,第899行,在
提高e
socket.gaierror:[Errno-2]名称或服务未知

请帮助我解决此问题。存储桶名称、访问密钥和密钥没有问题。

对主机的请求
s3.ap-southerast-1.amazonaws.com
失败。我也无法从我的角度解决它。请检查您的存储桶设置以获得正确的主机

您的internet连接或DNS服务器也可能有问题。尝试从命令行手动ping主机,看看它是否可以解决。或者,尝试使用其他DNS


编辑:快速谷歌搜索表明主机可能是
s3-ap-southerast-1.amazonaws.com

您还可以使用以下功能(boto.s3.connect\u to\u region):

导入boto
从boto.s3.key导入密钥
导入boto.s3.connection
AWS\u访问\u密钥\u ID=“”
AWS_SECRET_ACCESS_KEY=''
Bucketname='Bucket name'
conn=boto.s3.将_连接至_地区('ap-Southwest-1',
aws\u访问\u密钥\u id=aws\u访问\u密钥\u id,
aws_secret_access_key=aws_secret_access_key,
is_secure=True,#如果不使用ssl,请取消注释
调用_format=boto.s3.connection.OrdinaryCallingFormat(),
)
bucket=conn.get_bucket(Bucketname)

这样,您就不必关心具有完整主机名的“精确”端点。是的,就像前面提到的@garnaat一样,使用最新的boto API。

主机参数中有一个输入错误。右边的是:s3-ap-southerast-1.amazonaws.com

参考资料

明白了:捕获以太网链路上的流量,并确保DNS查询中的CNAME不包含“\r”字符,例如在bucket名称中。

问题已得到回答,但我想包含一些对我有帮助的其他信息。请记住,最新的boto是boto3,但我一直在遗留环境中使用Python 2.7

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)
认证

使用boto进行身份验证至少有3种方法:首先,可以在connect_to_region()调用中包含凭据(访问密钥、密钥)。第二种方法是定义环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,然后在connect_to_region()调用中不提供凭据。最后,如果使用boto 2.5.1或更高版本,boto可以使用实例的IAM角色来创建临时凭据

对于前两个,您需要使用AWS控制台来创建一个可以访问bucket的用户。在第三种方法中,创建具有bucket访问权限的IAM角色,并将其分配给实例。第三种方法通常是最好的,因为这样您就不必在源代码管理中存储凭据,也不必在环境中管理凭据

访问存储桶

现在,我犯了一个错误,导致了与OP相同的消息。S3中的顶级对象是bucket,下面的所有对象都是键。在我的例子中,我想要访问的对象是s3:顶级/下一级/对象。我试图这样访问它:

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)

关键是,下一个级别不是bucket,而是一个键,如果bucket不存在,您将收到“Name或service not known”消息。

您是否检查了bucket设置,以查看您使用的主机是否正确?正确的端点是s3-ap-southest-1.amazonaws.com。我检查了boto的最新版本,这是正在使用的端点,因此您必须有一个在s3端点定义中有错误的旧版本。你能更新到boto的最新版本吗?最新版本是2.27.0。2.9.0已经11个月了。我正在使用最新的boto连接,连接也在工作,但连接后获取bucket需要很长时间并返回socket。gaierror:[Errno-2]名称或服务未知您是否确实ping了端点<代码>ping s3-ap-southerast-1.amazonaws.com谢谢Rico,由于您连接到该地区,问题已解决function@Rico-我如何合并您的代码,以连接到另一个AWS帐户中的不同S3存储桶,并在解密后上载一个文件接受的答案对我不起作用,但这一个起了作用。谢谢
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)
bucket = conn.get_bucket('top-level/next-level')