AWS
aws-cli
aws-shell

aws-shell で aws-cli での作業効率を3倍にする

More than 1 year has passed since last update.

はじめに

re:Inventでアナウンスされていたaws-shellプロジェクトがavailableになりました。
ハンズオンしてみたところ、かなりいい感じだったのでまとめました。

参考
https://aws.amazon.com/jp/about-aws/whats-new/2015/12/aws-shell-accelerates-productivity-for-aws-cli-users/

aws-shellとは?

githubのリポジトリには、The interactive productivity booster for the AWS CLIとあります。
aws-cliの為の、生産性を向上させるようなインタラクティブなツールという位置づけです。

また、リポジトリを見る限りDeveloper Preview のステータスなので、その点は注意が必要です。

さっそく

リポジトリはこちらです :octocat:
https://github.com/awslabs/aws-shell

利用したバージョンは、0.0.1です。

インストール

pipで簡単にインストールできます。
パスが通っているので、ちゃんとインストールできているようです。

$ sudo pip install aws-shell
Password:
Downloading/unpacking aws-shell
  Downloading aws-shell-0.0.1.tar.gz (45kB): 45kB downloaded
  Running setup.py (path:/private/tmp/pip_build_root/aws-shell/setup.py) egg_info for package aws-shell
  (略)
$ type aws-shell
aws-shell is /usr/local/bin/aws-shell

エラーになる

早速実行してみたら、なんかエラーでた。

$ aws-shell
Traceback (most recent call last):
  File "/usr/local/bin/aws-shell", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2797, in <module>
    parse_requirements(__requires__), Environment()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 580, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (botocore 1.3.13 (/Library/Python/2.7/site-packages), Requirement.parse('botocore==1.2.8'))

そんな時は、aws-cliを最新版にします。

$ sudo pip install --upgrade awscli

こんどはうまく動きました。プロンプトがでればOKです。

$ aws-shell
aws>

設定する

Access Key ID と Secret Access Keyを設定します。
すでにaws-cliの設定がしてあり$HOME/.aws/credentialsがある場合は、defaultの設定を読み込むようです。

aws> configure
AWS Access Key ID [****************DKNA]:
AWS Secret Access Key [****************TnQa]:
Default region name [ap-northeast-1]:
Default output format [json]:

どんな機能があるの?

自動補完

cliにもある自動補完ですが、より強化されています。
Tabキーでポップアップの項目を選択することができ、Shift + Tabキーで戻ることも可能です。
スクリーンショット 2015-12-16 11.22.14.png

また、コマンドが確定するとそのコマンドのヘルプが画面下部に表示されます。ハイフンを入力すれば、オプションも補完されますし、インラインでヘルプを表示してくれます。
スクリーンショット 2015-12-16 11.18.29.png

さらに、オプションでは入力例まで表示してくれます。まじ便利すぎる。
スクリーンショット 2015-12-16 11.25.41.png

Server Side Auto Completion

補完はさらに進化して、インスタンス名の補完までやってくれます!すごい。
スクリーンショット 2015-12-16 11.30.30.png

Fuzzy Search

コマンド名は一部で検索することもできます。普通にコマンドの一部分だけでなく、頭文字を取った検索や、先頭数文字づつを取った検索などにも対応しています!

ddoで検索するとdescribe-dhcp-optionsdelete-dhcp-optionsの頭文字を取って検索した結果が返ってきます。
スクリーンショット 2015-12-16 11.37.04.png

desinsdescribe-instancesなどが検索できる例です。
スクリーンショット 2015-12-16 11.35.25.png

キーバインディング

画面下部に表示されているツールバーオプションから、F3キーでEmacsとViをToggleで切り替えることができます。
自分はViに設定しました。

コマンド実行も可能

!を先頭につけることで任意のコマンドを実行させることもできます。

aws> !date
2015年 12月16日 水曜日 11時43分36秒 JST

その他

他にも、コマンドのヒストリーが見れたり、画面下部のツールバーからaws-shellの挙動について設定変更ができたりします。また、.editというコマンドを利用することで、セッション中のヒストリーからShell Scriptを作成することもできます。

あと、aws-shellから抜ける場合はF10でもいいですが、Ctrl + Dのほうが個人的にはしっくりきました。

まとめ

補完系を大きく進化させて、冗長なコマンドもヘルプを行ったり来たりせずにいろいろできるようになりそうです。使い方によっては3倍以上の作業効率アップも狙えると思います。

現時点の欠点としては、複数のアカウントを切り替えらないことなどがありますが、こちらはIssueが立てられていますので、そのうち改善されると思います。

terminalで作業する時間が長ければ長いほど、aws-shellから受ける恩恵が大きそうです。