ようへいの日々精進XP

よかろうもん

Supercharged AWS CLI = SAWS メモ

追記

早速、リソースの補完を追加してみた。

f:id:inokara:20150923115926p:plain

DynamoDB のテーブル名を補完させた

tl;dl

おおってことで試してみた。あくまでも試してみたレベルなので詳細は README やご自身でお試し下さいませ。m(__)m


超メモ

SAWS とは

github.com

Supercharged AWS CLI とのこと。従来の AWS CLI を Supercharged したものらしい。どの辺りが Supercharged なのか...以下、ドキュメントより抜粋。

  • シンタックス、出力のハイライト
  • 各種コマンド、サブコマンド、オプションを自動補完(全てのコマンドはまだ網羅されていない模様)
  • S3 バケットと EC2 インスタンス ID とタグの自動補完
  • コマンド、サブコマンドのショートカット機能(エイリアス機能)
  • 外部コマンドの実行
  • コマンド、サブコマンドのヘルプ機能
  • その他、ツールバーWindows サポート

ドキュメント が充実しているので Blog 記事書く必要も無さそう。


インストール

試した環境。

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11
BuildVersion:   15A278b

インストールは pip 一発。

% pip install saws

既に AWS CLI はインストール済みの環境で Credential の情報も設定済みの環境触っていく。

コマンド補完が嬉しい

インストールしたら saws と入力して saws プロンプトが表示される。 (※初回時にインスタンス ID とタグ、S3 Bucket 一覧を取得している)

早速、コマンドの補完を試してみる。

f:id:inokara:20150923082827p:plain

s と入力しただけで上記のコマンドのリストが展開される。

f:id:inokara:20150923082839p:plain

さらに s3api のサブコマンドのリストも展開される。

f:id:inokara:20150923083211p:plain

さらにオプションの --ouput までも展開される。

f:id:inokara:20150923083401p:plain

オプションの引数までも。

f:id:inokara:20150923083708p:plain

コマンド実行 done。

リソースの補完

現状では EC2 のタグ、ID と S3 バケットの一覧を補完することが出来るが、これは saws コマンド起動時、F5 キーで Refresh を実行した際にそれぞれの情報を取得してローカルにキャッシュされるとのこと。

f:id:inokara:20150923092017p:plain

尚、~/.sawsrc にてリソース毎に情報の取得について制御することが出来るとのこと。

# AWS resources to refresh
refresh_instance_ids = True
refresh_instance_tags = True
refresh_bucket_names = True

キャッシュされている情報に関して、自分の環境では以下のパスに保存されていた。(boxen の名残が...)

/opt/boxen/homebrew/lib/python2.7/site-packages/saws/data/RESOURCES.txt

ファイルの中身は以下のようになっている。

$ cat /opt/boxen/homebrew/lib/python2.7/site-packages/saws/data/RESOURCES.txt
[instance ids]
i-aaaaaaaaa

(snip)

i-xxxxxxxxx
[instance tag keys]
xxxxxxxxxx

[instance tag values]
xxxxxxxxxx

[bucket names]
xxxxxxxxxx

サブコマンドのショートカット

サブコマンドのショートカット(エイリアス)を作成することが出来る。これは ~/.sawsrc ファイルの [shortcuts] セクションに記述することで利用出来る。

'shortcut command' = 'full command'

書式は bash の alias を設定する際と似ている(と思う)。

例えば、以下のように記述する。

ec2 ls --instance-ids = ec2 describe-instances --instance-ids

実行してみる。

f:id:inokara:20150923085210p:plain

以下のように describe-instances の結果が出力される。

f:id:inokara:20150923085354p:plain

おお、これは便利そう。

外部コマンドと一緒に利用する

以下のように外部コマンドの jq 等と一緒に利用することが出来るのも嬉しい。

f:id:inokara:20150923085950p:plain

また、saws プロンプト内で普通にコマンドを実行することも出来る。

f:id:inokara:20150923091338p:plain

コマンドヒストリ

saws で実行したコマンドのヒストリが ~/.saws-history に保存される。

$ cat ~/.saws-history

(snip)

# 2015-09-23 08:52:17.772064
+aws ec2 ls --instance-ids i-xxxxxxx

# 2015-09-23 08:55:52.876525
+aws ec2 ls --instance-ids i-xxxxxxx | jq .

# 2015-09-23 08:56:53.920203
+aws ec2 ls --instance-ids i-xxxxxxx| jq '.Reservations[].Instances[].InstanceId'

# 2015-09-23 08:57:13.976060
+aws ec2 ls --instance-ids i-xxxxxxx | jq '.Reservations[].Instances[] | {InstanceId, InstanceType, PrivateIpAddress}'

ということで

ざくっと SAWS を触ってみたが、強力なコマンド、オプションの補完機能、EC2 と S3 のみに限定されているがリソース補完、確かに Supercharged だと思った。前述の通りドキュメントもしっかりと書かれており導入のハードルはとても低いのですぐに使い始められるのも嬉しい。リソース補完については Pull Request により随時追加されるようなので今後に期待!

以上。