Edited at

API Gateway + Lambda を使って Backlog 通知を Slack で受け取る

More than 1 year has passed since last update.

課題管理のツールとして Backlog は便利なんですが、自分が担当者になった場合や通知対象に含まれた場合にいちいちメールで通知を受けるのは鬱陶しいので、Slack の Direct Message で受け取れるようにしてみました。

こんな感じで、Backlog への課題の追加や更新等があった場合、bot から DM が届きます。

自分宛ての通知のみ DM で来るので、担当者が自分以外の課題に惑わされることがないので安心です。

Hubot で channel 投稿する例は既にいくつかありますが、せっかくなので API Gateway + AWS Lambda でさくっと組んでみました。


2017/08/10: CloudFormation 化しました



Slack API Token の準備

Slack にメッセージを投稿するためには、API Token が必要です。

Slack の Integration で API Token が使える App (Hubot 等) を入れ、API Token をメモしておきます。


既に Hubot を使っているなら、既存の Hubot の API Token をそのまま利用してもOKです。



Backlog API Key の準備

Backlog

Backlog の API にアクセスするため、Backlog 側の API Key を発行し、メモしておきます。

「個人設定」->「API」から辿れます。


Lambda のビルド・S3 への設置

https://github.com/u-minor/backlog2slack からコードを clone し、ビルドします。

yarn install

yarn build

dist 以下に lambda.zip ができていれば OK です。

作成した lambda.zip を 適当な S3 bucket にアップロードしておきます。

bucket 名と、パスは覚えておきましょう。


CloudFormation でスタックを構築する

この作業で、Lambda 用 IAM Role の作成、Lambda function の作成、API Gateway 関連の設定が自動で行われます。

CloudFormation の Create stack に行き、template 選択で ローカルの cf/stack.yml をアップロードします。

次に進むとスタック名やパラメータの設定画面になりますので、メモしておいた API Key 等を設定します。

後は、特に何も設定せず次へ進んでいけば OK です。


最後の I acknowledge that AWS CloudFormation might create IAM resources. のチェックを入れ忘れないようにします。



Backlog の Webhook に 作成した API を設定する

作成されたスタックの Outputs を確認すると、デプロイした API のベース URL が確認できます。

Backlog の「プロジェクト設定」->「Webhook」に行き、Webhook を追加します。

API のベース URL に /notify を追加したものを登録します。

うまく行けば、Backlog 課題の通知が Slack に流れてくるはずです。


補足

Backlog ユーザと Slack ユーザの連携は、メールアドレスベースで行っています。

Backlog の更新で通知があった場合、


  • Backlog のプロジェクト ID を取得

  • Backlog の該当プロジェクトのユーザリストを Backlog API 経由で取得

  • Slack のユーザリストを Slack API 経由で取得

  • 通知対象の Backlog ユーザ ID から Backlog ユーザのメールアドレスを参照

  • Slack ユーザのメールアドレスをサーチし、一致する Slack ユーザを選択

  • 通知先の Slack ユーザ ID を特定、DM 通知

といった処理が行われますので、Backlog と Slack のメールアドレスは一致させておく必要があります。