こんにちは。CI/CDの世界へようこそ。
大規模な開発現場では、「誰が、どのブランチに、何をプッシュしたのか」を即座に把握することは、単なる監視ではなく「チームの生存戦略」そのものです。
今日は、BitbucketのWebhookとAWS Lambdaを組み合わせ、「必要な情報だけをスマートに通知する」リアルタイム通知ボットの構築術を伝授します。マニュアルをなぞるだけではない、現場で愛される「ノイズの少ない通知環境」の作り方を一緒に学んでいきましょう。
—
なぜ「Webhook + Lambda」なのか?
通知のためにサーバーを立てるのは、現代のDevOpsではオーバーエンジニアリングです。
- Bitbucket: イベント(PushやPull Request等)が発生した瞬間にデータを飛ばす役割。
- AWS Lambda: イベントを受け取り、中身を解析してSlack等へ投げる「使い捨ての実行環境」。
この構成は、「サーバー管理コストゼロ」「従量課金で低コスト」「無限に拡張可能」という、最強の選択肢です。
—
ステップ1:AWS Lambdaで「窓口」を作る
まずは、Webhookからのリクエストを受け取るLambda関数を用意します。
1. AWSコンソールから「Lambda」を開き、「関数を作成」をクリック。
2. ランタイムは `Python 3.x` を推奨します。記述が直感的で、JSON操作が非常に楽だからです。
以下のコードをコピー&ペーストしてください。これがボットの心臓部です。
import json
import urllib.request
SlackのWebhook URL (※環境変数で管理するのがベストプラクティス)
SLACK_WEBHOOK_URL = “https://hooks.slack.com/services/xxxx/xxxx/xxxx”
def lambda_handler(event, context):
# BitbucketからのPayloadを解析
body = json.loads(event.get(‘body’, ‘{}’))
# 現場の知恵:特定のブランチ(main)へのプッシュのみ通知するフィルタリング
# これをやらないと、開発者の細かいプッシュでSlackが埋まります
push_data = body.get(‘push’, {})
changes = push_data.get(‘changes’, [])
for change in changes:
branch_name = change.get(‘new’, {}).get(‘name’)
if branch_name == ‘main’:
actor = body.get(‘actor’, {}).get(‘display_name’)
message = f”🚀 {actor} が main にプッシュしました!”
# 通知実行
send_to_slack(message)
return {‘statusCode’: 200, ‘body’: ‘Notification processed’}
def send_to_slack(text):
data = json.dumps({“text”: text}).encode(‘utf-8’)
req = urllib.request.Request(SLACK_WEBHOOK_URL, data=data, headers={‘Content-Type’: ‘application/json’})
urllib.request.urlopen(req)
—
ステップ2:Lambdaを外部公開する(関数URLの活用)
昔はAPI Gatewayを挟むのが定石でしたが、今はLambdaの「関数URL」を使えば一瞬です。
1. Lambdaの設定タブから「関数URL」を作成。
2. 認証タイプは `NONE` を選択(Bitbucketから直接叩くため)。
3. 発行された「URL」をコピーしてください。これがWebhookの「宛先」になります。
—
ステップ3:Bitbucket側の設定
ここが最も重要な「接続」部分です。
1. Bitbucketのリポジトリへ移動し、左メニューの 「Repository settings」 > 「Webhooks」 を選択。
2. 「Add webhook」 をクリック。
3. Title: 「Slack通知ボット」と入力。
4. URL: 先ほどコピーした「Lambda関数URL」を貼り付け。
5. Triggers: 「Choose from a full list of triggers」を選択し、「Push」にチェックを入れる。
6. 保存して完了です!
—
現場で震えるほど役立つ「ハック」の知恵
初心者が躓きがちなポイントと、プロが必ず行う「精度向上」のテクニックを伝授します。
- ペイロード解析のコツ:
BitbucketのPayloadは非常に巨大です。いきなり複雑なコードを書くのではなく、Lambdaのコード内で一度 `print(json.dumps(body))` を行い、CloudWatch Logsで送られてくるデータ構造を目視確認してください。これが一番の近道です。
- セキュリティの担保:
今回は簡略化しましたが、本番環境では `X-Hub-Signature` ヘッダーを検証し、Bitbucketからの正当なリクエストであるかを確認する処理を必ず入れてください。
- 情報量をコントロールする:
「誰が」「どのリポジトリに」「何個のコミットを」したか。これらをSlackの「ブロックキット」を使って整形すると、チームの生産性が劇的に向上します。テキストの羅列ではなく、カード型で見せるのが現代流です。
—
最後に:あなたへのアドバイス
この仕組みを構築した瞬間、あなたは「手動でプルリクを確認する時間」から解放されます。
最初は「動いた!」という感動だけで十分です。しかし、慣れてきたら「特定のキーワード(例:fix: や feat: )が含まれるときだけ通知する」といった、さらなるフィルタリングを試してみてください。
CI/CDの真髄は、「人間がやらなくていいことを、いかに機械に任せるか」です。今日作ったこの小さなボットが、あなたのチームの文化を大きく変える最初の一歩になるはずです。
何か詰まったら、いつでも戻ってきてください。応援していますよ!