なるべくDockerを利用して手元の端末を汚さない試み。便利かはわかりません。

使い方

docker-aws コマンドはDockerコンテナでawsコマンドを実行しています。
認証情報はホストの~/.awsを参照します。

S3にバケット作成してファイルをアップロードしたり削除したりしてみます。

AWS CLIでS3を操作するコマンド一覧 – Qiita
https://qiita.com/uhooi/items/48ef6ef2b34162988295

# credentialsがある前提
> ls ~/.aws
config      credentials models

> docker-aws --version
aws-cli/1.16.263 Python/2.7.16 Linux/4.9.184-linuxkit botocore/1.12.253

> docker-aws s3 mb s3://kai-cli-test
make_bucket: kai-cli-test

> echo "hoge" > hoge.txt

> docker-aws s3 cp hoge.txt s3://kai-cli-test
upload: ./hoge.txt to s3://kai-cli-test/hoge.txt

> docker-aws s3 cp s3://kai-cli-test/hoge.txt hoge2.txt
download: s3://kai-cli-test/hoge.txt to ./hoge2.txt

> ls
hoge.txt   hoge2.txt

> cat hoge2.txt
hoge

# 後片付け
> docker-aws s3 rm s3://kai-cli-test/hoge.txt
delete: s3://kai-cli-test/hoge.txt

> docker-aws s3 rb s3://kai-cli-test
remove_bucket: kai-cli-test

環境設定

Dockerイメージを作成

下記を参考にawsコマンドを実行するのに最低限のDockerfileを用意してイメージを作成します。

Dockerでaws-cli環境を作ればアカウント切替が簡単に – Qiita
https://qiita.com/icck/items/40545486a342179a5bd3

AWS CLI用のDockerイメージを作った
https://blog.lorentzca.me/aws-cli-on-docker/

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

で、docker buildします。

> docker build -t aws-cli .

コマンドを作成

下記を参考にしてDockerコンテナ内でawsコマンドを実行できるようにします。

Dockerにホームディレクトリをマウントしちゃおう – Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608

Dockerコンテナからホスト側カレントディレクトリにアクセス – Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3

ポイントは以下のとおりです。

  • -v $HOME/.aws:$HOME/.aws -e "HOME=$HOME" で認証情報をホストにあるものを参照
  • -v $PWD:$PWD -w $PWD でコマンド実行時のカレントディレクトリを指定
  • --entrypoint=aws$*で通常のawsコマンド実行と同じ挙動を実現

docker-aws

#!/bin/bash
docker run -it --rm \
  -v $HOME/.aws:$HOME/.aws -e "HOME=$HOME" \
  -v $PWD:$PWD -w $PWD \
  --entrypoint=aws \
  aws-cli \
  $*

作成したファイルのシンボリックリンクを/usr/local/binにはって実行できるようにします。/usr/local/bin$PATHに含まれている前提です。

自作のコマンドを作成した – Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625

> chmod +x docker-aws
> ln -s docker-aws /usr/local/bin/

これで最初にあげたようにdocker-awsコマンドが実行できるようになります。
コマンド実行のカレントディレクトリがDockerコンテナで参照できるので、たいていのコマンド実行では問題にならないかなと。
docker-awsがコマンド打つのに長ったらしいのはエイリアスなんかでどうにでもなります。

まとめ

使えるかわかりませんが、とりあえずイメージしてたコマンドが出来上がりました。
これを応用すればGCPのgcloudコマンドなんかもDockerコンテナで実行できそうですね。

参考

AWS CLIでS3を操作するコマンド一覧 – Qiita
https://qiita.com/uhooi/items/48ef6ef2b34162988295

Dockerでaws-cli環境を作ればアカウント切替が簡単に – Qiita
https://qiita.com/icck/items/40545486a342179a5bd3

AWS CLI用のDockerイメージを作った
https://blog.lorentzca.me/aws-cli-on-docker/

Dockerにホームディレクトリをマウントしちゃおう – Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608

Dockerコンテナからホスト側カレントディレクトリにアクセス – Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3

自作のコマンドを作成した – Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625

元記事はこちら

DockerコンテナからAWSコマンドを簡単に実行できるコマンドをつくってみた