■ はじめに
StackStorm には Slack と連携するための Pack が用意されています。 この記事では、環境の準備と、簡単な動作確認としてSlackへの手動投稿を試します。
■ 環境の準備
StackStorm 本体のインストール
今回は 以下の方法でインストールします。 tekunabe.hatenablog.jp 2.7.2 というバージョンがインストールされました。
Slack Pack のインストール
まず st2 login
コマンドでログインします。
[ec2-user@ip-172-31-4-147 ~]$ st2 login testu Password: Logged in as testu Note: You didn't use --write-password option so the password hasn't been stored in the client config and you will need to login again in 24 hours when the auth token expires. As an alternative, you can run st2 login command with the "--write-password" flag, but keep it mind this will cause it to store the password in plain-text in the client config file (~/.st2/config).
続いて st2 pack install slack
コマンドで Slack Pack をインストールします。
[ec2-user@ip-172-31-4-147 ~]$ st2 pack install slack For the "slack" pack, the following content will be registered: rules | 0 sensors | 1 triggers | 0 actions | 113 aliases | 0 Installation may take a while for packs with many items. [ succeeded ] download pack [ succeeded ] make a prerun [ succeeded ] install pack dependencies [ succeeded ] register pack +-------------+------------------------------------------------+ | Property | Value | +-------------+------------------------------------------------+ | name | slack | | description | st2 content pack containing slack integrations | | version | 0.10.0 | | author | StackStorm, Inc. | +-------------+------------------------------------------------+
Slack Pack の内容確認
Slack Pack がインストールされたことを確認します。
[ec2-user@ip-172-31-4-147 ~]$ st2 pack show slack +-------------+---------------------------------------------------------+ | Property | Value | +-------------+---------------------------------------------------------+ | name | slack | | description | st2 content pack containing slack integrations | | author | StackStorm, Inc. | | content | { | | | "sensors": { | | | "count": 1, | | | "resources": [ | | | "SlackSensor" | | | ] | | | }, | | | "actions": { | | | "count": 113, | | | "resources": [ | | | "dnd.endSnooze", | (略) | | "post_message", | | | "dnd.info", | | | "team.billableInfo", | | | "channels.replies", | | | "groups.setPurpose", | | | "channels.list", | | | "groups.rename", | | | "im.replies", | | | "im.list", | (略) | | "stars.add" | | | ] | | | } | | | } | | email | info@stackstorm.com | | keywords | [ | | | "slack", | | | "chat", | | | "messaging", | | | "instant messaging" | | | ] | | ref | slack | | repo_url | https://github.com/StackStorm-Exchange/stackstorm-slack | | version | 0.10.0 | +-------------+---------------------------------------------------------+
多くのActionがあるようです。
メッセージを投稿するには、 slack.post_message
という Action を利用すればよさそうなので、slack.post_message
のヘルプを参照します。
[ec2-user@ip-172-31-4-147 ~]$ st2 action get slack.post_message +-------------+--------------------------------------------------------------+ | Property | Value | +-------------+--------------------------------------------------------------+ | id | 5b0b5b446fb12304dc0e0199 | | uid | action:slack:post_message | | ref | slack.post_message | | pack | slack | | name | post_message | | description | Post a message to the Slack channel. | | enabled | True | | entry_point | post_message.py | | runner_type | python-script | | parameters | { | | | "username": { | | | "required": false, | | | "type": "string", | | | "description": "Bot username." | | | }, | | | "disable_formatting": { | | | "default": false, | | | "required": false, | | | "type": "boolean", | | | "description": "Disable formatting, don't parse the | | | message and treat it as raw text" | | | }, | | | "icon_emoji": { | | | "required": false, | | | "type": "string", | | | "description": "Bot icon" | | | }, | | | "webhook_url": { | | | "required": false, | | | "type": "string", | | | "description": "Optional Webhook url" | | | }, | | | "message": { | | | "required": true, | | | "type": "string", | | | "description": "Message to send." | | | }, | | | "channel": { | | | "required": false, | | | "type": "string", | | | "description": "Optional channel to post to. Note | | | channel must contain leading #" | | | } | | | } | | notify | | | tags | | +-------------+--------------------------------------------------------------+
Slack Pack の 設定
予め 投稿したい先の Slack の着信WebフックのURLを控えておきます。
続いて、 st2 pack config slack
コマンドで Slack Pack の設定を行います。
いくつか対話形式で設定項目が聞かれます。
今回は以下の値にして、他はデフォルトのままにしました。
設定項目 | 値 | 備考 |
---|---|---|
post_message_action.username | akira6592 | 任意の名前 |
post_message_action.webhook_url | (先ほど控えた着信WebフックのURL) | |
post_message_action.icon_emoji | :smiley: | 投稿時のアイコン。省略時は :panda: |
admin.organization | admin | 任意の名前 |
途中、以下のように聞かれますのでエンターを押します。
Do you want to preview the config in an editor before saving? [y]:
設定内容がテキストとしてエディタで開かれるので、確認後エディタを終了します。
最後に
Do you want me to save it? [y]:
と聞かれるのでエンターを押します。
設定が完了すると以下のように、設定内容が出力されます。
+----------+--------------------------------------------------------------+ | Property | Value | +----------+--------------------------------------------------------------+ | id | 5b0b5b466fb12304dc0e01c3 | | pack | slack | | values | { | | | "action_token": "********", | | | "admin": { | | | "organization": "admin", | | | "attempts": 1, | | | "admin_token": "", | | | "auto_join_channels": null, | | | "set_active": true | | | }, | | | "sensor": { | | | "strip_formatting": false, | | | "token": "" | | | }, | | | "post_message_action": { | | | "username": "akira6592", | | | "webhook_url": "https://hooks.slack.com/services/xxx | | | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", | | | "icon_emoji": ":smiley:", | | | "channel": null | | | } | | | } | +----------+--------------------------------------------------------------+
設定内容は /opt/stackstorm/configs/slack.yaml
に保存されています。
[ec2-user@ip-172-31-4-147 ~]$ cat /opt/stackstorm/configs/slack.yaml action_token: null admin: admin_token: '' attempts: 1 auto_join_channels: null organization: admin set_active: true post_message_action: channel: null icon_emoji: ':smiley:' username: akira6592 webhook_url: https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx sensor: strip_formatting: false token: ''
■ StackStorm から Slack への投稿
それでは実際に StackStorm から Slack へ投稿してみます。
手動での投稿は st2 run slack.post_message
コマンドを利用し、 message
オプションで投稿したいテキストを指定します。
[ec2-user@ip-172-31-4-147 ~]$ st2 run slack.post_message message="Hello, St2! :tada:" . id: 5b0bca1b6fb12304dc0e01d4 status: succeeded parameters: message: 'Hello, St2! :tada:' result: exit_code: 0 result: true stderr: 'st2.actions.python.PostMessageAction: INFO Message successfully posted ' stdout: ''
無事、以下のようにSlackに投稿されました。
■ まとめ
StackStorm と Slack を連携するための準備と、手動でSlackに投稿するところまで確認できました。
Notification先として便利そうです。
また、 slack.SlackSensor
というセンサーも含まれているようなので、今度こちらも試してみたいと思います。