2012-04-09 10 views
6

Czy dowolne ciało może powiedzieć, dlaczego otrzymuję ten błąd?400 Błędne żądanie podczas ciągnięcia instancji z amazonem

Otrzymuję to podczas ciągnięcia instancji po połączeniu z serwerem 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> 

Odpowiedz

7

Każdy wniosek złożony przez boto (lub jakiejkolwiek innej biblioteki klienta AWS) jest kryptograficznym podpisany i posiada znacznik czasu związanego z nim (zwykle nagłówek Data na życzenie). Znaczniki czasu muszą być rozsądnie bliskie, zwykle w ciągu 15 minut, od pomysłu Amazon na obecny czas. Jeśli znacznik czasu wykracza poza akceptowalne okno, pojawi się błąd podobny do tego.

Krótko mówiąc, należy sprawdzić czas systemowy na komputerze klienta. Wydaje się być niedokładna.

+0

Jeśli mój czas system jest wyłączony Otrzymuję ** 401 Nieuprawnione **, a nie 400 - '' 'boto.exception.EC2ResponseError: EC2ResponseError: 401 Nieautoryzowane' '' –

2

Istnieje niezła metoda sprawdzania skosu zegara opisana na Amazon's forum.

Typ:

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

ta zwraca błąd, ale obejmuje czas systemu zdalnego za datę cel. Następnie porównaj to z wynikami date w twoim systemie (zakładając, że pochodzi z unix).

Jeśli system operacyjny dzieje się Ubuntu lub inny wariant Debiana, można zachować aktualny czas poprzez zainstalowanie demona ntp takiego:

sudo apt-get install ntp 
Powiązane problemy