.zshrcとか.bashrcなどに書いておく内容
長くなってしまいました。
変数評価のところをもうすこしきれいに書きたいのですが、動いているので一旦お披露目します。
(改行ないと見苦しいんですが、環境差異ありそうなので修正しました)
AWS_PAGER=cat alias aws='docker run --rm -ti -v ~/.aws:/root/.aws -v $(pwd):/aws -v ~/.ssh:/root/ssh $(for _e in AWS_PAGER AWS_ACCESS_KEY_ID AWS_CA_BUNDLE AWS_CONFIG_FILE AWS_DEFAULT_OUTPUT AWS_DEFAULT_REGION AWS_PROFILE AWS_ROLE_SESSION_NAME AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SHARED_CREDENTIALS_FILE;do if [ "x$(eval echo \$$_e)" != "x" ];then echo -n " --env $(echo ${_e})=$(eval echo \$$_e) ";fi;done) amazon/aws-cli'
経緯
AWS CLI v2になり、いくつかの理由により on docker で動かそうとしたところ以下のような挙動を確認し、こう動かしたいという要望を持ちました。
- cli_pager を ~/.aws/config に設定しているのに反映されてなさそうな挙動を示します。具体的にはless/moreのようなものが間に挟まっているように見えます。
- dockerコンテナに対して環境変数を可能な限り引き渡してあげたい(公式ドキュメントでは動作の確認のための最小限の利用方法のみの記載となっています)
cli_pager についてはあまり大きな問題になってないようなので、僕の端末環境に依存するものじゃないかと推測しています。
いずれにしても、
- 環境変数は全部引き渡したほうがよい
- pager を使わない = cat にすればいいんじゃね?
というような理由により、aws cli on docker における(そこそこ)気の利いたaliasを書いてみることにしました。
挙動の説明らしきもの
環境変数全部渡し
$for _e in ...
以降でAWS CLIが取り扱う変数を列挙し、設定が行われている場合にはdockerコンテナに対して環境変数を引き渡します。
aws cliをdockerで動かすとcli_pagerを正しく評価しない?
~/.aws/config には
[default] region=us-west-2 output=json cli_pager=
のような記述を行っていますが、どうしてもless(more?)を使いたいようです。
僕の意図した挙動ではないので、一行目で cat
をpagerとして指定しています。
別の何かをフィルタにする際には随時 env pager="hoge" aws ...
のような手続きにすることとします。