LambdaからSlackに話しかけてみた

tkmi
2024-05-10
2024-05-10

tkmiです。

先日、Lambdaを触った時に何か面白いことできないかなと思って少し調べていたら

Slackと連携することができるそうで、じゃあLambdaからSlackに話しかけてみよう!となりました。

Slack Appの作成

Slackに連携するには、Slackアカウントとワークスペース、
Slack Appの作成、Incoming webhook URLが必要になります。
アカウントの登録からワークスペースの作成までは、画面に従い登録するだけなので割愛します。

準備ができたら、新しいSlack Appを作成します。
Slack APIにアクセスし、「Create An App」をクリックします。(作成にはサインインが必要です)
https://api.slack.com/apps

「From scratch」を選択します。

Appの名前とワークスペースを選択します。

「Incoming Webhooks」を選択し、Onに設定します。


WebHook URLを追加します。

画面が切り替わるので、連携したいチャンネルを選んで、「許可する」をクリックします。

Slack APIに戻ってきてこれでSlack Appの作成は完了です。
Webhook URLは後ほど使うので、コピーしておきます。

Lambda関数の作成

AWS Lambdaコンソールにログインし、新しいLambda関数を作成します。
ランタイムはPythonやNode.jsなど、お好みのものを選択します。
今回はPythonを選択しました。

Lambda関数のコードにSlack APIを呼び出すロジックを実装します。

import os
import urllib3
import json
http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = os.environ['SLACK_URL']
    msg = {
        "channel": "#fromlambda",
        "username": "",
        "text": "lambdaからslackに通知!",
        "icon_emoji": ""
    }

    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST', url, body=encoded_msg)
    print({
        "message": "Hello From Lambda", 
        "status_code": resp.status, 
        "response": resp.data
    })

環境変数の設定

Lambda関数内でSlackのWebhook URL使用しますが、大切な情報なので環境変数として設定します。

テストの作成

「テスト」の項目から新しいテストを作成します。
イベントJSONには、Lambdaに渡すパラメータなどを設定します。
今回は特に必要ないので、名前だけ付けて保存で大丈夫です。
作成したコードをテスト実行します。
「Test」を押すとプログラムを実行します。

別タブが開き、実行結果が表示されます。
エラーがあれば修正しましょう。

デプロイ

「Deploy」を押すことで公開されます
Deployを押さないと内容が反映されないので注意しましょう。

確認

LambdaからSlackへ話しかけることができました!