LoginSignup
2
0

More than 1 year has passed since last update.

EventBridgeを使用した定期実行の間隔別にLambdaの処理内容を変える

Last updated at Posted at 2022-06-26

ある検算処理を行って異常がないか確認し、その結果をSlackに通知するLambdaを作成しました。
LambdaのトリガーはEventBridge (CloudWatch Events) を使用して、1時間毎と24時間毎に定期実行を行いました。
1時間毎と24時間毎で処理内容を変える方法について記載します。
開発言語はPythonです。

EventBridgeでルールの作成

EventBridgeで下記のルールを2つ作成しました。

rule-every-hour 

1時間毎の定期実行 rate(1 hour)
このイベントをLambdaが受けた場合、異常があれば通知する(異常がなければ通知しない)。

rule-every-day 

24時間毎の定期実行 cron(0 10 * * ? *) 毎日午前 10:00 
このイベントをLambdaが受けた場合、異常がなくても結果を通知する。

判定方法

Lambda関数に渡ってくるイベントJSONで判定します。

イベントJSON

EventBridgeから渡ってくるJSONデータ

{
    "version": "0",
    "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "detail-type": "Scheduled Event",
    "source": "aws.events",
    "account": "xxxxxxxxxxxxx",
    "time": "2022-05-10T09:48:31Z",
    "region": "us-west-2",
    "resources": [
        "arn:aws:events:us-west-2:xxxxxxxxxxxxx:rule/rule-every-day"
    ],
    "detail": {}
}

イベントJSONの中のresourcesキーの値がEventBridgeで作成したルール名になっていますので、
その値をLambdaのソースコードの中で取得して、if文で判定しました。

ソースコード

今回はルール名に"every-hour"が含まれているかどうかで判定しています。
1時間毎と24時間毎の処理内容はほとんど共通化していて、通知するかどうかの処理だけ変えています。
1時間毎の定期実行ではエラーがあれば通知し、24時間毎の定期実行ではエラーがなくても実行結果を通知します。

def main(event, context):     
    for resource in event["resources"]:
        if 'every-hour' in resource:
			# 1時間分検査 -> エラーがある場合は結果通知
            result = check(range_hours=1)
			if result.has_error:
				notify_slack(result)
        else:
			# 24時間分検査 -> 必ず結果通知
            result = check(range_hours=24)
			notify_slack(result)
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0