AWS CLIをDockerで実行する

AWS

これまで Mac から AWS CLI を利用するとき、pyenv で Python を入れて、pip で awscli を入れていました。簡単に Python を使えるのは Mac のいいところでもあるのですが、パッケージが増えてくるとバージョンの依存関係の問題が起きることがありました。

コンテナ時代だし、ローカルの Python で実行するのはやめて Docker で実行することにしました。

目次

  1. AWS CLI のコンテナイメージを作る
  2. 使い方

AWS CLI のコンテナイメージを作る

Docker イメージは AWS 公式のものが無さそうだったので、適当に自分で作ります。バージョンは適宜変更してください。jq は結果をフィルタするときに使うことがあるので入れています。

DockerFile


FROM python:3.8-alpine3.10

ENV PYTHONIOENCODING=UTF-8

RUN apk add --no-cache jq \
    && pip install awscli

CMD ["aws"]

ビルドします。タグ名は適宜変更してください。


docker build . -t karakaram/awscli

ビルド時の出力をみると、awscli-1.16.301 がインストールされたので、タグをつけておきます。


docker tag karakaram/awscli:latest karakaram/awscli:1.16.301

使い方

こんな感じで使います。


docker run --rm karakaram/awscli aws --version

このままだと AWS のクレデンシャルが無いとエラーがでるので、クレデンシャルがすでにローカル環境にある場合は、コンテナにクレデンシャルをマウントします。


docker run --rm -v $HOME/.aws:/root/.aws karakaram/awscli aws s3 ls

ローカルにクレデンシャルがない場合は、以下のように -it オプションでコンテナを起動し、aws configure コマンドでクレデンシャルを作成します。


docker run --rm -v $HOME/.aws:/root/.aws -it karakaram/awscli aws configure

カレントディレクトリにあるファイルを利用して何かしたい場合は、カレントディレクトリをマウントします。


docker run \
    --rm \
    -v $HOME/.aws:/root/.aws \
    -v `pwd`:/root/work \
    -w /root/work \
    karakaram/awscli \
    aws s3 cp ./foo.txt s3://mybucket

コマンドが長くて辛いので、上記のコマンドを .bashrc などにエイリアスを書くと


alias aws='docker run --rm -v $HOME/.aws:/root/.aws -v `pwd`:/root/work -w /root/work karakaram/awscli aws'

ターミナルで、こんな感じで aws コマンドを実行できます。


aws s3 cp ./foo.txt s3://mybucket

コンテナに入って aws コマンドを実行することも多いので、こんなエイリアスも書いています。


alias aws-docker='docker run --rm -v $HOME/.aws:/root/.aws -v `pwd`:/root/work -w /root/work -it karakaram/awscli ash'

こんな感じでコンテナに入ってから aws コマンドを実行します。


aws-docker

~/work # aws s3 ls