以前上記の記事でPackerでDocker Imageを作成する中で最後にDocker Pushする際の情報をaws
コマンドを使用してDocker Login用のコマンドを出力してそれを使っていた
# 事前にaws configureがすんでいること $ aws ecr get-login --region ap-northeast-1 docker login -u AWS -p [password] -e none https://11111.dkr.ecr.ap-northeast-1.amazonaws.com
ただこの手順には1つ問題があった
問題点
This command retrieves a token that is valid for a specified registry for 12 hours, and then it prints a docker login command with that authorization token.
12時間有効なトークンを発行するよみたいな内容
つまりDockerImageを作成する際に12時間たった時もしくは毎回aws ecr get-login --region ap-northeast-1
してDocker Login用のパスワードを取り出す必要が出て来る
さすがにこれは面倒
解決策
Packer側のdocker pushのdocをよく見るとecr_login
というオプションがある
これをtrueにするとPackerの内部的にはaws/aws-sdk-goを使って認証してdocker login用のusername, passwordを取り出してそれで処理してくれる
今回は~/.aws/credentials
を使ったがPacker側にAWS access keyとAWS secret keyで設定することも出来る
最後に
毎回aws ecr get-loginしなくてよくなったのでDocker Imageを作って最後にpushのフェーズで12時間たっていてパスワード無効でpushが出来ず落ちるが回避できそう
※ もちろんAWSのcredential情報が間違っていたら当然落ちる