0

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

なるべく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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away