Terraform配置EventBridge过滤ECS集群部署事件遇阻求助
问题解答
你的需求完全可行,问题出在EventBridge事件模式的语法格式上,当前的clusterArn过滤写法不符合规范。
错误原因
你在detail字段里把clusterArn写成了包含对象的数组,而EventBridge的前缀过滤语法要求直接将{"prefix": "xxx"}赋值给clusterArn字段,不需要嵌套数组。
修正后的Terraform代码
修改aws_cloudwatch_event_rule.ecs_deployment中的event_pattern部分,同时添加数据源避免硬编码区域和账号ID:
# 添加数据源获取当前AWS区域和账号ID data "aws_region" "current" {} data "aws_caller_identity" "current" {} resource "aws_cloudwatch_event_rule" "ecs_deployment" { name = "${var.namespace}-${var.environment}-infra-ecs-deployment" description = "This rule sends notification on the all app ECS Fargate deployments with respect to the environment." depends_on = [data.aws_region.current, data.aws_caller_identity.current] event_pattern = <<EOF { "source": ["aws.ecs"], "detail-type": ["ECS Deployment State Change"], "detail": { "clusterArn": { "prefix": "arn:aws:ecs:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:cluster/${var.namespace}-${var.environment}-" } } } EOF tags = { Environment = "${var.environment}" Origin = "terraform" } }
额外说明
- 如果需要匹配多个集群前缀,可以将多个
prefix对象放在数组中,示例:"clusterArn": [ {"prefix": "arn:aws:ecs:us-east-1:1234567890:cluster/prod-"}, {"prefix": "arn:aws:ecs:us-east-1:1234567890:cluster/staging-"} ] - 修正后部署Terraform,触发对应ECS集群的部署操作,即可验证Slack是否收到目标集群的事件通知,其他集群的部署事件会被自动过滤。
内容的提问来源于stack exchange,提问作者I Cakramurti
相关产品推荐
相关产品推荐

