LoginSignup
10
7

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-10-30

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

AWS CLI v2のイメージを作成する

AWS CLI v2がGA(一般利用可能: 2020/02/12)になったので、イメージ作成しようと思って調べてみたら、すでに試されている方がおられたのでそちらが参考になります。感謝!

AWS CLI v2をDockerでお手軽に試してみる - Qiita
https://qiita.com/tomohisaota/items/8b8aa2d1dbf0d01da450

コマンドを作成

下記を参考にして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

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7