2020年6月10日追記
AWS CLI バージョン 2 からは AWS 公式の Docker イメージが利用できるのでこちらを使いましょう。
amazon/aws-cli - Docker Hub
公式 AWS CLI バージョン 2 Docker イメージの使用 - AWS Command Line Interface
これまで Mac から AWS CLI バージョン 1 を利用するとき、pyenv で Python を入れて、pip で awscli を入れていました。簡単に Python を使えるのは Mac のいいところでもあるのですが、パッケージが増えてくるとバージョンの依存関係の問題が起きることがありました。
コンテナ時代だし、ローカルの Python で実行するのはやめて Docker で実行することにしました。
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'