boto3の実行時エラー

Pythonでの実装は初めてで”boto3“を使ってAWSにアクセスしている。その中で下記のようなエラーが出て、さてどうしたものかと。

■ 環境

  • boto3
  • Python 2.7.12
  • Ubuntu 16.04

■ error message

当初は自身の実装内容がまずいのかと思っていたのだが、よく読んでみると実行しているホストの時間がズレているのが原因であるようだ。

botocore.exceptions.ClientError: An error occurred (SignatureDoesNotMatch) when calling the ListMetrics operation: Signature expired: 20170410T110918Z is now earlier than 20170411T100351Z (20170411T100851Z - 5 min.)

UbuntuはVirtualBoxで稼働させている。時間は特に合わせていない、かつVMを稼働させたままMacをsleepさせたりしているので、時間がズレているのであろう。時間を確認すると下記のようだ。

ubuntu@ubuntu-xenial:~$ date
Mon Apr 10 11:10:26 UTC 2017
ubuntu@ubuntu-xenial:~$

時間を同期する。`ntpdate`を使う。

ubuntu@ubuntu-xenial:~$ sudo apt-get update
ubuntu@ubuntu-xenial:~$ sudo apt-cache search ntpdate
  :
ntpdate - client for setting system time from NTP servers
  :
ubuntu@ubuntu-xenial:~$
ubuntu@ubuntu-xenial:~$ sudo apt-get install ntpdate

時間を合わせる。

ubuntu@ubuntu-xenial:~$ sudo ntpdate -v ntp.nict.jp

時間が現在時刻と同期したのを確認して再度実装したpythonのスクリプトを実行したところ、思い通りの結果が得られた。

エラーメッセージを見る感じでは、実際の時間と5分以内の誤差でないと正常に応答を返してくれないのであろうか。

以上。