🔔

Python + AWS Lambda関数でslackに投稿する方法

2022/06/04に公開

AWS Lambdaを使って色々とslackへ通知したくなって来たので通知できるようにしてみました。
本記事の内容の動作確認は2022/6/4になります。

1. Incoming Webhookをslackに追加

通知したいslackのワークスペースにログインして以下のページでIncomig Webhookを追加します。

Slackに追加ボタンを押して投稿したいチャンネルを選択してIncoming Webhookインテグレーションの追加ボタンを押します。

そして作成したインテグレーションから設定の編集画面へ移動してIncominng WebhookのWebhook URLが作成されたことを確認します。

2. pythonでスラックに投稿できることを確認

投稿用のURLが有効かどうか確認します。
1.で確認したURLを指定して投稿タイトル(title)とメッセージ(value)をjson形式で指定してpostしてみます。

import requests
import json

SLACK_POST_URL ='[Incominng WebhookのWebhook URL]'

requests.post(SLACK_POST_URL, data = json.dumps(post_json))

post_json = {
    "attachments": [{
        "fields": [
            {
                "title": "Title",
                "value": "Value",
            }],
      }]
}

requests.post(SLACK_POST_URL, data = json.dumps(post_json))

以下のようにslackのチャンネルに通知されればIncomming Webhookの設定は成功です。

3. lambdaからslack通知する

3.1 lambda関数作成

まずAWS Labdaのコンソールページから関数を作成します。
関数名は任意で、ランタイムを今回はPython3.9にしてそれ以外設定は触らずに作成します。

3.2 lambda上でreqeuestsライブラリを使えるようにする

関数を作成するだけではrequestsが使えないので使えるようにします。

ローカルで適当に空のディレクトリを作成しpip install requests -t を実行してreqesutsのライブラリコード郡を展開します。
※ローカルのpytonのバージョンはlambda関数作成時に指定したバージョンに揃えた方が良さそうです。

~$ mkdir lambda_python
~$ cd lambda_pytnon
~/lambda_pytnon$ pip install requests -t .

私の環境では以下のようにディレクトリが作成されました。

展開されたrequests関連のファイルをzip圧縮します。
※ 作成したディレクトリは含まない(今回の例ではlamda_pythonディレクトリ)

~/lambda_pytnon$ zip  -r lamda_python.zip *

lambdaコンソールの作成した関数のページに戻りアップロード元にマウスポイントをあわせてzip ファイルを押下します。

するとアップロードウィンドウが表示されるので先程作成したzipファイルを選択してアップロードします。

すると以下のようにローカルで作成したrequestsライブラリが展開され、インポートができるようになります。

3.3 skack通知を実行

実行のファイルlambda_function.pyを作成し以下のようにコードを追加します。


import requests
import json

def lambda_handler(event, context):
    SLACK_POST_URL = '[Incominng WebhookのWebhook URL]'
    
    post_json = {
        "attachments": [{
            "fields": [
                {
                    "title": "Title",
                    "value": "Value",
                }],
          }]
    }
        
    requests.post(SLACK_POST_URL, data = json.dumps(post_json))

これで設定は完了です。テスト実行してみます。
まず変更内容をDeployボタンを押下してデプロイ後、Testボタンを押すと実行できます。

うまく行っていいればslackへ通知がいっていると思います。

Discussion