AWS事件桥:捕获所有事件的模式

16

我想在Eventbridge中部署一个AWS事件规则,该规则会被所有事件触发,不进行任何过滤。

我尝试了以下模式,但都没有成功。

{
source: ["*"]
}

根据文档,您不能将模式留空。此外,未包含在模式中的任何字段都被通配符覆盖,这意味着它们可以是任何值。

我已经阅读了一些文章,称Eventbridge可以替代SNS和SQS等服务,但如果没有这些更精细的控制,我认为这不可能发生。

谢谢


3
“source”: [{“prefix”: “”}]的意思是什么? - Marcin
我会试一下这个!看起来很有前途! - Harry Daniels
1
@Marcin,使用内容过滤器的空源前缀起作用了。谢谢! - Harry Daniels
很高兴听到这个。如果您不介意的话,我会回答并做好未来参考的准备。 - Marcin
6个回答

28
基于评论。
解决方案是使用空的前缀来匹配所有事件:
{
  "source": [{
    "prefix": ""
  }]
}

1
这个JSON对我来说不起作用,但是这个JSON可以:{"source": [{"prefix": ""}]} - Sunny Patel
@SunnyPatel 谢谢。我看到缺少引号了。我会更新答案。 - Marcin
@Marcin,有没有办法让它与CDK一起工作?在CDK中,resourcestring[]。所以这不起作用,因为{prefix: string}不能分配给类型字符串。 - chepukha
1
@chepukha,如果您查看Tim Bray的版本0答案,似乎对CDK很有效。 - fusion2004

4
对于TypeScript中的CDK,您可以使用as any[]提供匹配模式:
import * as cdk from 'aws-cdk-lib';

const catchAllRule = new cdk.aws_events.Rule(stack, 'CatchAllRule', {
    targets: [...],
    eventBus: ...,
    eventPattern: {
        source: [ { prefix: ''} ] as any[]
    }
});

生成此 CloudFormation:
  EventId:
    Type: AWS::Events::Rule
    Properties:
      EventBusName:
        Ref: ...
      EventPattern:
        source:
          - prefix: ""
      State: ENABLED

这在 TypeScript 中有效。在其他语言中,您可能需要使用逃生口并覆盖该属性。
参考资料: 相关问题:

3

我最喜欢的是{"version":["0"]}


那对于某些事件来说,有一天不会变成假吗? - Adrian Baker

2

0
使用无服务器框架,您可以使用以下事件模式从总线 eventBusName 接收您帐户的所有事件,其ID为accountID:
  - eventBridge:
      eventBus: arn:aws:events:${aws:region}:${aws:accountId}:event-bus/eventBusName
      pattern:
        account: ["accountID"]

0
对于任何正在寻找CDK-Python版本的人来说,可以通过以下方式实现:
event_pattern=aws_events.EventPattern(
    source=aws_events.Match.prefix(""),  # Do not filter anything
)

这遵循了在此回答中解释的前缀方法(https://dev59.com/FVIG5IYBdhLWcg3w419n#62407802)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接