2012-04-09 4 views
6

Kann jeder Körper sagen, warum ich diesen Fehler bekomme?400 Schlechte Anforderung beim Ziehen von Instanzen mit Amazon

Ich bekomme dies beim Ziehen von Instanzen nach der Verbindung zu Amazon Server.

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> 

Antwort

7

Jeder von Boto gemacht Anfrage (oder andere Client-Bibliothek AWS) kryptographisch signiert und hat eine Zeitmarke zugeordnet (in der Regel das Datum der Header in der Anfrage). Die Zeitstempel müssen in der Regel innerhalb von 15 Minuten von Amazons Vorstellung der aktuellen Zeit nah sein. Wenn der Zeitstempel außerhalb dieses zulässigen Fensters liegt, erhalten Sie einen Fehler wie diesen.

Also, die kurze Antwort ist die Systemzeit auf dem Client-Rechner zu überprüfen. Es scheint ungenau zu sein.

+0

Wenn meine Systemzeit ist weg Ich erhalte ein ** 401 Unauthorized **, nicht ein 400 -'''boto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized''' –

2

Es gibt eine gute Methode zum Testen der Taktverschiebung, die unter Amazon's forum beschrieben wird.

Typ:

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

Dies gibt einen Fehler, enthält aber die Zeit des Remote-Systems im Date-Header. Dann vergleichen Sie das mit den Ergebnissen von date auf Ihrem System (vorausgesetzt, es ist Unix abgeleitet).

Wenn Ihr O geschieht Ubuntu oder andere Debian-Variante zu sein, können Sie die Zeit aktuell halten, indem sie einen NTP-Daemon wie folgen installieren:

sudo apt-get install ntp 
Verwandte Themen