最近、TerraformやCloudFormationみたいに、JSONや独自DSLなどでかっこよくAWSを管理するツールがいろいろ出てきてます。
こういうツールは便利そうだなとは思うんですが、なんかふと、ユーザがホントに求めているものはコレなんだろうか?と思いました。
なんだかんだ言って、一番多く使われているサーバ管理ツールは『Excelサーバ一覧』なのではw?
じゃあExcelで同じようなことが出来ればそれが一番いいのでは?と。
というわけで、Excelは手元になくてキツイので、今回はGoogleスプレッドシートでAWSのサーバ構成管理をやってみました。
使い方
事前準備
サンプルのスプレッドシートをコピーする
『ツール』 -> 『スクリプトエディタ』 -> config.gsを編集
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYにAWSのアクセスキーを、
SPREADSHEET_URLにはコピーしたスプレッドシートのURLを貼り付けてください。
あとはテキトウに。
アクセスキーの権限は、EC2とCloudWatch系のが必要です。あとでもうちょい丁寧に書こう・・・
サーバ一覧の取得
コピーしたシートに戻って
『AWS』 -> 『AWS -> SS』を選択すると、
『ec2』シートにEC2の情報が読み込まれます。
※初回実行は権限の承認が必要です。
サーバ一覧からインスタンス起動
ec2のシートに新しい行を追加して(instanceId、stateは未記入)、『AWS』 -> 『SS -> AWS』を選択すると、
インスタンスを起動していいかの確認画面が出て、
シートが更新されます。
新しいインスタンスが起動されているので、Console等で確認してください。
ついでにサーバの監視
『AWS』 -> 『Monitoring』を選択すると、
稼働中のインスタンスごとに名前がインスタンスIDのシートが作成されて、直近24時間のCPU使用率の推移がグラフで確認出来ます。
閾値を超えているとアラートも飛んできます。
スクリプトエディタの『リソース』からこんな感じでトリガーを設定してやると、10分間隔で自動で監視してくれます。
コードについて
今回はデモ用の最低限の機能しか実装してませんが、main.gsにあるようにこんな感じでaws-sdk-jsっぽくAWSのAPIを叩けるようにしています。
// running状態のEC2インスタンスのinstanceIdを列挙する AWS.config({ accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY, region: AWS_REGION }); var ec2 = new AWS.EC2(); var params = { Filter: [ { Name: 'instance-state-name', Value: ['running'] } ] }; ec2.describeInstances(params, function (err, data) { // if(err) return; エラー処理は未実装です for(var i=0;i<data.reservationSet.length;i++){ var instance = data.reservationSet[i].instancesSet[0]; Logger.log(instance.instanceId); } });
そもそもaws-sdk-jsをGoogle Apps Scriptで動かせればよかったのですが、やりかたがわかりませんでした。
まとめ
なんかそれっぽいのが出来ましたw
いちおうコードはgithubにもあげときました。
ただ個人的にはrubyでコードかいてそこからスプレッドシートいじるほうがはるかに楽だし確実なので、たぶん仕事で使うことはないでしょう・・・
でも本家SDK使わずにAWSのAPI叩くの初めてでいろいろ勉強になったので、使いたいって人がいれば機能追加やバグ修正はするかもです。