LoginSignup
9
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-14

今回のお題

WebHookを使用して、Slackにメッセージを表示してみる。

SlackにPOSTしてみる

こちらを参考にさせていただきました。
Slackにincoming webhook経由でpythonからメッセージをPOSTする

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したいと思ったときにすべきこと

こちらを参考に、requestsを上げるようにします。

VS Codeを使用して、ディレクトリ内にrequestsを入れる

  1. 上記に書いたソースでpyファイルを作成し、VS Codeで開きます。
  2. VS Codeのターミナルを開いて、 pip install requests -t . を実行する。

作業フォルダを圧縮する

スクリーンショット 2017-11-14 23.49.04.png
この階層を丸ごと圧縮します。1つ上の階層でフォルダを圧縮して上げる方法もあるようですが、分かりやすいんでこちらを圧縮します。
名前はとりあえずslack.zipとかにしました。

zipをアップロード

AWSに戻り、コード エントリ タイプで、.ZIPファイルをアップロードを選択します。
スクリーンショット 2017-11-14 23.50.47.png

関数パッケージのアップロードを選択して、先ほどの圧縮ファイルを選択します。
スクリーンショット 2017-11-14 23.52.32.png

ファイルを選択したら、保存を押下します。
スクリーンショット 2017-11-14 23.53.35.png

またエラー・・・

スクリーンショット 2017-11-14 23.54.08.png

どうやら、ハンドラをちゃんと設定する必要があるようです・・・
設定するpyのファイル名(今回はslack.pyなので、slack)と実行するファンクション名を入力し、
再度圧縮ファイルをアップロードします。
スクリーンショット 2017-11-14 23.54.55.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にでました!!
スクリーンショット 2017-11-15 0.02.30.png

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10