はじめに
こちらの記事は三部構成になっております。
- Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜
- Slack連携による生産性向上の施策(その2)〜Slack App編〜
- Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜
また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方はコチラまで。
※動画開始50分頃からの内容になります。
AWS Lambda編の概要
Backlog APIを利用する前に
Backlogの設定にもよりますが、弊社の場合はIPアドレスによる制限をかけています。
社内のIPアドレス、特定のIPアドレスからのみアクセスを許可しています。
AWS Lambdaからアクセスする際にも特定IPアドレスからAPIへアクセスするように制御が必要になります。
AWS Lambdaの特定IPアドレス化
通常のAWS Lambdaは、サーバレスなので起動のタイミングで毎回IPアドレスが変化します。
IPアドレスを固定させるには、VPC内にAWS Lambdaを用意してインターネット経由でネットワーク接続するIPを特定のアドレスで指定する必要があります。
システム構成図としては、このような形になります。
VPCの設定について
こちらは省略します。ネットワーク関連の仕組みは管轄外のため…
AWS Lambdaの設定
AWS Lambdaの設定にVPCからの実行権限を付与する必要があります。
-
ポリシーアタッチ画面が表示されるので、検索テキストボックスに
lambdavpc
と入力し、絞り込みタイプ【AWS管理】を選択すると、AWSLambdaVPCAccessExecutionRole
がリストに表示されるので、チェックボックスを選択し、【許可を追加】ボタンをクリック
Backlogへのデータ登録
BacklogのAPI仕様に関しては、こちらのリンク先を参照
https://developer.nulab.com/ja/docs/backlog/api/2/add-issue/#
Lambdaのサンプルコードはコチラになります
import os
import json
import requests
#--------------------------------------------------
# Backlog登録処理
# summary:チケットタイトル
# description:チケット詳細内容
# custom1:カスタムフィールド(質問フラグ)
# custom2:カスタムフィールド(発信部門)
#--------------------------------------------------
def backlog_add_issue(summary, category_id, description, custom1, custom2):
project_id = '**[対象のプロジェクトID]**'
issue_type_id = '**[課題タイプ]**'
priority_id = '3'
url = 'https://***[バックログ登録キー]***.backlog.jp/api/v2/issues'
payload={
'projectId': project_id,
'issueTypeId': issue_type_id,
'priorityId': priority_id,
'categoryId[]': category_id,
'summary': summary,
'description': description,
'customField_69109': custom1,
'customField_69357': custom2
}
# BacklogAPI呼び出しキーを設定
params = {
'apiKey': os.environ['API_KEY'],
}
req = requests.post(url, params=params, data=payload)
req.raise_for_status()
return req
Slack通知を利用する前に
(非推奨)Incoming WebHooks の取得
2019年からSlackのカスタムインテグレーションによるWebhookは非推奨となっています。
従いまして、下記のような画面で新たに Incoming WebHooks
を作成するのは止めましょう。
Slack App から Incoming Webhooks の取得
-
(その2)で作ったSlack Appの基本情報画面の左メニューから
Incoming Webhooks
リンクをクリック
-
Incoming Webhooksの設定画面の
Activate Incoming Webhooks
スイッチをONに設定し、【Add New Webhook to Workspace】ボタンをクリック
-
こちらでWebhook URLが作成されるので、準備完了です。【copy】ボタンをクリックして、Webhook URLをコピーしてソースコードで利用できます
Slackチャンネルへの通知
Incoming Webhookを利用したメッセージの送信方法に関しては、こちらのリンク先を参照
https://slack.dev/java-slack-sdk/guides/ja/incoming-webhooks
Lambdaのサンプルコードはコチラになります
import os
import json
import requests
#--------------------------------------------------
# Slack通知関数
# notice:送信先
# message:送信メッセージ
#--------------------------------------------------
def slack_notice(notice, message):
notice_urls = {
'企画':os.environ['SLACK_PLANNING'],
'営業':os.environ['SLACK_SALES'],
'開発':os.environ['SLACK_DEVELOP']
}
if notice in notice_urls:
url = notice_urls[notice]
else:
return
req = requests.post(url, data=json.dumps({'text': message}), headers={'Content-Type': 'application/json'})
req.raise_for_status()
return req
まとめ
3回に分けて説明となりましたが、今回用意した仕組みで
- Workflow Builderを使ってデータ入力
- Slack Appを使ってAPIへデータ送信
- Lambdaを使ってBacklogへデータ登録
- Lambdaを使ってSlackへメッセージ通知
上記4つの動きを実装することが出来るようになりました。
Slackを起因に、何か作業をすることは業務効率をより良くするものだと思いますので
これらを参考に他のAPIへ連携するなり、メールを送るなり、DBへ格納するなりやれることは無限にあります。
技術を使った生産成向上にゴールはないので、皆さんも工夫してみてください!