CodeCommitのプルリクをAWS Chatbotを使ってSlackに通知する。

# はじめに
今回は、CodeCommitにプルリクが作成された際にAWS Chatbotを使ってSlackへ通知を行うまでの設定を行います。
ちなみにこの内容は *Amazon Web Services ブログ* である「[AWS Chatbot を利用して AWS 開発者用ツールの通知を Slack で受け取る方法](
https://aws.amazon.com/jp/blogs/news/receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot/?sc_channel=sm&sc_campaign=AWS_Blog&sc_publisher=FACEBOOK&sc_country=Japan&sc_geo=JAPAN&sc_outcome=awareness&trk=receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot_FACEBOOK&sc_content=receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot&sc_category=AWS+CodeCommit&linkId=82242084)」をベースに行っています。


# 概要図
AWSブログで掲載されている図を引用しています。
![p1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/4db03ca5-d027-abe4-0ffb-81e2bc903a5a.png)


# 前提条件
・CodeCommitにリポジトリが作成されていること。
・通知先となるSlackチャネルが用意されていること。
・gitコマンドが利用できる環境。


# １. 通知ルールの作成
CodeCommitサービスから対象となるリポジトリを選択します。
![スクリーンショット 2020-02-28 14.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/a5362b8d-c723-b8ca-f531-9979292f7549.png)

「通知」から「通知ルールの作成」をクリックします。
![スクリーンショット 2020-02-28 14.03.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/595bb1df-1715-46cd-f7b7-2693db31328a.png)

すると詳細な設定画面へと遷移するので必要に応じて各設定を行っていきます。

## １-１. 通知ルールの設定
「通知名」を入力し「詳細タイプ」は「フル」を選択します。

## １-２. 通知をトリガーするイベント
「Pull request」の「Created」にチェックを入れます。

## １-３. ターゲット
今回は新規に用意するので「SNS トピックの作成」から作成しています。
![スクリーンショット 2020-02-28 14.08.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/1c6d8387-4d32-419b-8877-f1644e3db6ce.png)

以下、上記内容に沿って設定した画面です。
![screencapture-ap-northeast-1-console-aws-amazon-codesuite-codecommit-repository-kooohei-rpository-notifications-create-2020-02-28-14_07_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/781e39d9-edbd-913e-5289-9892d1686c08.png)

問題なければ「Submit」をクリックして作成完了です。以下のような通知ルールが作成できました。
![スクリーンショット 2020-02-28 14.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/5c79a625-fe2e-5338-ae09-2a45e9a4e4d2.png)


# 2. AWS Chatbotの設定
Slackへ通知するために今回はAWSのChatbotサービスを利用します。
まずは、管理コンソールからChatbotサービスへ移動します。

## ２-１. AWS ChatbotとSlackの連携
「チャットクライアント」で「Slack」を選択し、「クライアントを設定」をクリックします。
![スクリーンショット 2020-02-28 20.19.30
.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/d6e5f7aa-3a38-12b5-82cc-3fd1249761af.png)

すると、AWS ChatbotとSlackを連携させるために、以下のような画面が表示されるので「Allow」をクリックして許可をします。
![screencapture-hengjiuinc-slack-oauth-975335100487-d33091a822c4f6437f6ed58942f3b6f6c8353334f6ae83d4e3ba1a85e47d8b95-2020-02-28-14_17_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/53e596b9-1bc0-c175-956a-8a6f95197a5f.png)

## ２-２. Slackチャンネルを設定
Slackチャンネルの設定画面へ遷移するので、通知先となるチャンネル情報を入力します。

### ２-２-１. 設定の詳細
「設定名」を入力します。

### ２-２-２. Slackチャンネル
「チャネルタイプ」は「パブリック」を選択します。すると「パブリックチャネル」でチャネル一覧が出るので今回は「general」を選択します。

### ２-２-３. アクセス許可
「IAMロール」で「テンプレートを使用してIAMロールを作成する」を選択し、「ロール名」を入力します。

### ２-２-４. 通知
SNSトピックの「リージョン」を「アジアパシフィック-東京」を選択するとトピック一覧が表示されるので、そこで先ほど作成したトピックを選択します。

ここでも入力例の画面を以下に載せておきます。
![screencapture-us-east-2-console-aws-amazon-chatbot-home-2020-02-28-14_19_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/d1f09de0-0ad2-e76e-6660-01cca6c87751.png)

入力が完了したら「設定」をクリックして完了です。


# ３. 確認
作成が完了したらちゃんと設定できているかの動作確認を行いたいと思います。
今回はプルリクがトリガーとなるため、そのための準備も含めて行っていきたいと思います。

## ３-１. ブランチの作成
まずはgitコマンドを使ってbranchを作成し、リモートリポジトリへプッシュを行います。

```bash:branchの作成
$ git branch
* master

$ git branch codecommit-notification
$ git checkout codecommit-notification
Switched to branch 'codecommit-notification'

$ git branch
* codecommit-notification
  master
```

```bash:commit
$ touch tmp
$ git add .
$ git commit
[codecommit-notification 8d463f0]  Changes to be committed:     new file:   tmp
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tmp
```

```bash:リモートリポジトリへpush
$  git push --set-upstream origin codecommit-notification
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 280.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/kooohei-rpository
 * [new branch]      codecommit-notification -> codecommit-notification
Branch 'codecommit-notification' set up to track remote branch 'codecommit-notification' from 'origin'.
```

## ３-２. プルリクの作成
ブランチが作成されたらブランチをマージするためのプルリクを作成します。
まずはCodeCommitサービスから対象となるリポジトリを選択し、「プルリクエストの作成」をクリックします。
![スクリーンショット 2020-03-03 17.52.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/2aec0d0b-8afb-de2f-7029-59e58749b868.png)

「ソース」を先ほどpushしたbranchを選択し、「比較」をクリックします。
![スクリーンショット 2020-03-03 17.53.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/b96baf8b-8a68-5c46-ae34-c1e069c41fab.png)

「タイトル」を入力し「プルリクエストの作成」をクリックします。
![スクリーンショット 2020-03-03 17.54.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/328e279e-210b-6f65-b4ae-821af3da5691.png)


## ３-３. 通知確認
以下のようにSlackに通知が届いたら設定OKです。
![スクリーンショット 2020-02-28 14.26.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/e1f5a800-f08e-18ab-8bb8-959f5fb491cd.png)


# 4. 補足 - Slackチャネルをプライベートに設定
プライベートチャネルへ通知するには「プライベートチャネルID」を設定する必要があります。
![スクリーンショット 2020-03-03 20.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/22e30f29-d335-294d-f9f5-3a09e23d3b14.png)

まずはSlackの通知したいプライベートチャネルを右クリックして「Copy Link」をクリックします。
![スクリーンショット 2020-03-03 20.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/e49b0fed-cae9-d8fd-15da-9f6535fcf602.png)

テキストにコピペすると以下のようなURLが確認できます。

```text:CopyLink
https://hogehoge.slack.com/archives/*********
```

ここの「*********」がプライベートIDになるのでこの部分を「プライベートチャネルID」に入力すればOKです。



# おわりに
CodeCommitの通知をChatbotを使うことで簡単にSlackへ通知ができるのがとても便利ですね。

---
[参考]
・[AWS CodeCommit リポジトリイベントの通知を設定する](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-repository-email.html)
・[AWS Chatbot を利用して AWS 開発者用ツールの通知を Slack で受け取る方法](
https://aws.amazon.com/jp/blogs/news/receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot/?sc_channel=sm&sc_campaign=AWS_Blog&sc_publisher=FACEBOOK&sc_country=Japan&sc_geo=JAPAN&sc_outcome=awareness&trk=receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot_FACEBOOK&sc_content=receive-aws-developer-tools-notifications-over-slack-using-aws-chatbot&sc_category=AWS+CodeCommit&linkId=82242084)