AWS CLI on Docker

先日パイセンとAWS CLIをCircleCIから実行したいときにawsコマンドが使えるdockerイメージがあれば便利かもねみたいな話をしたので作ってみました。

既に同様のものはDocker Hubにありましたが最近自分でDockerイメージ作っていなかったのもあるので練習も兼ねて…。

Docker Hubはこちら。

用途としては以下のような場合に使いたい。

  • CircleCIなどで手軽にawsコマンド使いたい場合に使えそう
  • Dockerから実行したい(環境を汚したくないとかで)

pip入れるのが昔より楽だったので特に躓く箇所はなかった。

FROM alpine

ARG pip_installer="https://bootstrap.pypa.io/get-pip.py"

# Install dependent packages
RUN apk --update add \
    python \
    curl \
    groff

# Install awscli
RUN curl ${pip_installer} | python && \
    pip install awscli

# Execute aws command
ENV PAGER="less"
ENTRYPOINT ["/usr/bin/aws"]
CMD ["help"]
  • ベースイメージは軽量なalpine
  • デフォルトの動作はaws help
  • helpの部分はCMDで指定しているのでdocker runでの実行時に上書きされる

こんな感じで使えます。

docker run --rm \
    -e "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" \
    -e "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" \
    -e "AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION" \
    lorentzca/aws s3 ls

クレデンシャルを環境変数で注入しているが若干面倒。直接環境変数読み込んでくれるようにできないかな…。

今回Docker Hubにpushするにあたって、GitHubと連携させて自動ビルドするようにしてみました。このお陰でDockerfileがDocker Hubページ内で見れるようになりました。

この辺の自動ビルド周りについては別途まとめてみようと思っています。