概要
StackStormはオープンソースのイベント駆動型プラットフォームです。
一連のイベントをワークフロー化することで自動化を促進することができます。
システム運用の現場で使われているですが、今回はAPIで連携をしたかったので動かすサンプルは雨が降りそうになると、その情報をSlackに通知することを目的とします。
構築
StackStormは構築は大変です、以下に構築方法がありますがdockerにして下さったものがあるので試すのであればこちらがいいかと思います。
Installation — StackStorm 3.3.0 documentation
dockerでデプロイ
git clone git@github.com:stackstorm/st2-docker
cd st2-docker
make env
パスワードを決める
vi conf/stackstorm.env
docker-compose up -d
docker-compose exec stackstorm bash
パスワードを確認する
cat conf/stackstorm.env
ST2_USER=st2admin ST2_PASSWORD=*****
StackStorm開発
ますStackStormには大きく3つの役割があります。
● Action : 実際に何を実行するのか、今回は主にここを編集します。
● Trigger : アクションを実施するための条件を指定します、例えば時間であったりwebhookであったりを指定します。
● Rule : ActionとTriggerを組み合わせたもので最終的にこれを動かすことで自動化を実現します。
Actionの作成
まずymlでどんなActionなのかを定義を行います、今回はURIは自由に指定をできるようにしました。
vi /opt/stackstorm/packs/default/actions/api_request.yml
--- name: "api_request" runner_type: "python-script" entry_point: "api_request.py" description: "api_request" enabled: true parameters: uri: type: "string" description: "api request uri" required: true position: 0
次にいよいよ実際のどんなアクションをするかコードを書いていきます。
vi /opt/stackstorm/packs/default/actions/api_request.py
# -*- coding: utf-8 -*- from st2common.runners.base_action import Action import json import requests class Request(Action): def run(self, uri): #wether url = uri res = requests.get(url) res_data = res.json() wether = res_data["weather"] [0] ["main"] if wether == "rain": slack_uri = "<WEB_HOOK_URI>" requests.post(slack_uri, data = json.dumps({ 'text': u'今日の天気は' + wether + u'です', 'username': u'st2-Wether-bot', 'icon_emoji': u':smile_cat:', 'link_names': 1, })) return res_data
Actionを作成/削除
このコマンドでdefault
というpackの中に自分で作った"Action"を作ることができました。
st2 action create /opt/stackstorm/packs/default/actions/notify_weather.yml
※ちなみにActionを削除はこれです
st2 action delete default.notify_weather
Triger(st2.CronTimer)
指定する数値の例は以下になります。
●月曜日から金曜日
・day_of_week : mon-fri
●毎日10:00
・hour : 10
・minute : 00
●日本時間
・timezone : Asia/Tokyo
Ruleとして紐付け
ここまで作ればあとはGUIで簡単に設定することができます
1. Rule タブを選び + を選択
2. Name は今回のRule名とPackを決める
3. TRIGGER にて "core" からcron timer
を選択し期間を選択する
4. ACTIONにて"REF"に今回作成した"default.api_request"を選択し、"uri"に天気を取得する"openwethermap"のuriを記入する
※ openwethermap に関してはこちらを参照
yunabe.hatenablog.com
5. save したあと enable をすることでcronしたタイミングで動き始めます
6. History タブで動作が確認できれば成功です