Serverlessフレームワークを使って「さくらのクラウド」上のインスタンスをSlackから操作

少し前の記事で紹介しましたが、先日CoderDojo向けにGitHub+Travis CIを使ってPaaSを作りました。

さくらのクラウドとGitHub+Travis CIを使ってCoderDojo向けのプルリクドリブンのPaaSサービスを3日で作った!

その後、いろいろ運用中に気づいたこともあり、Slack でさくらのクラウド上のインスタンスの操作もできるようにしました。

ソースはGitHubにあげておきました。

https://github.com/miya0001/slack-sacloud

Slackでインスタンスの操作

これを導入すると、Slackで以下のようにスラッシュコマンドを実行することでインスタンスの操作ができるようになります。

/sacloud list # インスタンスのリストを取得
/sacloud up <id> # インスタンスの起動
/sacloud halt <id> # インスタンスの停止
/sacloud destroy <id> # インスタンスの削除

実際のスクリーンショットは以下のような感じです。このスクショではサーバーを一度停止して、そのあと起動するという操作をしています。

インスタンスの削除ができてしまうので、このスラッシュコマンドが実行できるチャンネルは、管理者たちだけがいる秘密のチャンネルのみで実行することが可能なようになっており、他のチャンネルで実行すると以下のようにエラーが出ます。

また適切なチャンネルでコマンドを実行した後のメッセージが、そこにいるみんなに表示されるようになっています。もしスパム行為があった場合はその人をそのチャンネルから追い出せばいいやという想定なんですが、まあ実際にはそういうことはないんじゃないかなと思っています。

わりと強気な運用といえますが、コントロールパネルでの操作を残してしまうと、特定の誰かに負担を集中させるか、コントロールパネルのアカウントを共有するという、とても厳しい二者択一の選択を迫られます。

それよりはマシかなと考えているのと、全部オープンソースにしていますので何かあれば逐一改善すればいいやという感じです。

仕組み

この仕組の開発には Serverless フレームを使用しています。

Serverlessフレームワーク便利ですね。さらに以下のボイラープレートを使用したので、さくらのクラウドを操作する簡単なモジュールを作った以外に自分でやることはほとんどありませんでした。

https://github.com/johnagan/serverless-slack-app

作業手順も上のプロジェクトとほぼ同じです。

システムの実際の構成は、AWS の API Gateway + Lambda + DynamoDB という典型的なサーバーレスの構成です。それほど頻繁に使われるものではないのでコストもほぼ無料で使えますし、サーバーのメンテナンスが不要なのはありがたいですね。

あとユニットテストには、Mocha + Chai というフレームワークを使用しております。

細かい導入方法は、リポジトリの README に書いてありますのでぜひそちらをみてください。

https://github.com/miya0001/slack-sacloud

では!