内部アーキテクチャ
ここでは、実際にStackStormを使ってみようと思っている方向けに、StackStormがどのような仕組みでどのように動作するかについて解説します。
以下は、StackStormがイベントを処理する一連の処理の流れを表した図になります。
StackStormのIFTTT×Workflow処理の内部はSensor、TriggerそしてAction(Workflow)の3つの要素から構成されています。そして、これら3つの要素を機能ごとにまとめたソフトウェアモジュールのことをpackと呼びます。StackStormでは動的にpackを追加・削除できる拡張性の高い機構になっています。
ここではpackの内部コンポーネントがどのような役割でどのように動作するかについて解説します。
まず、Sensorは外部で発生したイベントを監視するプロセスで、外部のイベントを検知した際には、紐付けられたTriggerにイベントを通知(以降では"Triggerを引く"と表現)します。
Actionは、HTTPリクエストを送るやメールを送るといった特定の目的に特化した処理を行うプロセスでTriggerに紐付けられます。そしてTriggerはSensorから通知された外部イベントをActionが扱いやすい形に正規化します。Triggerに紐付くActionが何も設定されていない状態では、SensorがTriggerを引いても何も起こりません。
ここで各要素の関連について、もう少し詳しく解説します。
SensorとTriggerは静的に紐付けられている(図の青枠)のに対して、TriggerとActionはユーザによって動的に紐付けられます(図の緑枠)。このTriggerとActionを紐付ける仕組みのことをRuleと呼びます。
Ruleには2つの役割があります。1つは上述したTriggerとAction/Workflowを紐づける役割で、もう一つがTriggerパラメータとActionパラメータを変換する役割です。
StackStormではTriggerとActionはそれぞれ独立しており、Ruleによって任意にTriggerとActionを組み合わせることができます。その際、Triggerから渡されるどのパラメータを抽出し、どういったパラメータをActionに渡すかの設定をRuleに記述します。
最後にActionと併記されているWorkflowについて解説します。
Workflowは複数のActionを記述できるActionになります。Actionと同じように、Ruleに紐付けられたTriggerが引かれた際に実行されます。ActionとWorkflowの違いは、Actionが特定の目的に特化した処理を記述したプログラムコードであるのに対して、Workflowは実行する1つ以上のActionと、それらの依存関係および各Actionの実行結果に応じた処理の流れを記述した定義になります。
ユーザはプログラムコードを記述せずに、Actionの実行順序や処理の流れの定義したWorkflowを記述することで、複数のアプリケーションサービスを跨いだ複雑な処理を実現できます。またTriggerと紐付けたRuleを記述することで、それらを自動化させることができます。
StackStormのインストール
公式ドキュメントのInstallationに沿って、一般にオールインワン(All-in-one)と呼ばれるStackStormの全サービス、および関連するすべてのミドルウェアを1つのノードにインストールする方法を紹介します。
ノードはVagrantで用意します。Vagrant自体のインストール方法については、過去の記事で詳しく解説されているので、そちらをご参照ください。
まずは以下のコマンドでVagrantfileを作成します。ここでは公式ドキュメントのSystem Requirementsに沿ってUbuntu 14.04のVMを作成します。
$ vagrant init ubuntu/trusty64
ノードのメモリサイズが小さいとリソース不足でビルド処理が失敗することがあるため、以下のとおりVagrantfileを編集し、仮想CPUコア数と割り当てるメモリサイズを変更します。また、後述する冗長構成なStackStorm環境の構築のため、仮想NICの設定追加も併せて行います。
--- Vagrantfile.orig 2016-11-16 19:06:55.000000000 +0900 +++ Vagrantfile 2016-11-28 14:46:04.000000000 +0900 @@ -27,6 +27,8 @@ # Create a private network, which allows host-only access to the machine # using a specific IP. # config.vm.network "private_network", ip: "192.168.33.10" + config.vm.hostname = "st2-node" + config.vm.network "private_network", ip: "192.168.0.100" # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on @@ -50,6 +52,10 @@ # # Customize the amount of memory on the VM: # vb.memory = "1024" # end + config.vm.provider "virtualbox" do |vb| + vb.cpus = 2 + vb.memory = "2048" + end # # View the documentation for the provider you are using for more # information on available options.
編集後、以下のコマンドを実行しVMを構築します。
$ vagrant up
続いて以下のコマンドでVMにログインします。また以降の操作は、ログインしたVM内で実行します。
$ vagrant ssh
最後にStackStormのインストールコマンドを実行します。引数で渡している--user
と--password
は、初期アカウントのユーザ名とパスワードになり、任意の値を設定できます。
$ curl -sSL https://stackstorm.com/packages/install.sh | bash -s -- --user=st2admin --password=password
以下の出力が得られれば、インストールは成功です。