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

イベントドリブンな自動化ソリューションStackStorm。
皆さんご存知ですか？
知らない方は[StackStorm](https://www.google.co.jp/search?q=stackstorm&oq=stackstorm&aqs=chrome..69i57j69i60j69i61j69i60j69i59j69i65.2244j0j7&sourceid=chrome&ie=UTF-8)でググったら沢山出るので調べてみて下さい。

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

1. CronTimer
2. file_watch.line
3. webhook

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


#今回の環境
|       |       パラメータ |
|:----------------:|:-----------------:|
| OS             |              Centos7.4 |
|st2 |2.6.0　|
| 構成          |            [Testing](https://docs.stackstorm.com/install/system_requirements.html) |

StackStormのインストール方法は[公式ドキュメント](https://docs.stackstorm.com/install/index.html)を見るか、[こちら](https://qiita.com/KUROPON/items/eaa0090e2be3e7e7d412)を参照下さい。


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

##設定方法
**1) ST2のWebGUIを開きます。**
**2) ルールの作成画面に入ります。**

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

![shshh.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/f1fe09b7-a887-8b0e-1c19-aa7de10b6fbe.png)


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

![ahrehr.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/871d639d-3f25-8b55-6be2-819dd16871b5.png)


crontabと同じように設定します。
毎日11時と指定したいならばhourを11　毎時2分と指定したいならばminuteに2 合わせたい場合は両方記述します。
![ewtagaw.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/6bc17b0b-5f80-403f-4e35-2a7ebfd31427.png)


最後に条件に一致したときのアクションを指定してcreateボタンを押せば完了です。
今回はcore.noopを指定しています。これは何も処理しないというアクションです。
![agsgahag.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/c1a3f518-6419-223a-a0e7-f78387bf391e.png)


これで指定した時間になれば自動的に実行されます。
![gagahgrahg4gh2w.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/e7510c18-d9b3-8f5b-cccd-133db1e0806f.png)

#file_watch.line
linux.file_watch.line

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

##設定方法
**ルールの設定**
nameにlinux.file_watch.lineを指定
file_pathに/home/stanley/test.txt監視したいファイルをフルパスで指定
![gahgah.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/29045a61-b187-a816-c677-9ff26e41b9e5.png)

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

またアクションをこのように指定すれば、更新された内容を出力することも可能です。
![fgsegyehygs.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/f8db398f-4190-fa2d-0b3a-d6175308d04b.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](https://www.google.co.jp/search?q=webhook&oq=webhook&aqs=chrome..69i57j69i60l3j69i59l2.2776j0j7&sourceid=chrome&ie=UTF-8)の受け口を作ることが出来ます。

##設定方法
**1)ルールの設定**
nameにcore.st2.webhook
urlに任意の単語を指定
![agrahha.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/cf2b2075-4476-a7d2-fb2b-b06a0e11de96.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](https://qiita-image-store.s3.amazonaws.com/0/181554/6b465237-d29e-8b37-ac00-8e1befa7cc4a.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のトリガーをうまく使うことで、非常に簡単に受け口を実装できます。
ぜひとも試してみて下さい！

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