You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:55:04