我的问题最好用以下脚本来描述:
import boto
boto.__version__
# OUT: '2.19.0'
from boto.ec2.connection import EC2Connection
ec2 = EC2Connection(**creds)
regions = ec2.get_all_regions()
from boto.sqs.connection import SQSConnection
regions[0]
# OUT: RegionInfo:eu-west-1
sqs = SQSConnection(region=regions[0], **creds)
sqs.get_all_queues()
# OUT: Traceback (most recent call last):
# OUT: File "<input>", line 1, in <module>
# OUT: File "/opt/zenoss/lib/python2.7/site-packages/boto/sqs/connection.py", line 338, in get_all_queues
# OUT: return self.get_list('ListQueues', params, [('QueueUrl', Queue)])
# OUT: File "/opt/zenoss/lib/python2.7/site-packages/boto/connection.py", line 1119, in get_list
# OUT: raise self.ResponseError(response.status, response.reason, body)
# OUT: SQSError: SQSError: 400 Bad Request
# OUT: <?xml version="1.0" encoding="UTF-8"?>
# OUT: <Response><Errors><Error><Code>NoSuchVersion</Code><Message>The requested version (2012-11-05) of service AmazonEC2 does not exist</Message></Error></Errors><RequestID>1600907e-6780-46f5-b5e6-e647a660abf8</RequestID></Response>我无法为AWS或boto找到有关此错误的含义以及如何修复它的文档。那是boto的臭虫吗?
发布于 2013-12-13 16:07:53
上述代码的问题是,来自get_all_regions()模块的EC2调用返回由区域名称和区域端点组成的RegionInfo对象列表。但是端点是用于EC2服务,而不是SQS。因此,如果将该RegionInfo传递给SQSConnection构造函数,它最终将尝试对EC2端点发出NoSuchVersion请求,这将导致NoSuchVersion错误。
我会这样做:
import boto.sqs
sqs = boto.sqs.connect_to_region('eu-west-1')
sqs.get_all_queues()类似地,如果您需要一个EC2连接:
import boto.ec2
ec2 = boto.ec2.connect_to_region('eu-west-1')https://stackoverflow.com/questions/20568679
复制相似问题