はじめに
皆様、普段AWSはどのようにして操作していますか?
恐らく最も一般的なものはWebGUI(マネージメントコンソール)ではないかと思います。
グラフィカルにほぼ全ての操作を行う事ができる中々優秀なツールではありますが、画面が重かったり配置がゴチャゴチャしており色々不満が出てきます。
そこで次に思うのはインフラらしくCLIで操作できないかという発想です。
AWSでは公式からツールが出ており、helpドキュメントやリファレンスも充実しています。
というわけでとりあえずVMの一覧でも表示すべく
aws ec2 describe-instances
なんて叩いてみたところ
/(^q^)\ わけわかめ
- マネージメントコンソールへのログインは面倒
- 長いコマンドを覚えられず毎回ググってしまう
- 直感的、簡単に操作したい
- 簡単なパイプ渡しで絞り込みや自動化を行いたい
こんな課題を解決すべく他にCLIのツールが無いか探してみましたがどうやら存在しないようでしたので(2016/11/30現在)「無いものは作ろう!」というわけでツールを作り Cloud Query と名前を付けOSSとしてリリースしました。
コマンドとしては cq となります。
ソースコードはGitHub: cqです。
画面イメージ
インストール
公式ドキュメントに則ってAPIキーを発行し、端末に設定して下さい。
設定は環境変数を使うのが一番簡単です。
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxx # アクセスキーID
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxx # シークレットアクセスキー
set AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxx # アクセスキーID
set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxx # シークレットアクセスキー
設定が終わったらGitHub: releaseからOSごとのバイナリーをダウンロードして下さい。
基本的なコマンドと実行イメージはGitHub: readmeに書いてあります。
TIPS
起動中のインスタンスのみを表示する
grepを使って絞ります。
[root@localhost ~]# cq vm list | grep "running"
NAME-TAG INSTANCE-ID STATE GLOBAL LOCAL AZ PROVIDER
testserver01 i-895ba307 running NULL 172.20.1.68 ap-northeast-1c AWS
testserver02 i-d4a55d4a running NULL 172.20.0.220 ap-northeast-1a AWS
停止中のインスタンスを全てまとめて起動する
grepで停止中のインスタンス一覧を表示し、awkのスペース区切りで2番目(インスタンスID)の一覧を取り出し、それを起動コマンドに渡してあげます。
[root@localhost ~]# cq vm start `cq vm list | grep "stopped" | awk '{ print $2 }'`
Success! i-8ba307f6 stopped ===> pending
Success! i-f68dbdb9 stopped ===> pending
Success! i-ddf6a857 stopped ===> pending
Success! i-e5b4496a stopped ===> pending
一覧をCSVで出力する
cq vm list -d オプション(--delimiterも可)を使うと好きな区切り文字で出力することができます。
例えば以下のようにするとカンマ区切り出力になります。
[root@localhost ~]# cq vm list -d ,
NAME-TAG,INSTANCE-ID,STATE,GLOBAL,LOCAL,AZ,PROVIDER
testserver01,i-895ba307,stopped,NULL,172.20.1.68,ap-northeast-1c,AWS
testserver02,i-d5bdf64a,stopped,NULL,172.20.0.220,ap-northeast-1a,AWS
testserver03,i-e485796a,stopped,NULL,172.20.5.6,us-east-1d,AWS
これをファイルにリダイレクトしてあげればCSVファイルになります。
[root@localhost ~]# cq vm list -d , > testfile.csv
カンマ以外でも文字列なら何でも(1文字じゃなくても)区切りにできるため各自お好きなもので区切って下さい。
ちなみに、NameTagに区切り文字と同じものが含まれていた場合はダブルクォーテーションで囲うため、うっかり区切りが増えちゃうといった事故は起きません。
cq vm easyup が勝手に作ったセキュリティーグループをまとめて削除する
ちょこまかVMを作っているとゴミが大量に残るかと思います。
そういった場合は先のVM一斉起動と同様にしてまとめて削除できます。
但しいずれかのVMにアタッチされているグループは削除できません。
デフォルトでは削除確認が出ますので --force もしくは -f オプションで確認無しの削除にして下さい。
[root@localhost ~]# cq acl destroy --force `cq acl list | grep "cq_temporary_sg" | awk '{ print $3}'`
Success!
Success!
Success!
Success!
今後やりたいこと
- 他クラウドに対応し、統一感ある操作性の実現
- 既存のマネージメントコンソール、CLIには無い機能の実装
- cronと連携し複雑な作り込み無しにスナップショットを世代管理
- コマンド一発でRDSのバックアップ、リストア (RDSは停止ができず開発環境でもお金が嵩み易い)
- その他構想中