🍮

Amplify Consoleのビルド結果を、AWS ChatbotでSlackに通知する

2 min read

やりたかったこと

  • Amplify Consoleのビルド結果をSlackに通知したい!
  • ググるとLambdaを使う方法が出てくるが、今どきのAWS→Slackの通知にはChatbotを使いたい!

構成

  • Amplify → EventBridge → SNS → Chatbot → Slack
  • 構成要素は、既知の方式と比べてLambdaがChatbotに変わるだけです。

2021/08/06時点で、ChatbotはAmplifyの通知をサポートしていません。
ですので、今後同じ手順で通知を実現できなくなる可能性がありますし、
サポート対象になればもっと楽に構築できるようになる可能性もあります。

作り方

Amplifyコンソールでメール通知を設定します

  • なぜメール?と思われるかと思いますが、Amplifyコンソールでメール通知を設定することで、
    Amplify → EventBridge → SNS → メールの仕組みを自動で構築してくれます。

  • これにより、全体の半分くらいを作ってくれるので楽になります。

  • もちろん自力でEventBridgeとSNSを作っても構築できますが、面倒なので今回はAmplifyのメール通知に作らせます。

  • メールの通知先は適当でいいですが、一応実在する自分のアドレスにしておくのがよいと思います。

これで、EventBridgeとSNSが作られます

ChatbotでSlackへの通知を設定する

Chatbotのページに行ったら、クライアントにSlackを選んで「クライアントを設定」

画面に従って、Chatbotを設定

  • 設定名
    • 好きな名前で
  • Slackチャネル
    • 通知したいChannel
  • アクセス許可
    • 通常のアクセス許可でOK
  • SNS トピック
    • 先程のAmplifyのメール通知の設定により、amplify-xxxxxx_xxxというトピックが作られているはずなので選択

この時点で、Amplify → EventBridge → SNS → Chatbot → Slackの全てのリソースが揃いますが、残念ながらSlackに通知はまだ飛びません

EventBridgeで通知のフォーマットを編集してchatbotに対応させる

  • EventBridgeに行くと、Amplifyが作ったルールがあるので、これを編集します。

  • ターゲットを選択->ターゲット->入力の設定で入力トランスフォーマーを編集

  • テキストボックスにamplifyが勝手に設定したものが入っているので、下記のように書き換えます。

{"account":"$.account","appId":"$.detail.appId","branch":"$.detail.branchName","id":"$.id","jobId":"$.detail.jobId","region":"$.region","source":"$.source","status":"$.detail.jobStatus","time":"$.time","version":"$.version"}
{"version":"<version>","id":"<id>","detail-type":"<status> AWS Amplify Console","source":"<source>","account":"<account>","time":"<time>","region":"<region>","resources":["`<status>`","app: https://<branch>.<appId>.amplifyapp.com/", "build result: https://console.aws.amazon.com/amplify/home?region=<region>#<appId>/<branch>/<jobId>"]}
  • Chatbotの仕様が見つからなくて、なんかいい感じに通知が飛ぶように試行錯誤で書いたので、中身の解説はできません。
    • 通知を飛ばすだけなら入力の設定を「一致したイベント」にするだけでもOKですが、可読性がとても低いので入力トランスフォーマーで編集しています。

AmplifyコンソールでビルドするとSlackに通知が飛びます

なお、最初に設定したメールへの通知は邪魔なので消してOKです。

Discussion

ログインするとコメントできます