AWS LambdaでSlack通知してみる

## やること

[PowerShellでSlack通知してみる](https://qiita.com/zgw426/items/738793e2e426f52d7d42)の続き、AWS Lambdaで通知してみる


## 前提

AWSアカウントとSlackアプリの`Incoming Webhook URL`を取得していることが前提で始めます。

---

## IAMロール作成

Lambda実行に必要な権限(IAMロール)を作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/25a1159e-14d6-9690-8990-bc219151a5de.png" width="350" />

必要なポリシーを選択します。今回はLambdaが動けばいいので、`AWSLambdaBasicExecutionRole`を選択しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/d6a2f424-05b7-c5ef-535a-cdace168f784.png" width="350" />

ロール名を設定します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/3456806f-fe40-c1e6-c540-ecfa86fc4e3c.png" width="350" />

## Lambda作成

AWSコンソールのLambdaを開き、`関数の作成`ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/27e6b38b-1bd2-cfc9-89f1-3b4f6b3fa05f.png" width="350" />

`一から作成`を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/d4490ea9-f329-c95d-1a51-d91dfe2f4513.png" width="350" />

赤枠部分を設定します。実行ロールは、さきほど作成したIAMロールを設定します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/9741577b-1cab-c6cd-17cb-87c422f50c49.png" width="350" />

このような画面が表示されたら、下にスクロールします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/1970881e-6751-b68f-268e-18adf5eec332.png" width="350" />

赤枠部分にあるスクリプトを次に紹介するスクリプトに書き換えます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/ee502837-310f-bbb8-e8cf-781a93f86c7c.png" width="350" />


書き換えのスクリプトです。
スクリプト内の`https://hooks.slack.com/services/xxx/xxx/xxx`は、SlackのIncoming Webhookに修正します。

```python
import json
import urllib.request
import logging
from collections import OrderedDict
import pprint

def post_slack(argStr):
    message = argStr + "です"
    send_data = {
        "text": message,
    }
    send_text = json.dumps(send_data)
    request = urllib.request.Request(
        "https://hooks.slack.com/services/xxx/xxx/xxx", 
        data=send_text.encode('utf-8'), 
        method="POST"
    )
    with urllib.request.urlopen(request) as response:
        response_body = response.read().decode('utf-8')

def lambda_handler(event, context):
    post_slack("test")
```

これで、設定完了です。



## 動作テストを用意する

Lambda実行のテストを用意をします。作成済みであればこの作業は不要です。
`テスト`をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/e25bb722-e3d5-41d1-3851-a15e061e6583.png" width="350" />

イベント名を設定します。緑枠の部分は今回は関係ないので編集不要です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/369e1b62-7593-2da0-aa05-6c0303bab7dd.png" width="350" />

これで、テストの準備が完了しました。

## 動作テスト：LambdaからSlackに通知してみる

先ほど作成したテスト(`test`)を設定し、`テスト`ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/ea627899-c39b-01a1-0c50-de3dce41f489.png" width="350" />

`実行結果　成功`と表示されれば実行成功です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/c46dc209-6b7e-07b3-5816-73800bb15bc4.png" width="350" />

Slackに通知が来ていることを確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/5d0dfd97-bb52-e389-8d6b-2f08024b9b61.png" width="350" />

## 関連投稿

- [PowerShellでSlack通知してみる](https://qiita.com/zgw426/items/738793e2e426f52d7d42)
- LambdaでSlack通知してみる ←今ココ