🍮
Amplify Consoleのビルド結果を、AWS ChatbotでSlackに通知する
やりたかったこと
- Amplify Consoleのビルド結果をSlackに通知したい!
- ググるとLambdaを使う方法が出てくるが、今どきのAWS→Slackの通知にはChatbotを使いたい!
構成
- Amplify → EventBridge → SNS → Chatbot → Slack
- 構成要素は、既知の方式と比べてLambdaがChatbotに変わるだけです。
作り方
Amplifyコンソールでメール通知を設定します
-
なぜメール?と思われるかと思いますが、Amplifyコンソールでメール通知を設定することで、
Amplify → EventBridge → SNS → メールの仕組みを自動で構築してくれます。 -
これにより、全体の半分くらいを作ってくれるので楽になります。
-
もちろん自力でEventBridgeとSNSを作っても構築できますが、面倒なので今回はAmplifyのメール通知に作らせます。
-
メールの通知先は適当でいいですが、一応実在する自分のアドレスにしておくのがよいと思います。
これで、EventBridgeとSNSが作られます
ChatbotでSlackへの通知を設定する
Chatbotのページに行ったら、クライアントにSlackを選んで「クライアントを設定」
画面に従って、Chatbotを設定
- 設定名
- 好きな名前で
- Slackチャネル
- 通知したいChannel
- アクセス許可
- 通常のアクセス許可でOK
- SNS トピック
- 先程のAmplifyのメール通知の設定により、
amplify-xxxxxx_xxx
というトピックが作られているはずなので選択
- 先程のAmplifyのメール通知の設定により、
この時点で、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です。
Amplifyの通知のChatbot対応要望はissueになっていた
(2022-03-04追記)
今更気づきました。この件の対応要望、Amplifyのissueになってました。
100件以上のリアクションがついていて、かなり多くの人が希望しているようです。
AWSさん、正式対応頼む。
Discussion