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

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

# やりたいこと
- CodeBuild の結果をSlack に通知したい

![aws-sns-chatbot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/d6d0625b-b351-1aa9-f392-58977423e872.jpeg)

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

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

```
/invite @aws
```
# 作業手順
**1.　[AWSコンソール](https://console.aws.amazon.com/console/home) にログイン**

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

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

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

- 名前：任意の内容
- アクセスポリシー：添付画像参照
![Screenshot 2020-06-14 15.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/9dddb834-3ad4-c994-5b74-e8aa06fc5f47.png)

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

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

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

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

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

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

「Codeシリーズに特化した通知ルールサービスを明示的に許可するよ」という設定を入れる必要があるようです。
末尾じゃなくてこのあたりに挿入します。詳しくは[こちら](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/set-up-sns.html)をご覧ください。
![Screenshot 2020-06-14 15.29.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/feff6121-f44d-52c5-ece2-d1cfb5de6828.png)


**6.　[変更の保存] をクリック**
## AWS Chatbot
**1.　チャットクライアントを設定 > プルダウンで[Slack] を選択 > [クライアントを設定] をクリック**

**2.　[Allow] をクリック**
![Screenshot 2020-06-14 15.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/27ee79f0-bb87-c49b-5858-4886462ee49c.png)

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

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

![Screenshot 2020-06-14 15.59.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/36f5ac46-ed0c-0cc1-7b61-26bd1676aa69.png)

**4.　[設定] をクリック**
## CodeBuild
**1.　サイドバーの[ビルドプロジェクト] をクリック**

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

- 通知ルールの設定 > 通知名：任意の内容
- 通知をトリガーするイベント：任意の内容
- ターゲット：SNS トピックを選択
![Screenshot 2020-06-11 18.52.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/13999f1d-24a0-a71a-0266-cb024c2df3da.png)

**3.　[submit] をクリック**

## 動作確認
ためしにビルドを実行してみてください。
ズラッと通知が届くはずです！
![Screenshot 2020-06-14 16.10.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/dffaf7a5-e572-7cef-6cec-25e0f248f7c7.png)

#余談
CodeBuild から直接AWS Chatbotをターゲットとして設定することもできました。
![Screenshot 2020-06-12 11.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156147/9f509051-9b62-2fc6-b1b2-6275849cac1e.png)

しかし、SNS トピック名が意図しない名前で自動生成されてしまったので今回はSNSを挟む構成にしました。
#参考
[【開発者必見】Codeシリーズに最適化された通知サービスNotificationsがリリースされました！ | Developers.IO](https://dev.classmethod.jp/articles/new-code-series-notification/)
[Configure Amazon SNS Topics for Notifications - Developer Tools Console](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/set-up-sns.html)