如何配置AWS EventBridge Cron规则:每月N天后仅工作日触发Lambda
解决AWS EventBridge触发Lambda的工作日+排除月初时段需求
方案一:EventBridge层面过滤(无无用Lambda调用)
这种方法通过定时触发+事件过滤规则,直接在云端过滤掉不符合条件的时段,只有符合要求的事件才会触发Lambda,避免无效调用。
步骤:
- 创建EventBridge规则,选择Schedule类型,设置触发频率(比如每天上午10点,对应cron表达式:
cron(0 10 * * ? *))。 - 添加Lambda作为目标后,进入Event pattern配置,选择Custom pattern (JSON),输入以下过滤规则(示例为排除每月1-3号、仅保留周一到周五):
{ "source": ["aws.events"], "detail-type": ["Scheduled Event"], "$.dayOfWeek(time)": ["2", "3", "4", "5", "6"], "$.dayOfMonth(time)": ["4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"] }
- 说明:AWS的
$.dayOfWeek(time)返回值中,1=周日、2=周一、6=周五,所以["2","3","4","5","6"]对应工作日;$.dayOfMonth(time)列出所有非月初的日期,可根据你的实际需求调整排除的日期范围。
- 保存规则即可,只有同时满足工作日和非月初时段的触发事件才会调用Lambda。
方案二:Lambda内部判断(配置简单)
如果觉得EventBridge过滤规则配置繁琐,可以让EventBridge按工作日触发,在Lambda内部判断当前日期是否属于月初无效时段,不符合则直接退出。
步骤:
- 创建EventBridge规则,使用cron表达式指定工作日触发(比如每天上午10点的周一到周五,对应cron表达式:
cron(0 10 ? * 2-6 *))。- 注意:AWS cron的
day-of-week字段中,1=周日、2=周一、6=周五,2-6即覆盖所有工作日。
- 注意:AWS cron的
- 在Lambda函数中添加日期判断逻辑(以Python为例):
import datetime def lambda_handler(event, context): # 转换为你需要的时区,示例为北京时间 today = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8))) # 判断是否是每月1-3号,是的话直接跳过执行 if today.day <= 3: return { 'statusCode': 200, 'body': '月初时段,跳过邮件发送' } # 执行异常超额预测账单邮件发送逻辑 # ... 你的邮件发送代码 ... return { 'statusCode': 200, 'body': '邮件发送成功' }
内容的提问来源于stack exchange,提问作者HSchmale
相关产品推荐
相关产品推荐

