概要
lambda関数をEventbridgeで定期実行したい場合があるかと思います。
このとき、「lambda関数ちゃんと実行完了したっけ…」となって心配な皆様(筆者)、slackに完了通知を送ってスマホから確認できるようにしましょう。
lambda関数の準備
単純な関数を用意しました。
「notify_slack」がslackに通知を送る関数です。
「lambda_handler」関数内にある、「slack_url」という変数に環境変数を設定し、通知を送るようにします。
lambda_function.py
import urllib.request
import json
import os
def notify_slack(message, url):
content = json.dumps(
{"text": message}
)
try:
request = urllib.request.Request(
url,
data=content.encode('utf-8'),
method="POST"
)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode('utf-8')
except Exception as e:
print('error', e)
def lambda_handler(event, context):
slack_url = os.environ['slack_url']
try:
text = 'Complete task, congratulation!!'
notify_slack(text, slack_url)
result = {
"isBase64Encoded": False,
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": '*'
},
'body': ""
}
return result
except Exception as e:
print(e)
text = f'Failed: {e}'
notify_slack(text, slack_url)
result = {
"isBase64Encoded": False,
'statusCode': 500,
'headers': {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": '*',
},
'body': "Internal Server Error"
}
return result
この関数をlambdaにデプロイします。
デプロイの方法が不明な場合、以下記事の「関数の準備」〜「関数の作成」を参考にしてください。
slackの設定
以下の手順で作成します。
- 通知を送りたいチャンネルを追加する(slack上で)
- 通知用のappを作成し、slackに追加する(web上で)
- 通知を送りたいチャンネルと紐づける(slack上で)
1. 通知を送りたいチャンネルを追加する。
slackアプリを開き、「チャンネルを追加する」から、通知を送りたいチャンネルを追加してください。今回は「通知テスト」というチャンネルを作成します。
(既に作成済みのチャンネルに通知を送りたい方は、次に進んでいただいて構いません)
作成できました!
2. 通知用のappを作成する
slackのワークスペースにログインし、以下のページにアクセスします。
「Create New App」をクリックします。
「From scratch」をクリックします。
App nameを入力し、自身のワークスペースを選択します。
Create Appをクリックします。
左カラムの「Incoming Webhooks」を選択します。
右上の「Off」を「On」にし、下部の「Add New Webhook to Workspace」をクリックします。
1.で作成したチャンネルを選択し、アプリに権限を追加します。
Webhook URLが追加されたかと思います。このURLを後ほど、環境変数として使用します。
ひとまずアプリの設定は完了です。
3. slackに2で作成したappを追加する
slackに移動し、「App」の中に作成したappが存在すると思います。
それをクリックします。
「チャンネルにこのアプリを追加する」をクリックします。
通知を送りたいチャンネルを選択します。
チャンネルに、「<アプリ名>が参加しました。」とのチャットが送られているはずです。
これでslack側の設定は完了です!
lambda関数の環境変数の設定&通知テスト
デプロイした関数の、以下の「slack_url」の環境変数を設定します。
「設定」→「環境変数」→「編集」をクリックします。
「キー」に「slack_url」、「値」に、「2. 通知用のappを作成する」で作成したWebhook URLをコピペします。これで設定は完了です。
(「値」のページ参考)
では、実際にslackに通知が送信されるかテストしてみます。
「テスト」タブのテストをクリックします。
成功しました!slackも確認してみましょう。
作成したAppが実行され、無事に通知が送信されました!
これで、lambda関数の実行完了をslack通知で確認することができました。
lambda関数をEventbridgeで実行してみる
最後に、lambda関数の実行をEventbridgeから行いたいと思います。
今回は、毎日23時に実行するように設定します。
Eventbridgeの「スケジュール」をクリックしてください。
「スケジュールを作成」をクリックします。
スケジュール名を設定します。
定期的に(毎日)実行したいので、頻度は「定期的なスケジュール」を選択します。
タイムゾーンは、理解しやすいようにAsia/Tokyoにします。
スケジュールの種類は、今回は「cronベース」にします。
以下の設定で「毎日23時に実行」となります。設定すると、実際に起動する時間が一覧で表示されるので便利ですね..!
cronベースの設定の仕方は、以下を参考にしてください。
また、フレックスタイムウィンドウはオフで構いません。
ここまで設定が終わったら、「次へ」をクリックします。
ターゲットを選択します。今回はlambda関数の実行なので、AWS LambdaのInvokeを選択します。
作成したlambda関数を選択し、「次へ」をクリックします。
スケジュール完了後のアクションは「NONE」にします。
再試行ポリシーとデッドレターキューは特にこだわりがなければそのままでOKです。
アクセス許可は、もし既存のロールがある場合は設定いただいて構いません。
今回は、新規に作成し、そのロールを利用します。
実行ロールで「このスケジュールの新しいロールを作成」をクリックします。ロール名は自動で作成されます。ロール名は変更できますが、そのままでもよければ「次へ」をクリックします。
最後に、確認して問題がなければ「スケジュールを保存」をクリックします。
スケジュールが作成できました!
23時にslackに通知できています。
これで、lambda関数をEventbridgeで定期実行し、slackに通知する機能が実装できました。
最後に
ここまでお読みいただきありがとうございます。今回はEventbridge+slackで、lambda関数を定期実行してslackに通知する機能に関して紹介しました。slackに通知しておけば、スマホで簡単に確認できるので便利かなと思います!
みなさまのお役に立てれば幸いです。
コメント