yag's blog

Twitter以上Zenn以下なことを書く場所

コマンドラインからEC2のインスタンスの状態を確認できるec2instを作りました

概要

最近は機械学習の計算やJupyter Notebookなどを、ローカルやVPSではなくAWSのEC2で動かしたりしているのですが、そうなると気になるのがインスタンスの状態だったりパブリックIPアドレスだったりするわけです。普通ならブラウザからAWSのコンソールを開けば万事解決なのですが、自分の場合はブラウザのタブを開きすぎててどこに行ったか分からなかったり、あとはAWSコンソールのトップページからEC2のインスタンス一覧を見るには2回ほど画面遷移が必要だったりと、何かと不便に感じることが多くなってきました。

そこで、ターミナルのコマンドラインからEC2のインスタンス一覧を取得して、いい感じにリストアップしてくれるスクリプトを作りました。といっても、そもそもAWSaws-cliというコマンドラインインターフェイスを作成していたり、boto3というPythonSDKを作っていたりするので、今回作成したのはいわばその機能の一部を使って結果を見やすくするという、ラッパー程度のものです。n番煎じ、もしくは車輪の再発明になってしまったとは思うのですが、まあ勉強になったので良いでしょう……。

インストール

PyPIから取得します。

$ pip install ec2inst

基本的に上記の方法でインストールして問題ありませんが、以下のようにgithubから直接pipでインストールすることもできます。

$ pip install git+https://github.com/yagays/ec2inst.git  

準備

ec2instはaws-cliもしくはboto3の設定ファイルを読み込んで、その中に登録されているaws_access_key_idaws_secret_access_keyを利用します。そのため、まず始めにAWSのウェブコンソールからアクセスキーIDと秘密アクセスキーを取得し、aws-cliで登録しておきましょう。ここでの設定は~/.aws/configおよび~/.aws/credentialsに登録されます。なお、もし複数のプロファイルを使い分ける場合にはaws configure --profile yag_aysのようにプロファイルに名前を付けておくと後々切り分けが楽になります。

$ aws configure
AWS Access Key ID [None]: XXX...
AWS Secret Access Key [None]: YYY...
Default region name [None]: ap-northeast-1
Default output format [None]: json

使い方

ec2instコマンドで以下のような結果が返ってきます。

$ ec2inst
instance_id  instance_type  image_id      instance_name    public_ip_address  private_ip_address  instance_state  
-----------  -------------  ------------  ---------------  -----------------  ------------------  --------------  
i-00000000   t2.medium      ami-00000000  instance_name_1  xxx.xxx.xxx.xxx    172.20.xxx.xxx      running         
i-11111111   g2.2xlarge     ami-11111111  gpu_instance     -                  172.20.yyy.yyy      stopped         
i-22222222   c3.xlarge      ami-22222222  -                zzz.zzz.zzz.zzz    172.20.zzz.zzz      running         

ここでは色が付いていないですが、実際にはインスタンスの状態に色が付きます。

f:id:yag_ays:20161010005309p:plain

あとは-p/--profileコマンドでaws-cli/boto3のプロファイルを指定したり、-c/--columnsで表示させるカラムを設定することができます。詳しくはec2inst -hを参考下さい。

$ ec2inst -p yag_ays -c instance_type,instance_name,instance_state 
instance_type  instance_name    instance_state  
-------------  ---------------  --------------  
t2.medium      instance_name_1  running         
g2.2xlarge     gpu_instance     stopped         
c3.xlarge      -                running         

まとめ

EC2の利用は計画的に😇

参考