问题
Can any body say why I'm getting this error?
I'm getting this while pulling instances after connection to 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>
回答1:
Each request made by boto (or any other AWS client library) is cryptographically signed and has a timestamp associated with it (usually the Date header in the request). The timestamps have to be reasonably close, usually within 15 minutes, of Amazon's idea of the current time. If the timestamp is outside this acceptable window, you will receive an error like this.
So, the short answer is to check the system time on the client machine. It appears to be inaccurate.
回答2:
There's nice method to test for clock skew described on Amazon's forum.
Type:
wget -S "https://email.us-east-1.amazonaws.com"
This returns an error, but includes the remote system's time in the Date header. Then compare that with the results of date
on your system (assuming it's unix derived).
If your OS happens to be Ubuntu or other Debian variant, you can keep the time current by installing an ntp daemon like this:
sudo apt-get install ntp
来源:https://stackoverflow.com/questions/10070259/400-bad-request-while-pulling-instances-with-amazon