aws-shellによるaws-cliの楽々実行
こんにちは、藤本です。
aws-cli
はAWSのAPIをコマンドラインで実行することができ、大変多くの操作を行うことができます。その反面、多機能過ぎてサブコマンド名やオプション名、オプションの使い方を覚えるのが大変です。シェルのCompletionを利用することでサブコマンド名、オプション名の入力補完である程度簡略化できますが、それでも複数コンソール立ち上げてhelp
と行ったり来たり、マネジメントコンソールと行ったり来たりしています。そんなあなた(私)へaws-shell
の利用をオススメします。
aws-shell
aws-shellはGitHubのawslabsで提供されているaws-cli
の効率化ツールです。昨年の9月頃に公開されています。aws-shell
はまだ開発者向けのプレビュー版です。
aws-shell
は以下のような機能を提供しています。(2016/07/24時点)
- サジェスト/オートコンプリート
- サブコマンド
- オプション
- オプションに応じた値
- AWSリソース
- ファジー検索
- ヘルプ表示
- シェルコマンド
- プロファイルサポート
- 履歴管理
それでは各種機能を実際に体験しながらご紹介します。
インストール
aws-shellはPython実装です。PyPI、もしくはHomebrewで配布しています。今回はPyPIからインストールしました。
PyPI
# pip install aws-shell Collecting aws-shell Collecting boto3<2.0.0,>=1.2.1 (from aws-shell) Using cached boto3-1.3.1-py2.py3-none-any.whl Collecting configobj<6.0.0,>=5.0.6 (from aws-shell) Collecting awscli<2.0.0,>=1.10.30 (from aws-shell) Downloading awscli-1.10.49-py2.py3-none-any.whl (970kB) 100% |████████████████████████████████| 972kB 184kB/s Collecting Pygments<3.0.0,>=2.1.3 (from aws-shell) Using cached Pygments-2.1.3-py2.py3-none-any.whl Collecting prompt-toolkit<1.1.0,>=1.0.0 (from aws-shell) Using cached prompt_toolkit-1.0.3-py2-none-any.whl Collecting botocore<1.5.0,>=1.4.1 (from boto3<2.0.0,>=1.2.1->aws-shell) Using cached botocore-1.4.39-py2.py3-none-any.whl Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from boto3<2.0.0,>=1.2.1->aws-shell) Using cached futures-3.0.5-py2-none-any.whl Collecting jmespath<1.0.0,>=0.7.1 (from boto3<2.0.0,>=1.2.1->aws-shell) Using cached jmespath-0.9.0-py2.py3-none-any.whl Collecting six (from configobj<6.0.0,>=5.0.6->aws-shell) Using cached six-1.10.0-py2.py3-none-any.whl Collecting s3transfer==0.0.1 (from awscli<2.0.0,>=1.10.30->aws-shell) Using cached s3transfer-0.0.1-py2.py3-none-any.whl Collecting colorama<=0.3.7,>=0.2.5 (from awscli<2.0.0,>=1.10.30->aws-shell) Using cached colorama-0.3.7-py2.py3-none-any.whl Collecting rsa<=3.5.0,>=3.1.2 (from awscli<2.0.0,>=1.10.30->aws-shell) Using cached rsa-3.4.2-py2.py3-none-any.whl Collecting docutils>=0.10 (from awscli<2.0.0,>=1.10.30->aws-shell) Collecting wcwidth (from prompt-toolkit<1.1.0,>=1.0.0->aws-shell) Using cached wcwidth-0.1.7-py2.py3-none-any.whl Collecting python-dateutil<3.0.0,>=2.1 (from botocore<1.5.0,>=1.4.1->boto3<2.0.0,>=1.2.1->aws-shell) Using cached python_dateutil-2.5.3-py2.py3-none-any.whl Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli<2.0.0,>=1.10.30->aws-shell) Using cached pyasn1-0.1.9-py2.py3-none-any.whl Installing collected packages: six, python-dateutil, jmespath, docutils, botocore, futures, boto3, configobj, s3transfer, colorama, pyasn1, rsa, awscli, Pygments, wcwidth, prompt-toolkit, aws-shell Successfully installed Pygments-2.1.3 aws-shell-0.1.1 awscli-1.10.49 boto3-1.3.1 botocore-1.4.39 colorama-0.3.7 configobj-5.0.6 docutils-0.12 futures-3.0.5 jmespath-0.9.0 prompt-toolkit-1.0.3 pyasn1-0.1.9 python-dateutil-2.5.3 rsa-3.4.2 s3transfer-0.0.1 six-1.10.0 wcwidth-0.1.7
Homebrew
# brew install aws-shell ==> Downloading https://homebrew.bintray.com/bottles/aws-shell-0.1.0.yosemite.bottle.tar.gz Already downloaded: /Users/fujimoto.shinji/Library/Caches/Homebrew/aws-shell-0.1.0.yosemite.bottle.tar.gz ==> Pouring aws-shell-0.1.0.yosemite.bottle.tar.gz ? /usr/local/Cellar/aws-shell/0.1.0: 2,039 files, 22M
起動
aws-shellを起動します。起動はaws-shellコマンドを実行するだけです。初回起動時はキャッシュ生成のため少々時間がかかります。(といっても10秒弱)
# aws-shell --help usage: aws-shell [-h] [-p PROFILE] optional arguments: -h, --help show this help message and exit -p PROFILE, --profile PROFILE The profile name to use when starting the AWS Shell. # aws-shell First run, creating autocomplete index... Creating doc index in the background. It will be a few minutes before all documentation is available. aws>
機能確認
それでは上で紹介した機能を画像付きでご紹介します。
サジェスト/オートコンプリート
サブコマンド
リソースのサブコマンド、リソースに対する操作のサブコマンドの候補が表示され、入力補完することができます。[Tab]キーや[↑↓]キーなどで候補から選択することが可能です。シェルの候補選択とは異なり、Enterキーを押下すると実行となるのでご注意ください。
e
を入力すると、ec2
、elb
など前方一致する候補が表示されます。
同様にec2
の後に、describe
を入力するとdescribe-instances
、describe-securitygroups
など候補が表示されます。
オプション
オプションもサブコマンドに応じた候補が表示され、入力補完することができます。
オプションに応じた値
オプションに指定する値の形式が決まっていれば、フォーマットの候補が表示され、入力補完することができます。例えば、describe-instances
の--filters
などが対象となります。
AWSリソース
AWSリソースのID(インスタンスIDやセキュリティグループID)やDynamoDBのテーブル名、S3のバケット名などの候補が表示され、入力補完することができます。バックグラウンドでboto3
を実行、AWS APIをコールし、リソースの一覧を取得しています。例えば、describe-instances
の--instance-ids
にて、インスタンスIDを取得しています。
ファジー検索
ファジー検索はほぼユニグラムの検索となります。ファジー検索はターミナル下部にあるファンクションキーにてON/OFFを切り替えることができます。今までの操作はファジー検索をOFFとした場合の結果です。ファジー検索をONすると以下のようにサジェスト表示される項目が増えます。
ヘルプ表示
ヘルプ表示もターミナル下部にあるファンクションキーにてON/OFFを切り替えることができます。
入力済みのサブコマンドやオプションはターミナル下部にhelp
コマンドを実行して表示されるメッセージが表示され、候補の下に簡略したヘルプメッセージが表示されます。
シェルコマンド
通常コマンド実行
単純なシェルコマンドは!
のあとにコマンドを入力することで実行できます。vi
エディタのような感じです。
パイプによるコマンド実行
パイプによってaws-cli
の標準出力を標準入力としてコマンドを繋げることができます。なので、jq
を利用することができるのは嬉しいですね。
プロファイルサポート
$HOME/.aws/credentials
に定義したプロファイルを利用することができます。プロファイルを利用する場合、aws-shell
起動時のオプションに--profile
を利用するか、aws-shell
内で.profile
コマンドで切り替え、表示が可能です。
# aws-shell --profile other aws> .profile Current shell profile: other aws> .profile default Current shell profile changed to: default aws> .profile Current shell profile: default
履歴管理
aws-shell
内で実行したコマンドはシェルとは異なる場所に別途管理されます。$HOME/.aws/shell/hisotry
で管理されます。コマンドの実行時間と実行したコマンドが記録されます。AWSの操作だけを別途管理できるのは嬉しいですね。
aws> !cat ~/.aws/shell/history # 2016-07-24 12:17:46.505892 +ec2 describe-instances # 2016-07-24 12:19:01.224635 +.profile default # 2016-07-24 12:19:04.283101 +.profile # 2016-07-24 12:21:30.749357 +!cat ~/.aws/shell/history
まとめ
いかがでしたでしょうか?
今のところ2,3ヶ月利用していますが、便利なことしかないので使わない理由が見当たらないです。