如何在EventPattern的taskDefinitionArn中用通配符替换任务定义修订号
解决ECS任务定义任意修订号的EventBridge事件匹配问题
你遇到的问题是因为EventBridge(原CloudWatch Events)的事件模式不支持在字符串值中使用*作为通配符,直接写*会被当作字面量处理,自然匹配不到实际的任务定义ARN。以下是两种可行的解决方案:
方案一:使用前缀匹配(Prefix)
利用任务定义ARN的固定前缀特性,匹配所有以指定前缀开头的ARN,覆盖任意修订号:
{ "detail-type": [ "ECS Task State Change" ], "source": [ "aws.ecs" ], "detail": { "taskDefinitionArn": [ { "prefix": "arn:aws:ecs:us-east-1:*********:task-definition/test-definition-task:" } ], "stoppedReason": [ "Essential container in task exited" ], "lastStatus": [ "STOPPED" ] } }
这个配置会匹配所有以arn:aws:ecs:us-east-1:*********:task-definition/test-definition-task:开头的任务定义ARN,不管后面的修订号是多少。
方案二:直接匹配任务定义家族(推荐)
ECS任务状态变更事件的detail字段中,自带taskDefinitionFamily(任务定义家族名)和taskDefinitionRevision(修订号)字段,直接匹配家族名就能覆盖该家族下的所有修订号,逻辑更清晰:
{ "detail-type": [ "ECS Task State Change" ], "source": [ "aws.ecs" ], "detail": { "taskDefinitionFamily": [ "test-definition-task" ], "stoppedReason": [ "Essential container in task exited" ], "lastStatus": [ "STOPPED" ] } }
这种方式不需要拼接ARN,直接通过任务家族名匹配,更简洁也更不易出错。
内容的提问来源于stack exchange,提问作者gcpdev-guy
相关产品推荐
相关产品推荐

