2012-04-09 8 views
6

¿Puede alguien decir por qué me aparece este error?400 Mala solicitud al intentar instancias con amazon

Estoy obteniendo esto mientras ejecuto las instancias después de conectarme al servidor de Amazon.

import boto 

con = boto.connect_ec2(aws_access_key_id='XXX',aws_secret_access_key='XXX') 
con.get_all_instances() 

Traceback (most recent call last): 

    File "getAllinstanc.py", line 7, in <module> 

    reservations = ec2conn.get_all_instances() 

    File "c:\jiva\py26\lib\site-packages\boto-2.3.0-py2.6.egg\boto\ec2\connection.py", line 467, in get_all_instances 

    [('item', Reservation)], verb='POST') 
    File "c:\Jiva\py26\lib\site-packages\boto-2.3.0-py2.6.egg\boto\connection.py", line 896, in get_list 

    raise self.ResponseError(response.status, response.reason, body) 

boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 

<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>RequestExpired</Code><Message>Request has expired. Timestamp date is 2012-04-09T06:54:53Z</Message></Error></Errors><RequestID>44 
08be18-5d2b-420b-af48-e2cb03</RequestID></Response> 

Respuesta

7

Cada petición que boto (o cualquier otra biblioteca de cliente de AWS) está firmado criptográficamente y tiene una marca de tiempo asociada a ella (por lo general la cabecera Fecha en la solicitud). Las marcas de tiempo deben estar razonablemente cerca, generalmente en 15 minutos, de la idea de Amazon de la hora actual. Si la marca de tiempo está fuera de esta ventana aceptable, recibirá un error como este.

Por lo tanto, la respuesta breve es comprobar la hora del sistema en la máquina del cliente. Parece ser inexacto.

+0

Si mi hora del sistema está apagado estoy recibiendo una ** 401 Unauthorized **, no un 400 - ''boto.exception.EC2ResponseError: EC2ResponseError: 401 '' no autorizado. –

2

Hay un buen método para probar la inclinación del reloj descrita en Amazon's forum.

Tipo:

wget -S "https://email.us-east-1.amazonaws.com" 

Esto devuelve un error, sino que incluye el tiempo del sistema remoto en la cabecera de la fecha. Luego, compare eso con los resultados de date en su sistema (suponiendo que se deriva de Unix).

Si su sistema operativo pasa a ser Ubuntu u otra variante del Debian, se puede mantener la hora actual mediante la instalación de un demonio NTP como esto:

sudo apt-get install ntp 
Cuestiones relacionadas