automation
EventListener
stackstorm

StackStormの基本的なトリガー3種の使い方(GUI利用)

イベントドリブンな自動化ソリューションStackStorm。
皆さんご存知ですか?
知らない方はStackStormでググったら沢山出るので調べてみて下さい。

ここではStackStormが標準で持つ以下の3つのトリガーについてご紹介します。

  1. CronTimer
  2. file_watch.line
  3. webhook

タイトルでも書いてあるように基本的にはGUI操作で作っていきます。

今回の環境

パラメータ
OS Centos7.4
st2 2.6.0 
構成 Testing

StackStormのインストール方法は公式ドキュメントを見るか、こちらを参照下さい。

CronTimer

core.st2.CronTimer

概要

名前の通りCron的な機能を持ったタイマーです。
今までcrontabを使っていた場合はこちらに移植することで、同等の処理が実現できるかと思います。

設定方法

1) ST2のWebGUIを開きます。
2) ルールの作成画面に入ります。

下記画像の①のルールタブをクリックして②の+ボタンをクリックでルール作成画面が出ます。

shshh.PNG

3)ルールの設定
「Create a rule」の下のnameは適当に packはdefaultと入力
「Trigger」の下のnameにcore.st2.CronTimerと入力すると下に項目が大量に出てきます

ahrehr.PNG

crontabと同じように設定します。
毎日11時と指定したいならばhourを11 毎時2分と指定したいならばminuteに2 合わせたい場合は両方記述します。
ewtagaw.PNG

最後に条件に一致したときのアクションを指定してcreateボタンを押せば完了です。
今回はcore.noopを指定しています。これは何も処理しないというアクションです。
agsgahag.PNG

これで指定した時間になれば自動的に実行されます。
gagahgrahg4gh2w.PNG

file_watch.line

linux.file_watch.line

概要

こちらはテキストファイルを監視し、ファイルに更新が入ったタイミングでアクションを実行するトリガーです。

設定方法

ルールの設定
nameにlinux.file_watch.lineを指定
file_pathに/home/stanley/test.txt監視したいファイルをフルパスで指定
gahgah.PNG

後はecho test >> hogehoge.txt 等でファイルを更新すれば動きます。

またアクションをこのように指定すれば、更新された内容を出力することも可能です。
fgsegyehygs.PNG

注意点

パーミッションの指定
このトリガーはファイルのパーミッションが正しく設定されていなければ読み取りが出来ません。
/var下のような誰でも読み取れる場所なら問題ないですが、そうでない場合は自分でパーミッションを指定する必要があります。
基本的には644のように開いていれば問題ありません。詳しく調べきれていないので、また詳細が分かったら追記します。

linux.file_watch.lineを設定して動かない場合は
ST2のターミナルで下記コマンドを実行した上で、
$ tail -f /var/log/st2/st2sensorcontainer.log
別ターミナルで下記コマンドを実行してみて下さい
$ st2ctl reload --register-sensors

下記のような記述が出たらパーミッションが原因です
add_watch: cannot watch /home/stanley WD=-1, Errno=Permission denied (EACCES)

ファイル更新検知の仕様
ファイルの更新は更新前との行の差分で見ています。
つまり100行のテキストファイル(test.txt)に対して下記コマンドを実行した場合
$ echo test > test.txt
test.txtの中身が消えて1行更新されますが、トリガーは動きません。
このtest.txtの101行目が更新されたタイミングで初めて動きます。
もし消したい場合は、一度test.txtをrmした後に新しく作成する必要があります。

webhook

core.st2.webhook

概要

webhookの受け口を作ることが出来ます。

設定方法

1)ルールの設定
nameにcore.st2.webhook
urlに任意の単語を指定
agrahha.PNG

これで受け口は完成です。

2)受け口に飛ばす
teraterm等でST2のサーバにログインします。
ターミナルにて下記コマンドを実行して下さい
$ st2 auth -t -p password st2admin
※password は GUIログインで利用するpasswordを指定して下さい
※st2admin は GUIログインで利用するuserIDを指定して下さい

すると文字の羅列が出力されるかと思います
(例)
4f168e83c7a14e98ad37ca4a64595a2c
これがwebhookを飛ばす際のkeyになります。
下記コマンドを書き換えて実行します。
$ curl -k https://localhost/api/v1/webhooks/test -d '{ "key":"value", "message":"test" }' -H 'Content-Type: application/json' -H 'X-Auth-Token: 4f168e83c7a14e98ad37ca4a64595a2c'
https://localhost/api/v1/webhooks/test の最後のtestはトリガー設定時のurlで指定したものに変更して下さい。
※X-Auth-Token:の後ろは先程出力されたkeyに置き換えてください。

エラーが出ずに送信できればアクションが動きます。

3)受け取った内容を利用する
受け取ったjson形式のデータは下記のように指定すればそれぞれ取り出せます。
hsdheheh.PNG

この記述ですと先程のjsonデータのmessageの中身のtestが出力されます。
-d '{ "key":"value", "message":"test" }'

keyの永続化

先程のX-Auth-Token:は期限付きですので、一定の期間をすぎると利用できなくなります。
永続的にkeyを利用したい場合は下記コマンドを利用してください
$ sudo st2 apikey create
これのkeyの部分を利用してください。
| key | ZTAwMzlmNWQ1YmNjYWJjMGU0NTA3Yzk4M2E1NjViNzRlZWExYWNiMzg3N2VyMGVmNzg5ZjA0ZDQ0MjVlODv4NA |

またこちらのkeyを使う場合はX-Auth-TokenではなくSt2-Api-Keyを指定してください。

まとめ

ST2のトリガーをうまく使うことで、非常に簡単に受け口を実装できます。
ぜひとも試してみて下さい!

分からないことありましたらコメントに書いて頂ければ、時間がある時に回答しておきます。