イベントドリブンな自動化ソリューションStackStorm。
皆さんご存知ですか?
知らない方はStackStormでググったら沢山出るので調べてみて下さい。
ここではStackStormが標準で持つ以下の3つのトリガーについてご紹介します。
- CronTimer
- file_watch.line
- webhook
タイトルでも書いてあるように基本的にはGUI操作で作っていきます。
今回の環境
パラメータ | |
---|---|
OS | Centos7.4 |
st2 | 2.6.0 |
構成 | Testing |
StackStormのインストール方法は公式ドキュメントを見るか、こちらを参照下さい。
CronTimer
core.st2.CronTimer
概要
名前の通りCron的な機能を持ったタイマーです。
今までcrontabを使っていた場合はこちらに移植することで、同等の処理が実現できるかと思います。
設定方法
1) ST2のWebGUIを開きます。
2) ルールの作成画面に入ります。
下記画像の①のルールタブをクリックして②の+ボタンをクリックでルール作成画面が出ます。
3)ルールの設定
「Create a rule」の下のnameは適当に packはdefaultと入力
「Trigger」の下のnameにcore.st2.CronTimerと入力すると下に項目が大量に出てきます
crontabと同じように設定します。
毎日11時と指定したいならばhourを11 毎時2分と指定したいならばminuteに2 合わせたい場合は両方記述します。
最後に条件に一致したときのアクションを指定してcreateボタンを押せば完了です。
今回はcore.noopを指定しています。これは何も処理しないというアクションです。
file_watch.line
linux.file_watch.line
概要
こちらはテキストファイルを監視し、ファイルに更新が入ったタイミングでアクションを実行するトリガーです。
設定方法
ルールの設定
nameにlinux.file_watch.lineを指定
file_pathに/home/stanley/test.txt監視したいファイルをフルパスで指定
後はecho test >> hogehoge.txt 等でファイルを更新すれば動きます。
またアクションをこのように指定すれば、更新された内容を出力することも可能です。
注意点
パーミッションの指定
このトリガーはファイルのパーミッションが正しく設定されていなければ読み取りが出来ません。
/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に任意の単語を指定
これで受け口は完成です。
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形式のデータは下記のように指定すればそれぞれ取り出せます。
この記述ですと先程の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のトリガーをうまく使うことで、非常に簡単に受け口を実装できます。
ぜひとも試してみて下さい!
分からないことありましたらコメントに書いて頂ければ、時間がある時に回答しておきます。