Terraform AWS CloudWatch cron表达式报ScheduleExpression无效
问题根因
你编写的cron表达式不符合AWS CloudWatch Events(现更名EventBridge)的自定义cron语法约束,部署时直接触发校验异常:
ValidationException: Parameter ScheduleExpression is not valid.
具体不匹配规则的点如下:
- AWS Cron表达式固定为6个字段,字段顺序为
分钟 小时 月内日期 月份 星期 年份,和标准Linux 5字段cron结构不通用,不能直接套用Linux cron的写法 - 语法强制要求:月内日期、星期两个字段不能同时设置为
*,二者必须有一个填写?,代表不对该维度做限制,避免两个时间维度的规则产生逻辑冲突。
你当前配置的cron(*/5 * * * * *)中,月内日期位、星期位都填了*,违反上述约束,因此触发报错。
另外你不选用rate(5 minutes)的判断是正确的:rate表达式从规则部署生效的时间点开始按固定间隔滚动触发,比如12:07部署完成的话,后续触发点是12:12、12:17、12:22这类时间点,无法对齐到分钟为5的倍数的固定时刻。
修正方法
将月内日期、星期两个字段中的任意一个替换为?即可,修正后的配置如下:
resource "aws_cloudwatch_event_rule" "foo" { // 其余原有配置保持不变 schedule_expression = "cron(*/5 * * * ? *)" }
该表达式的触发逻辑完全匹配你的需求:所有小时、所有日期、所有月份、所有星期、所有年份下,只要分钟值为5的倍数(00、05、10……55分)就会触发执行。
内容的提问来源于stack exchange,提问作者ablaszkiewicz1
相关产品推荐
相关产品推荐

