share facebook facebook facebook twitter twitter menu hatena pocket slack

2020.06.09 TUE

AWS CLI on dockerで標準出力ページングや環境変数引き渡しで悩まないためのalias設定

齋藤 康征

WRITTEN BY 齋藤 康征

.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 ... のような手続きにすることとします。

元記事はこちら

AWS CLI on dockerで標準出力ページングや環境変数引き渡しで悩まないためのalias設定

齋藤 康征

齋藤 康征

cloudpackの @saitara (齋藤 康征)です。 大きなトラフィックと大量のアクセスを好物としてます。

cloudpack

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