CodeBuild の結果をSlack に通知する (CodeBuild + Amazon SNS + AWS Chatbot)


いちいちAWSコンソールを開いてCodeBuild の実行結果を確認するのやだな...と思ったので、Slackに飛ばすことにしました

やりたいこと

  • CodeBuild の結果をSlack に通知したい

まずSNS のトピックを作り、Chatbot で対象のトピック・通知先のSlackチャンネルを選択。
そのあとCodeBuild の通知ルールで ターゲットを対象のトピックにする、というのが大まかな流れです。

事前準備

通知したいチャンネルがプライベートチャンネルの場合、AWS botくんを招待する必要があります。
以下のコマンドを実行すれば招待可能です。

/invite @aws

作業手順

1. AWSコンソール にログイン

2. [SNS] と入力し、Enterキーを押す

Amazon SNS

1. サイドバーの[トピック] をクリック

2. [トピックの作成] をクリック

  • 名前:任意の内容
  • アクセスポリシー:添付画像参照

トピックにメッセージを発行できるユーザーは 全員 にするのを忘れずに。
デフォルト値は トピックの所有者のみ になっています。
そのままだとCodeBuild からトピックにメッセージを発行できなくてうまいこといきません。
ここでハマり、数時間を溶かしてしまいました。。

他の項目はとりあえずデフォルト値にしておきます。

3. [トピックの作成] をクリック

4. 作成したトピックを選択し、[編集] をクリック

5. アクセスポリシーのJSON に以下を追記

      "Principal": {
        "Service": "codestar-notifications.amazonaws.com"
      }

「Codeシリーズに特化した通知ルールサービスを明示的に許可するよ」という設定を入れる必要があるようです。
末尾じゃなくてこのあたりに挿入します。詳しくはこちらをご覧ください。

6. [変更の保存] をクリック

AWS Chatbot

1. チャットクライアントを設定 > プルダウンで[Slack] を選択 > [クライアントを設定] をクリック

2. [Allow] をクリック

3. [新しいチャネルを設定] をクリック

  • 設定名:任意の内容
  • Slack チャネル:通知先に設定したいチャンネル
  • アクセス許可:ポリシーテンプレート を使うと楽。[通知のアクセス許可] を選択しておけば十分です。
  • 通知 - オプション > SNS トピック:リージョン・トピックを選択

4. [設定] をクリック

CodeBuild

1. サイドバーの[ビルドプロジェクト] をクリック

2. 対象のビルドプロジェクトを選択し、[通知ルールの作成] をクリック

  • 通知ルールの設定 > 通知名:任意の内容
  • 通知をトリガーするイベント:任意の内容
  • ターゲット:SNS トピックを選択

3. [submit] をクリック

動作確認

ためしにビルドを実行してみてください。
ズラッと通知が届くはずです!

余談

CodeBuild から直接AWS Chatbotをターゲットとして設定することもできました。

しかし、SNS トピック名が意図しない名前で自動生成されてしまったので今回はSNSを挟む構成にしました。

参考

【開発者必見】Codeシリーズに最適化された通知サービスNotificationsがリリースされました! | Developers.IO
Configure Amazon SNS Topics for Notifications - Developer Tools Console