やったこと
AWS CLIをDockerコンテナ上で実行し、結果のみホストOSの端末へ返すようにしました。
Dockerコマンドを含む一連処理をエイリアス化することで、AWS CLIをホストOSの端末上で実行しているかのように利用できます。
利点
- ホストOSへ Python, pip, AWS CLI, クレデンシャルをインストール不要(ホストOSを汚さない)
- コンテナ化することで、開発メンバーへ統一したAWS CLI環境を配布可能
Dockerfile
Alpine、AWS CLIのバージョンはハードコードしているため、手動で適宜変更をお願いします。
Dockerfile
FROM alpine:3.9
ENV AWS_CLI_VERSION 1.16.148
RUN apk -v --update add \
python \
py-pip \
groff \
less \
mailcap \
&& \
pip install --upgrade awscli==$AWS_CLI_VERSION python-magic && \
apk -v --purge del py-pip && \
rm /var/cache/apk/*
WORKDIR /project
ENTRYPOINT ["aws"]
ビルド
docker build -t aws-cli .
設定
アクセスキーID、シークレットアクセスキー、既定のリージョンを変数に登録します。
- Windows(powershell) の場合
$AWS_ACCESS_KEY_ID="<id>"
$AWS_SECRET_ACCESS_KEY="<key>"
$AWS_DEFAULT_REGION="<region>"
- Linux の場合
export AWS_ACCESS_KEY_ID="<id>"
export AWS_SECRET_ACCESS_KEY="<key>"
export AWS_DEFAULT_REGION="<region>"
インストール
AWS CLIをホストOSで実行しているかのように見せるため、エイリアスを作成します。
Windows であれば「$profile」へ、Linuxであれば「.bash_profile」へ登録しておくと便利です。
※カレントディレクトリをコンテナ上のワークディレクトリ「/project」へマウントします。
- Windows(powershell) の場合
function aws(){
docker run --rm -it `
-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} `
-v ${pwd}:/project `
speaktech/aws-cli `
$args
}
- Linux の場合
alias aws='docker run --rm -t $(tty &>/dev/null && echo "-i") \
-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}" \
-v "$(pwd):/project" \
aws-cli'
使い方
使い方は、ホストOSへAWS CLIを導入する場合と同じです。ただし、コマンド補完はできませんのでご留意ください。
S3上のオブジェクトのリスト表示
aws s3 ls
S3上へローカルのファイルをコピー
aws s3 cp test.txt s3://test-bucket/test-prefix/
※カレントディレクトリをコンテナ上のワークディレクトリ「/project」へマウントしているため、カレントディレクトリ上のファイルをコピーできます。