コマンド1つでAmplify ConsoleからのSlack通知を設定する


はじめに

この記事は AWS Amplify Advent Calendar 2020 の20日目の記事です。

昨年、同じ時期に Amplify Consoleの通知をSlackに流す という記事を書きました。
その記事では、タイトルの通り Amplify Consoleのビルド結果をSlackに通知する方法を紹介しました。
この記事では、昨年紹介した方法より楽にSlack通知を実現する方法を紹介します。

昨年のやりかた

詳しくは昨年書いた Amplify Consoleの通知をSlackに流す を読んでいただければわかりますが、ざっくり説明すると、Amplify Consoleのメール通知で利用するSNSでLambdaを呼び出してSlackにメッセージを送信するという方法でした。

ただ、この時利用するSNSトピックの作成はAmplify Consoleでメール通知を一旦有効するという手作業が必要で、プロジェクトや環境が増えると毎度その手作業が必要になり、煩雑でした。

便利な方法が発見される

今年の9月に昨年の記事に次のようなコメントをいただきました。

どうも、自動化する方法があるらしい コメントにかかれたリンク先 を読むと、今まで手動でやっていたSNSTopicの作成にあたる部分(とそこにイベントを送信する部分)がどのような仕組みになっているのかが詳しく書かれていました。

Amplify ConsoleからSlack通知までの流れは、以下のようになっていて、今まで手動でやっていたメール通知設定がEventBridge(EventRule)SNSTopicというAWSリソースで実現されているというものでした。

Amplify Console -> EventBridge -> SNSTopic -> Lambda -> Slack

amplify-category-console-notification の紹介

自動化のスライドを読んで、これならコード化できる と思い、俄然作ってみたくなりました。
昨年の記事でも、メール通知を一旦有効するという手作業以外の部分をコード化して Serverless Application Repositoryに公開 していました。これをベースにする方法も考えましたが、Amplify のappIdを調べたりするのは面倒かなという思いもあり、折角なのでamplify pluginにして簡単に追加できるようにしてみました。

今回作成したプラグインは npmレジストリにpublishしているので誰でもnpmでインストールして利用できます。
ソースコードもhttps://github.com/fossamagna/amplify-category-console-notification で公開しています。

このプラグイン使うには以下のようにnpmでインストールして、amplify plugin scanを実行してください。

$ npm install -g amplify-category-console-notification
$ amplify plugin scan

プラグインをインストールしたら以下のコマンドを実行すると Slackにメッセージを送信するLambdaのリソース名(好きな名前をつけてください)とSlackのWebhook URLを聞かれます。
これらの質問に答えると、Slack通知に必要なAWSリソースがローカルに追加されます。

$ amplify console-notification add
Using service: AmplifyConsoleNotification, provided by: awscloudformation
? Input function name in order to send message to Slack. Sender
? Input Web hook URL of Slack. https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Successfully added resource Sender locally

あとはamplify pushを実行すれば完了です。
以下のようなメッセージがSlackに通知されます

まとめ

あとがき

amplify pluginを作成する上で必要不可欠な、公式ドキュメントはプラグインのアーキテクチャや仕組みレベルを説明してくれています。しかし、実際にコードを書く上でamplifyがどういった機能を提供してくれていて、どのように実装すべきなのか(しないといけないのか)という情報はあまり見当たりませんでした。折角なので今回amplify pluginとして作成するために、調べたことやわかったことなどはどこかのタイミングで紹介したいなと思います。

謝辞

昨年の記事にコメントをくれて自動化の方法の存在に気づかせてくれた @hiroga さん、自動化の方法を紹介してくれた @youta1119 さん、ありがとうございます。