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

如何用AWS EventBridge Scheduler设置每月第14个工作日执行Lambda任务?

实现Lambda每月第14个工作日执行的方案

标准的Cron表达式(包括AWS CloudWatch使用的)没办法直接实现“每月第14个工作日”的触发逻辑,因为Cron只能基于固定的日期、星期值,没法动态计算当月的工作日天数。下面给你两种可行的实现方案:

方案一:辅助Lambda做日期判断+CloudWatch每日触发

  1. 创建CloudWatch Events规则,用Cron表达式每天固定时段触发(以上午10点为例,对应表达式:0 2 ? * * *——注意AWS Cron默认时区是UTC,若需用业务时区比如Asia/Shanghai,UTC+8的10点对应UTC的2点,要按需调整)
  2. 该规则触发一个辅助Lambda函数,核心逻辑:
    • 计算当前月份的第14个工作日(仅排除周六周日的话,遍历当月所有日期,统计周一到周五的天数,直到数到第14个)
    • 如果当前日期正好等于这个第14个工作日,就调用你的文件检查Lambda

辅助Lambda的Python示例代码

import datetime
import boto3

lambda_client = boto3.client('lambda')
TARGET_LAMBDA_NAME = '你的文件检查Lambda名称'

def is_14th_weekday():
    today = datetime.date.today()
    month = today.month
    year = today.year
    count = 0
    day = 1
    while True:
        try:
            current_date = datetime.date(year, month, day)
        except ValueError:
            # 超出当月天数,理论上每月工作日远多于14天,此情况可忽略
            return False
        if current_date.weekday() < 5:  # 0-4对应周一到周五
            count +=1
            if count ==14:
                return current_date == today
        day +=1

def lambda_handler(event, context):
    trigger_flag = is_14th_weekday()
    if trigger_flag:
        lambda_client.invoke(
            FunctionName=TARGET_LAMBDA_NAME,
            InvocationType='Event'  # 异步触发,按需可改为RequestResponse同步
        )
    return {"status": "checked", "triggered": trigger_flag}

方案二:AWS Step Functions编排工作流

如果想更清晰地管理流程分支,可以用Step Functions:

  • 创建状态机,包含两个核心节点:
    1. 调用辅助Lambda判断当前是否为当月第14个工作日
    2. 通过Choice状态做分支:如果是则执行文件检查Lambda,否则直接结束流程
  • 同样用CloudWatch Events每天触发这个状态机,逻辑和方案一一致

额外注意事项

  • 时区校准:在CloudWatch Events规则里务必设置正确的业务时区,避免触发时间偏差
  • 节假日扩展:如果需要排除法定节假日,可在辅助Lambda中加入节假日列表,统计工作日时跳过这些日期
  • 容错机制:给辅助Lambda配置重试策略,避免因临时网络或服务故障导致漏触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:52:14