読者です 読者をやめる 読者になる 読者になる

GoogleスプレッドシートからAWSを操作する

最近、TerraformやCloudFormationみたいに、JSONや独自DSLなどでかっこよくAWSを管理するツールがいろいろ出てきてます。

こういうツールは便利そうだなとは思うんですが、なんかふと、ユーザがホントに求めているものはコレなんだろうかと思いました。
なんだかんだ言って、一番多く使われているサーバ管理ツールは『Excelサーバ一覧』なのではw?
じゃあExcelで同じようなことが出来ればそれが一番いいのでは?と。

というわけで、Excelは手元になくてキツイので、今回はGoogleスプレッドシートでAWSのサーバ構成管理をやってみました。

使い方

事前準備

サンプルのスプレッドシートをコピーする

『ツール』 -> 『スクリプトエディタ』 -> config.gsを編集

f:id:mikeda:20150908092822p:plain

AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYにAWSのアクセスキーを、 SPREADSHEET_URLにはコピーしたスプレッドシートのURLを貼り付けてください。
あとはテキトウに。

アクセスキーの権限は、EC2とCloudWatch系のが必要です。あとでもうちょい丁寧に書こう・・・

サーバ一覧の取得

コピーしたシートに戻って

『AWS』 -> 『AWS -> SS』を選択すると、

f:id:mikeda:20150908092857p:plain

『ec2』シートにEC2の情報が読み込まれます。

f:id:mikeda:20150908092943p:plain

※初回実行は権限の承認が必要です。

サーバ一覧からインスタンス起動

ec2のシートに新しい行を追加して(instanceId、stateは未記入)、『AWS』 -> 『SS -> AWS』を選択すると、

f:id:mikeda:20150908093005p:plain

インスタンスを起動していいかの確認画面が出て、

f:id:mikeda:20150908093036p:plain

シートが更新されます。

f:id:mikeda:20150908093112p:plain

新しいインスタンスが起動されているので、Console等で確認してください。

f:id:mikeda:20150908093200p:plain

ついでにサーバの監視

『AWS』 -> 『Monitoring』を選択すると、

f:id:mikeda:20150908093436p:plain

稼働中のインスタンスごとに名前がインスタンスIDのシートが作成されて、直近24時間のCPU使用率の推移がグラフで確認出来ます。
閾値を超えているとアラートも飛んできます。

f:id:mikeda:20150908093859p:plain

スクリプトエディタの『リソース』からこんな感じでトリガーを設定してやると、10分間隔で自動で監視してくれます。

f:id:mikeda:20150908093453p:plain

コードについて

今回はデモ用の最低限の機能しか実装してませんが、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叩くの初めてでいろいろ勉強になったので、使いたいって人がいれば機能追加やバグ修正はするかもです。