通过Pulumi创建的EventBridge Rule不生效排查求助
问题:Pulumi创建的EventBridge规则无法匹配ECS停止事件(手动创建正常)
我需要创建一条EventBridge Rule,用于检测停止的ECS Task并将相关信息发送至SNS Topic。手动创建该规则时可正常工作,但通过Pulumi创建相同规则时无法匹配任何事件。对比导出的CloudFormation模板,两者完全一致,请问可能存在哪些差异?该如何排查或修复?
手动导出的CloudFormation模板
AWSTemplateFormatVersion: '2010-09-09' Description: CloudFormation template for EventBridge Rule ecsSlackAlertsEventRule Resources: Rule88730153: Type: AWS::Events::Rule Properties: Name: ecsSlackAlertsEventRule EventPattern: >- {"detail":{"clusterArn":["arn:aws:ecs:us-west-2:xxxxxxxxxxx:cluster/ecs-14f72ee"],"lastStatus":["STOPPED"]},"detailType":["ECS Task State Change"],"source":["aws.ecs"]} State: ENABLED EventBusName: default Targets: - Id: xxxxxxxxxxx-ad6a-46d2-912f-071ec8da74f2 Arn: Fn::Sub: >- arn:${AWS::Partition}:sns:${AWS::Region}:${AWS::AccountId}:ecs-slack-notifications Parameters: {}
Pulumi代码
const ecsAlertEventRule = new aws.cloudwatch.EventRule("ecsSlackAlertsEventRule", { name: "ecsSlackAlertsEventRule", eventBusName: "default", eventPattern: ecsCluster.arn.apply(arn => { return JSON.stringify({ source: ["aws.ecs"], detailType: ["ECS Task State Change"], detail: { clusterArn: [arn], lastStatus: ["STOPPED"], } }) }), }); const ecsAlertEventTarget = new aws.cloudwatch.EventTarget("ecsSlackAlertsEventTarget", { rule: ecsAlertEventRule.name, arn: slackNotificationsSNSTopic.arn, });
排查与修复方向
- 检查Event Pattern的字符串格式差异:手动CF模板里的
detailType值带有换行("ECS\nTask State Change"),而Pulumi通过JSON.stringify生成的是无换行的"ECS Task State Change"。EventBridge的事件匹配对字符串完全匹配敏感,这种细微格式差异会直接导致匹配失败。 - 验证Pulumi生成的实际Event Pattern:登录AWS控制台查看Pulumi创建的规则详情,确认Event Pattern的实际内容是否和手动创建的一致。可以先在Pulumi代码里硬编码cluster ARN测试,排除
apply函数的潜在问题。 - 补全SNS Topic的权限策略:手动创建规则时,AWS会自动给SNS Topic添加允许EventBridge推送消息的权限,但Pulumi创建的EventTarget不会自动配置这一步。需要手动添加Topic权限:
const snsTopicPolicy = new aws.sns.TopicPolicy("ecsSlackTopicPolicy", { arn: slackNotificationsSNSTopic.arn, policy: slackNotificationsSNSTopic.arn.apply(topicArn => JSON.stringify({ Version: "2012-10-17", Statement: [{ Effect: "Allow", Principal: { Service: "events.amazonaws.com" }, Action: "sns:Publish", Resource: topicArn, }] })), }); - 确认规则启用状态:虽然Pulumi默认创建的规则是启用状态,但还是要在控制台再次确认,避免因配置疏漏导致规则处于禁用状态。
- 核对事件总线关联:确保Pulumi创建的规则确实绑定到
default事件总线,没有因参数错误关联到其他自定义总线。
内容的提问来源于stack exchange,提问作者mitroo
相关产品推荐
相关产品推荐

