Terraform部署CloudWatch Event规则时ID格式错误排查求助
解决CloudWatch Event Target的ID格式错误问题
你遇到的ID格式不符合预期(),应为EVENTBUSNAME/RULENAME或RULENAME错误,根源出在两处配置问题:
1. Event Rule的event_bus_name误用ARN
aws_cloudwatch_event_rule资源的event_bus_name字段要求传入事件总线名称,而非ARN。你当前传入的是事件总线的ARN值,会导致规则与自定义事件总线的关联失效,进而影响Target对规则的识别。
2. Event Target未关联自定义事件总线
当Event Rule绑定在自定义事件总线上时,对应的Event Target必须明确指定event_bus_name参数。如果省略该参数,Terraform会默认去默认事件总线查找规则,因找不到匹配资源触发格式错误。
修正后的代码
resource "aws_kinesis_firehose_delivery_stream" "kinesis_stream" { name = var.delivery_stream_name destination = "s3" s3_configuration { role_arn = aws_iam_role.kinesis_data_firehose_role.arn bucket_arn = aws_s3_bucket.s3_bucket.arn } } resource "aws_cloudwatch_event_rule" "successful_sign_in_rule" { description = "Auth0 User Successfully signed in" # 替换为事件总线名称而非ARN event_bus_name = aws_cloudwatch_event_bus.event_bridge_event_bus.name event_pattern = <<EOF { "detail-type": [ "s" ] } EOF } resource "aws_cloudwatch_event_target" "successful_sign_in_rule_target" { rule = aws_cloudwatch_event_rule.successful_sign_in_rule.name arn = aws_kinesis_firehose_delivery_stream.kinesis_stream.arn # 明确指定自定义事件总线名称 event_bus_name = aws_cloudwatch_event_bus.event_bridge_event_bus.name }
可选替代方案
如果不想单独指定event_bus_name,也可以将rule参数写成事件总线名称/规则名称的格式:
rule = "${aws_cloudwatch_event_bus.event_bridge_event_bus.name}/${aws_cloudwatch_event_rule.successful_sign_in_rule.name}"
不过前者的代码可读性更强,推荐使用。
内容的提问来源于stack exchange,提问作者dantevn5
相关产品推荐
相关产品推荐

