Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

今回のお題

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away