能否每隔一周在特定时段暂停/禁用AWS CloudWatch告警?
双周维护窗口自动启停CloudWatch告警实现方案
针对每两周执行一次的维护窗口场景,你提到的两种经典方案都可以通过调整调度规则适配,以下是具体实现方法:
方案1:EventBridge Cron调度+Lambda启停告警
核心是通过双周规则触发Lambda执行告警的启停操作,操作步骤如下:
- 第一步配置调度规则:AWS EventBridge的cron表达式支持按周数规则触发,你需要的每隔一周周一晚8点关告警、晚10点开告警的场景,可用两条cron规则实现:
关告警触发规则:0 20 ? * 2#1,2#3 *(含义:每月第1、3个周一的20:00触发,刚好间隔两周)
开告警触发规则:0 22 ? * 2#1,2#3 *(含义:每月第1、3个周一的22:00触发)
如果你需要严格按14天为周期、不限制月份对齐,可以用rate(14 days)作为调度表达式,首次触发时间设置为你需要的第一个周一20点即可。 - 第二步创建Lambda执行函数:给Lambda配置包含
cloudwatch:DisableAlarmActions、cloudwatch:EnableAlarmActions的IAM权限,代码中调用boto3接口完成操作:
关告警逻辑:cloudwatch.disable_alarm_actions(AlarmNames=['你的EB健康告警名称列表'])
开告警逻辑:cloudwatch.enable_alarm_actions(AlarmNames=['你的EB健康告警名称列表']) - 第三步绑定规则与Lambda:把上面两条EventBridge规则分别绑定关、开告警的Lambda函数即可。
方案2:自定义维护窗口指标+告警逻辑组合
无需启停告警,通过新增判断条件避免维护窗口误触发,更推荐该方案,避免漏开告警导致监控中断:
- 新增自定义CloudWatch指标,命名为
Custom/MaintenanceWindow,值为1代表处于维护窗口,值为0代表非维护窗口。 - 沿用方案1中的双周调度规则,20点触发Lambda执行
cloudwatch.put_metric_data把指标值设为1,22点触发把指标值设为0。 - 修改现有EB健康告警的触发逻辑,调整为 EB健康状态异常 AND
Custom/MaintenanceWindow= 0 时才执行告警通知,维护窗口内即使EB状态异常也不会触发告警。
Elastic Beanstalk场景优化建议
- 如果你的维护窗口就是EB的部署更新时间,可以不用固定调度,直接把告警启停/指标修改逻辑加到EB的部署生命周期钩子中,部署前自动执行关告警/标记维护窗口,部署完成后自动恢复,适配部署时间变动的场景更灵活。
- 建议给所有关联EB的CloudWatch告警加上统一标签,Lambda可以通过标签批量筛选告警,无需硬编码告警名称,降低维护成本。
内容的提问来源于stack exchange,提问作者Luke Welden
相关产品推荐
相关产品推荐

