Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)
2019/04/30
BacklogにSlack連携が追加されました。
ですが、私の所属している会社ではMicrosoft Teamsをコラボレーションツールに使っています。
BacklogにはMicrosoft Teamsへの連携機能はありません。
なければ作ります。
こちらの赤枠の部分です。
赤枠以外については、「Backlogの実績工数をAmazon QuickSightでの可視化 – 仕組み編」をご参照ください。
目次
Teamsの設定
通知を行いたいチャネルを選択して、メニューから[コネクタ]を選択します。
Incoming Webhookの[構成]をクリックします。
通知に表示される接続名とアイコンイメージをアップロードして作成します。
アイコンは会社の非公式ゆるキャラ、とれのCATです。
リクエストの送信先のURLが生成されますのでこれを控えておきます。
これでTeams側の設定は完了です。
Backlogのメッセージを受け取ってTeamsに通知するAWS Lambda
IAMロール
Lambdaに設定するIAMロールにはAWS管理ポリシーのAWSLambdaSQSQueueExecutionRoleを設定しました。
AWSLambdaSQSQueueExecutionRoleは次の内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] } |
AWS Lambda Layers
requestsモジュールとTeamsに通知するための独自モジュールをLayersにアップロードしているので、それを使っています。
Teamsに通知するための独自モジュールは次のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import requests import json import os class Teams(object): def __init__(self): self.url = os.environ.get('TEAMS_URL', None) def send_message(self, title, text): payload_dic = { "title": title, "text": text, } response = requests.post(self.url, data=json.dumps(payload_dic)) return response |
環境変数
- BACKLOG_DOMAIN
BacklogのURLを通知内容に含めるためのBacklogのドメインです。 -
TEAMS_URL
TeamsのIncoming Webhookで生成されたURLです。
AWS Lambdaのコード
コード全文はこちらです。
LayersのTeamsクラスを使っています。
1 2 3 |
from teams import Teams teams = Teams() |
メッセージをわかりやすくするためにフィールド名をの日本語に直してます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
changes_field = { 'summary': '件名', 'description': '詳細', 'milestone': 'マイルストーン', 'startDate': '開始日', 'limitDate': '期限日', 'estimatedHours': '予定時間', 'actualHours': '実績時間', 'assigner': '担当者', 'status': '状態' } status = { '1': '未対応', '2': '処理中', '3': '処理済み', '4': '完了' } |
課題チケットの変更内容は changes にあるので、あればメッセージとして整形しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
def get_changes(changes): if len(changes) == 0: return '' changes_str = '<b>変更内容:</b><br>' for change in changes: field = change.get('field', '') old = change.get('old_value', '') new = change.get('new_value', '') if field == 'status': old = status.get(old, '') new = status.get(new, '') changes_str += '{field}: {old} => {new}<br>'.format( field=changes_field.get(field, '不明フィールド'), old=old, new=new ) return changes_str |
Backlogで課題チケットが更新されると、とれのCATから通知がされました。
変更箇所、課題チケットへのリンク、コメントも通知されます。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
ユーザーガイドの方法でGithubからCodeCommitへリポジトリを移行する
GitリポジトリをAWS CodeCommitに移行するを参照しました。 環境 …
-
-
サービスディスカバリを使用してECSサービスの作成
ECSデベロッパーガイドのチュートリアル:サービスディスカバリを使用して、サービ …
-
-
EC2 Global Viewで不要なインスタンスを見つけて4つほど終了しました
EC2 Global Viewという機能がリリースされました。 EC2コンソール …
-
-
S3インベントリ設定でインベントリファイルの作成を設定
インベントリレポートファイルはオブジェクトの一覧情報です。 日次、週次で定期作成 …
-
-
Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)
Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …
-
-
SageMaker AI StudioでJupyterLab スペースを作成しJupyterLab を起動、S3拡張のインストール
JupyterLab ユーザーガイドとJupyterLab 拡張機能を参照して、 …
-
-
AWS認定試験の自宅受験で壁のポスターを注意されちゃいました
AWS認定オンライン受験をしてみましたに書きましたとおり、自宅受験デビューしまし …
-
-
AWSアカウント内のCloudWatchアラームを削除する
やりたいこと 特定アカウント特定リージョン内のCloudWatdchアラームを全 …
-
-
RDSの拡張モニタリングを有効にしました
RDS for MySQLです。 変更メニューで、[拡張モニタリングを有効にする …
-
-
AWS VPC ネットワークACLでHTTP(80)のみ許可する
ユーザーガイドのカスタムネットワーク ACLのうち、HTTP(80)を許可する設 …