Terraform配置AWS Glue Crawler每日调度时cron表达式报错问题
解决AWS Glue Crawler Terraform调度表达式无效的问题
报错原因
你的cron表达式cron(0 23 * * *)不符合AWS CloudWatch Events的语法规则,核心问题是:
- AWS的cron要求日期(day-of-month)和星期(day-of-week)不能同时使用通配符
*,两者必须有一个设为?,表示不关注该维度的匹配,否则会触发冲突报错。 - 标准cron是5字段格式,而AWS Glue依赖的CloudWatch Events cron是6字段格式(分 时 日 月 周 年,年份可选),但即使省略年份,也必须遵守日期/星期的互斥规则。
修复后的配置
将schedule字段修改为符合AWS规则的表达式,比如每日23点执行的正确写法:
resource "aws_glue_crawler" "test" { name = "test" description = "Ctest" role = data.aws_iam_role.test.arn database_name = "test" schedule = "cron(0 23 * * ? *)" # 带年份的写法,年份用*表示任意 schema_change_policy { delete_behavior = "LOG" update_behavior = "LOG" } s3_target { path = "s3://test//" sample_size = 10 } recrawl_policy { recrawl_behavior = "CRAWL_NEW_FOLDERS_ONLY" } configuration = jsonencode( { CreatePartitionIndex = true Version = 1 } ) }
或者省略年份(同样有效):
schedule = "cron(0 23 * * ?)"
补充说明
- AWS cron的6字段顺序为:
分钟 小时 日期 月份 星期 年份,所有字段取值范围需符合CloudWatch Events的要求(比如小时是0-23,分钟0-59等)。 - 当需要指定每日执行时,固定小时和分钟,日期设为
*,星期设为?(或反之),明确表示只按日期维度触发,忽略星期维度。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

