Terraform配置aws_cloudwatch_event_rule的cron schedule_expression报错如何解决
报错原因分析
- 首次报错:未将
cron(xxx)整体作为字符串包裹,Terraform将cron()识别为原生函数调用,试图解析括号内空格分隔的内容为函数入参,因此抛出需要逗号分隔参数的语法错误。 - 二次报错:存在两个问题:
- 字符串赋值语法错误,
cron"(30 18 * * * *)"不符合Terraform的字符串书写规则 - cron表达式不符合AWS EventBridge的格式要求:AWS EventBridge规定cron表达式的日和星期字段不能同时设为
*,必须将其中一个设为?表示不指定该维度。
- 字符串赋值语法错误,
正确配置示例
如果需求是每天UTC时间18:30触发规则,正确写法如下:
resource "aws_cloudwatch_event_rule" "ec2_off" { name = "ec2-off-${var.environment}" description = "Trigger EC2 schedule lambda" schedule_expression = "cron(30 18 * * ? *)" }
AWS EventBridge cron表达式字段顺序(从左到右):
分钟(0-59) 小时(0-23,UTC时区) 日(1-31) 月(1-12或JAN-DEC) 星期(1-7或SUN-SAT,1代表周日) 年(可选,取值范围1970-2199)
额外注意:EventBridge使用UTC时区,若需要对应国内时区请自行换算,例如北京时间为UTC+8,若需北京时间每天凌晨1点触发,对应UTC时间为前一天的17点,cron表达式写为cron(0 17 * * ? *)即可。
内容的提问来源于stack exchange,提问作者James Green
相关产品推荐
相关产品推荐

