つらい、というのはあくまでCircleCIとかでインストールするときの話。
動機
今Docker RegistryをAmazon ECRに移行していってるんですが、今までCI上でやっていたdocker build/docker tag/docker pushのプロセスをECRでも同様にやるために、ecr get-login
をする必要がある。
ecr get-login
の正体はECRにdocker loginするためのコマンドを標準出力で返してくれるというもの。
$ aws ecr get-login --region ap-northeast-1
docker login -u AWS -p あなたのアクセストークン none https://あなたのID.dkr.ecr.ap-northeast-1.amazonaws.com
つまり、この docker login
コマンドをCI上で実行すれば、ECRに対してdocker pushができる。
別途 ecr get-login
でゲットした docker login
コマンドを直接CI上でやればよくね?という議論もあるのだが、トークンは失効するし、そもそもウチのプロジェクトはアホみたいにリポジトリが多いのでトークン更新の度に、各リポジトリにcredentialsを設定して回るのはさすがにアホらしい。基本毎回 ecr get-login
するのがいいと考えている。
aws-cliインストールつらいよ問題
aws-cliのリポジトリを見てもらえればわかるが、aws-cliはpythonを必要とする。
CircleCIではcache_directoriesの機能があるので初回以降はインストールしないみたいな制御も可能なのだが、そもそもCI上で使うのにたまにpip周りでハマったりするのもダルい。 なので、この手のツールは基本的にバイナリとして提供されるべきだと思っている。
というわけで、機能はaws-cliに比べると全然足りないのだが、インストールで消耗しないものを作った。
Goで書かれている。go getで取得するもよいし、リリースタグ毎にtarボールでアーカイブしたlinux用のバイナリも用意してあるので、それをダウンロードして実行ディレクトリに配置するのがCI的には楽。今は機能が少ないので3MBくらいだが、多少機能が膨らんでもaws-cliをインストールするコストよりはいいだろうと思ってる。
ECRであれば、以下のようにやればaws-cliと同じく docker login
コマンドが得られるように作ってある。
$ lightaws ecr get-login --region ap-northeast-1
今後について
今のところaws-cliの機能をフルフルでクローンしていくつもりはさすがに無い。必要に応じて機能を追加していくスタイルなので、欲しいものがあればどんどんPRしていってほしい🙏
よいCIはよいバイナリから