はじめに
過去の記事(https://qiita.com/Nana_777/items/a1c082dc9f2507cb1290)
ではSlackへのStepFunctionsのアラート通知を記事にしたが、今回はCodeCommitのプルリクエストをSlackへ通知する方法を記事にしました。
複数のチームで開発を行っていたり、コードのマージの申請と承認の担当者が異なる場合にプルリクエストを出された後にそのことの共有が忘れられていつまでもマージされないなどの問題が発生するため、その対策としても有効にります。
使うAWSサービス
・AWS CodeCommit
・Amazon SNS
・AWS Lambda
アーキテクチャ図
構築手順
1.AWS Lambda関数の作成
・SNSトピックからメッセージを作成してSlackに送信するLambda関数を作成する
<コード例>
※送信内容は要件によって要調整(この例ではタイトルと作成者、プルリクエストのURLをメッセージにして送信している)
import json
import requests
def lambda_handler(event, context):
sns_message = json.loads(event['Records'][0]['Sns']['Message'])
# プルリクエスト情報の取得
title = sns_message['title']
description = sns_message['description']
pull_request_url = sns_message['pullRequestUrl']
created_by = sns_message['createdBy']
# Slackへの通知処理
slack_url = '【SlackのURL】'
slack_payload = {
'text': f"New Pull Request: {title} - {description}\n"
f"Created by: {created_by}\n"
f"Pull Request URL: {pull_request_url}"
}
response = requests.post(slack_url, json=slack_payload)
return {
'statusCode': response.status_code,
'body': response.text
}
2.SNSトピック作成とサブスクライブ設定
①SNSトピックを作成する
②サブスクリプションを作成する
・①で作成したSNSトピックを選択してサブスクリプションを作成する
・SNS通知の通知先に1で作成したLambdaを指定する
3.AWS CodeCommitのイベント通知の設定
①通知を行いたいリポジトリを選択して「通知ルールの作成」を選択する
②通知をトリガーするイベントで「Pull request > Created」を選択する
③ターゲットで2で作成したSNSトピックを選択する
さいごに
プルリクエストの承認作業依頼は申請者が手作業で個人的にメッセージを承認者に出せばそれで事足りるが、毎回そのメッセージを作成して送るのは手間がかかります。
手作業の運用にするとメッセージの送り忘れの可能性もあります。
そこでプルリクエストの内容をLambdaであらかじめカスタマイズした定型文で送ることでその手間と送り忘れを防ぐことができます。