ひとまずメモ。

課題

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

Aws::RDS::Errors::SignatureDoesNotMatch error=#<:rds::errors::signaturedoesnotmatch: signature expired: is now earlier than min.>

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

署名バージョン 4 に関連する一般的なエラーのトラブルシューティン ...

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/*

以上

メモでした。

元記事はこちら

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