You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过EventBridge触发Lambda:每月最后一个周日的下周四执行

实现每月最后一个周日下周四触发Lambda的最优方案

核心思路

EventBridge标准cron表达式无法直接实现“每月最后一个周日的下周四”这种依赖相对日期的逻辑,最优方案是缩小cron触发范围+Lambda内部日期校验,既减少不必要的Lambda调用,又能精准满足需求。


步骤1:调整EventBridge规则的cron表达式

先把触发范围缩小到所有可能符合条件的周四:

  • 当月最后一个周日最早可能在23日(如2025年2月),下周四为27日;
  • 若最后一个周日是31日(仅大月可能,如2026年10月),下周四为次月4日。

调整后的cron表达式更精准,覆盖所有目标日期区间:

schedule_expression = "cron(0 0 27-31,1-4 * 4 *)"

步骤2:在Lambda中添加日期校验逻辑

在Lambda函数开头加入日期判断(以Python为例),仅当当天符合条件时才执行业务代码:

import datetime

def is_target_date():
    today = datetime.date.today()
    # 先确认今天是周四
    if today.weekday() != 3:
        return False
    
    # 计算当月最后一个周日
    first_day = today.replace(day=1)
    # 获取当月总天数
    days_in_month = (first_day.replace(month=first_day.month % 12 + 1, day=1) - datetime.timedelta(days=1)).day
    last_day = today.replace(day=days_in_month)
    # 从当月最后一天倒推到最近的周日
    last_sunday = last_day - datetime.timedelta(days=(last_day.weekday() + 1) % 7)
    
    # 目标日期为最后一个周日加4天(周日+4天=周四)
    target_date = last_sunday + datetime.timedelta(days=4)
    
    return today == target_date

def lambda_handler(event, context):
    if not is_target_date():
        print("今日不符合触发条件,直接退出")
        return {
            'statusCode': 200,
            'body': 'Skipped: Not target date'
        }
    
    # 此处编写你的业务逻辑
    print("执行Lambda核心业务")
    return {
        'statusCode': 200,
        'body': 'Executed successfully'
    }

步骤3:Terraform脚本更新

仅需更新aws_cloudwatch_event_rule的cron表达式,其余代码保持不变:

resource "aws_cloudwatch_event_rule" "python_lambda_event_rule" {
  name        = "poc-rule"
  description = "Event rule for triggering the Python Lambda function on the Thursday after the last Sunday of each month"
        
  schedule_expression = "cron(0 0 27-31,1-4 * 4 *)" 
          
  tags = {
    name        = "Event to trigger hello lambda"
    created_by  = "Terraform"
    group       = "POC"
  }
}

替代方案:EventBridge目标过滤(无需修改Lambda)

若不想改动Lambda代码,可利用EventBridge的目标过滤条件,通过内置日期变量计算判断,但该方式语法复杂、对时区依赖高,灵活性不如Lambda内部校验,因此优先推荐第一种方案。

内容的提问来源于stack exchange,提问作者kanhaiyakumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:13:27