初回は、StackStormを初めて知る人・使う人向けに、StackStormがどのようなもので、どのような特徴を持って、どのように使うかについて解説していきます。具体的にAWSと連携したイベントドリブンな自動化処理の設定の仕方や、細かなタスクを組み合わせた複雑なワークフローの設定方法を実際に動かしながら解説していきます。
今回の内容によって、StackStormの機能を一通り触ることで、おおよそこれがどんなものか分かってもらえると思います。
StackStormの特徴
ここではStackStormが、単に依存関係を解決しながら処理を実行するワークフローエンジンと何が違うかについて、機能面と運用面から見ていきます。
機能面
機能的なStackStormの特徴として、ワークフロー処理をイベントドリブンに行うことが挙げられます。
例えば、あなたが何がしかのサービスプロバイダーの運用担当者であったとして、サーバを構築してサービスインする作業を想像してみてください。
まずマシンリソースを調達し、調達したマシンに対してプロビジョニングを行うと思います。そしてDNSへの登録やLBへの追加作業を行い、場合によってはこれらに加えて、リソース管理システムへの登録や、タスク管理システムへの記録などの管理・報告作業も発生するかもしれません。
StackStormでは、こうした処理をタスク管理システムのチケットが発行されたことを検知して行ったり、パブリッククラウド管理下のリソースやソースコード管理システムのコンテンツの変更を検知してワークフロー処理を実行させたりすることが実現できます。
もちろん、こうしたイベントドリブンな運用の自動化はStackStormがなくとも実現できます。
例えば、Gitのローカルリポジトリに変更が加えられた際に、何らかの処理を実行したいといった場合にはGit Hooksを使えば実現できます。また、GitHubのリポジトリに対するPull RequestやIssueの作成などを検知したい場合には、GitHubが提供しているWebhookの仕組みが便利です。さらにAWSのLambdaやAmazon SNSを利用することでAWSの各種サービスのイベントを検知することもできます。
このように、それぞれのソフトウェア、サービスが提供する仕組みを個別に利用することで、それぞれのイベントを検知できます。
しかし、各サービスごとの連携を実現させるための仕組みを個別に実装するのは、骨が折れます。
これに対して、StackStormはさまざまなサービス間の連携を行うことを目的とした仕組み(IFTTT)の考え方をワークフローエンジンに取り入れました。
結果StackStormを使うユーザは、どういったサービスからどのようなイベントに対して、どのような処理を行うかというワークフローを記述してやるだけで、実際にイベントを検知する仕組みや、外部アプリケーションに対する処理を実装せずに済みます。
運用面
運用面での特徴として、StackStorm自体がScalableかつHigh Availableなアーキテクチャであるということが挙げられます。
以下はStackStormのアーキテクチャを表しています。内部アーキテクチャについてはこの後解説しますが、ここではどの点がScalableでHigh Availableなのかを簡単に解説します。
![StackStorm architecture diagram](http://cz-cdn.shoeisha.jp/static/images/article/9865/9865_architecture_diagram_s.png)
まず上段の"StackStorm Sensors"というラベルの書かれた四角に注目してください。StackStormではこれらのノードで外部サービスのイベントを検知し、複数台で協調して動作する仕組みによって、システムをHigh Availableにすることができます。
また、通知されたイベントを処理するノード(中段の"StackStorm Workers"と書かれた四角で囲まれたノード)群は状態を持たないためスケールさせることができます。これらの内部の詳しい仕組みについては、この後で詳しく解説します。