Python + AWS Lambda関数でslackに投稿する方法
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