share facebook facebook facebook twitter twitter menu hatena pocket slack

2019.11.18 MON

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

甲斐 甲

WRITTEN BY 甲斐 甲

なるべく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コマンドを簡単に実行できるコマンドをつくってみた

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。