StackStormでSlackによるChatOpsの設定をする

先日からStackStormをちょこちょこいじっているのだが、今回はChatOpsの設定をしてチャットの入力内容をトリガーに処理を行わせるようにしてみる。 Chatに使うのはSlack。Botを利用する必要があるので、HubotのAPIキーの払い出しなどをすでに行っているものとする。

1.st2chatopsの設定

まず、以下のコマンドを実行しChatOpsのサービスを有効にする。

export ST2_AUTH_TOKEN=$(st2 auth st2admin -p パスワード -t)
st2 rule get chatops.notify || st2 rule create /opt/stackstorm/packs/chatops/rules/notify_hubot.yaml

次に、以下のコマンドでStackStorm側に「st2chatops」プラグインを導入する。

curl -sL https://rpm.nodesource.com/setup_4.x | sudo -E bash -
sudo yum install -y st2chatops

設定ファイル「/opt/stackstorm/chatops/st2chatops.env」を編集してやる。
今回の場合、編集する箇所は以下の項目だろう。

  • HUBOT_NAME(Hubot名を付与する)
  • ST2_API(443ポートあてにする)
  • ST2_AUTH_URL(443ポートあてにする)
  • ST2_AUTH_PASSWORD(パスワードを書き換える)
  • HUBOT_ADAPTER(コメントアウトを外す)
  • HUBOT_SLACK_TOKEN(HUBOTのTOKENを書き換える)

書き換え後、st2chatopsのサービスを起動する。

sudo systemctl start st2chatops
sudo systemctl enable st2chatops
sudo st2ctl reload --register-all

今の時点で、st2をチャンネルに招待して「!help」と打つことでst2chatopsからの返答がある。

2.トリガー・ルールの作成

次に、チャットを起点としてその他コマンドなどの実行処理が行われるよう、トリガーおよびルールを作成する。
まず、以下のコマンドを実行し新しく作成するアクション用のディレクトリ作成、yamlファイルの作成などを行う。

cd /opt/stackstorm/packs/
mkdir -p アクション名/{actions,rules,sensors,aliases}

次に、作成したaliasesフォルダ配下にyamlファイルを作成する。
以下の例では、core.localでStackStormマシン上でコマンドを実行させている。

●/opt/stackstorm/packs/アクション名/aliases/local.yaml

---
name: "local_shell_cmd"
action_ref: "core.local"
description: "Execute a command on a local host."
formats:
  - "run {{cmd}}"

yamlファイル作成後、以下のコマンドを実行しreloadを行う。

sudo st2ctl reload --register-all
sudo service st2chatops restart

3.チャットから処理を行わせる

さて、それでは実際にチャットから処理を行わせてみよう。

確かに、指定した通りローカル上でコマンドを実行させることができた。