ようへいの日々精進XP

よかろうもん

Aws::RDS::Errors::SignatureDoesNotMatch というエラーが出た際の対処

ひとまずメモ。

課題

Docker コンテナ内で RDS のログを AWS SDK for Ruby で弄っている時に以下のようなエラーが出た。

 Aws::RDS::Errors::SignatureDoesNotMatch error=#<Aws::RDS::Errors::SignatureDoesNotMatch: Signature expired: 20160506T021015Z is now earlier than 20160506T021408Z (20160506T022908Z - 15 min.)>

RDS に限らず API コールを行う際の署名の有効期限が切れている旨のエラー。API を実行する環境の時刻がズレていると発生する。

docs.aws.amazon.com


対応

それぞれの環境の時刻をあわせることで解消。

boot2docker 側

sudo ntpd -q -p 1.jp.pool.ntp.org を実行する。

% docker-machine ssh dev01
                        ##         .
                  ## ## ##        ==               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/             \    \         __/
              \____\_______/ _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.11.0, build HEAD : 32ee7e9 - Wed Apr 13 20:06:49 UTC 2016
Docker version 1.11.0, build 4dc5990
docker@dev01:~$ sudo ntpd -q -p 1.jp.pool.ntp.org

コンテナ側(Alpine Linux の場合)

boot2docker 側を修正したら直す必要は無いと思われるが、せっかくなのでコンテナの時刻を JST にしてみた。

RUN apk --no-cache --update add \
                            tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata && \
    rm -rf /tmp/* /var/tmp/* /var/cache/apk/*

以上

メモでした。