LambdaからWebHookを使用してSlackにメッセージを送信してみる

# 今回のお題
WebHookを使用して、Slackにメッセージを表示してみる。

## SlackにPOSTしてみる
こちらを参考にさせていただきました。
[Slackにincoming webhook経由でpythonからメッセージをPOSTする
](https://qiita.com/satoshi03/items/14495bf431b1932cb90b)

```lambda_function.py
import requests
import json

def lambda_handler(event, context):
    # slack送信Sample
    requests.post('webhookのURL', data = json.dumps({
        'text': 'Test\r\nHello Slack', # 投稿するテキスト
        'username': 'python_slack', # 投稿のユーザー名
        'link_names': 1, # メンションを有効にする
        'channel': 'test', # チャンネル
        'icon_emoji': 'icon', # アイコン
    }))
```

すると下記のようなエラーがログに出力されました

```
Syntax error in module 'lambda_function': Non-ASCII character '\xe9' in file /var/task/lambda_function.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details (lambda_function.py, line 4)
```
どうやら、UTF-8指定しないで日本語があるとエラーになるようです・・・
そこで、下記のようなソースに変えました

```lambda_function.py
# coding: UTF-8
import requests
import json

def lambda_handler(event, context):
    # slack送信Sample
    requests.post('webhookのURL', data = json.dumps({
        'text': 'Test\r\nHello Slack', # 投稿するテキスト
        'username': 'python_slack', # 投稿のユーザー名
        'link_names': 1, # メンションを有効にする
        'channel': 'test', # チャンネル
        'icon_emoji': 'icon', # アイコン
    }))
```
頭にUTF-8を指定する一行を追加。保存して、再度テストを実行します。

```
Unable to import module 'lambda_function': No module named requests
```
違うエラーになりました・・・

[【AWS】Lambdaでpipしたいと思ったときにすべきこと
](https://qiita.com/Hironsan/items/0eb5578f3321c72637b4)
こちらを参考に、requestsを上げるようにします。

## VS Codeを使用して、ディレクトリ内にrequestsを入れる
1. 上記に書いたソースでpyファイルを作成し、VS Codeで開きます。
2. VS Codeのターミナルを開いて、
``` 
pip install requests -t .
```
を実行する。

## 作業フォルダを圧縮する
<img width="587" alt="スクリーンショット 2017-11-14 23.49.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/7980de95-9f74-cb3d-827f-2c6ded5833ca.png">
この階層を丸ごと圧縮します。１つ上の階層でフォルダを圧縮して上げる方法もあるようですが、分かりやすいんでこちらを圧縮します。
名前はとりあえずslack.zipとかにしました。

## zipをアップロード
AWSに戻り、コード エントリ タイプで、**.ZIPファイルをアップロード**を選択します。
<img width="945" alt="スクリーンショット 2017-11-14 23.50.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/c7cc63f8-4693-d0bd-17f5-4cf0783b6df1.png">

関数パッケージのアップロードを選択して、先ほどの圧縮ファイルを選択します。
<img width="309" alt="スクリーンショット 2017-11-14 23.52.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/0a4b6df2-3ba5-db09-270d-3b6638000df2.png">

ファイルを選択したら、保存を押下します。
<img width="374" alt="スクリーンショット 2017-11-14 23.53.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/b4f45e7e-4dd7-2b54-5938-d115062753ab.png">

## またエラー・・・
<img width="928" alt="スクリーンショット 2017-11-14 23.54.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/8a858a60-90d0-0297-21b9-21b97902ba9f.png">

どうやら、ハンドラをちゃんと設定する必要があるようです・・・
設定するpyのファイル名(今回はslack.pyなので、**slack**)と実行するファンクション名を入力し、
再度圧縮ファイルをアップロードします。
<img width="294" alt="スクリーンショット 2017-11-14 23.54.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/6afc5769-776f-b95d-c731-17cbc92e31e6.png">

## アップロード完了したので、テスト実行
内容をきちんとした設定内容に変更し、実行します。

```lambda_function.py
# coding: UTF-8
import requests
import json

def lambda_handler(event, context):
    # slack送信Sample
    requests.post('webhookのURL', data = json.dumps({
        'text': 'Test\r\nHello Slack', # 投稿するテキスト
        'username': 'python_slack', # 投稿のユーザー名
        'link_names': 1, # メンションを有効にする
        'channel': 'test', # チャンネル
        'icon_emoji': 'icon', # アイコン
    }))
```

Slackにでました！！
<img width="281" alt="スクリーンショット 2017-11-15 0.02.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/204329/bfe2615f-2c2c-1f6b-8f42-5f4305cab6ad.png">