2013-12-13 3 views
1

Моя проблема лучше всего описывается следующим скриптом:бото SQS NoSuchVersion Ошибка

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?

ответ

2

Проблема с вышеуказанным кодом заключается в том, что вызов get_all_regions() из модуля EC2 возвращает список объектов RegionInfo, состоящих из имени региона и конечной точки региона. Но конечная точка предназначена для службы EC2, а не для SQS. Итак, если вы передадите этот RegionInfo в конструктор SQSConnection, он в конечном итоге попытается сделать запросы SQS против конечной точки EC2, что приведет к ошибке 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') 
Смежные вопросы