跳至内容

如何使用 EventBridge 管道筛选事件?

2 分钟阅读
0

我想使用 Amazon EventBridge 管道从 AWS 源捕获事件并将该事件连接到目标。

简短描述

EventBridge 管道接收来自以下来源的事件数据:

  • Amazon DynamoDB 流
  • Amazon Kinesis 流
  • Amazon MQ
  • Amazon Managed Streaming for Apache Kafka (Amazon MSK) 流
  • 自托管式 Apache Kafka 流
  • Amazon Simple Queue Service (Amazon SQS) 队列

如果您将数据事件从其源发送到目标,则会产生资源开销并产生额外成本。目标必须处理所有数据事件并实现业务逻辑以丢弃不必要的事件。最佳做法是仅向目标发送特定的数据事件。

要在将筛选的事件发送到目标之前对其进行增强,请使用 API 目标或以下 AWS 服务:

  • Amazon API Gateway
  • AWS Lambda
  • AWS Step Functions

解决方法

**注意:**EventBridge 管道使用事件模式。每个 EventBridge 管道源都有包含核心消息或数据的字段。

使用筛选条件来减少开销

为了筛选源发送的事件,EventBridge 管道使用以下筛选条件:

  • Metadata(元数据)属性以 JSON 格式包含有关生成数据事件的源的信息。
  • Data(数据)属性包括来自源的数据事件的消息正文。消息正文的格式因来源而异。

Amazon SQS 队列发送的消息正文示例:

{    "key": "example-key-1",
    "tag": "eb-pipe-filter",
    "object name": "sampleimage-11.png",
    "sequencer": "617f0837b476e463",
    "Order Status": "Approved"
}

管道收到的事件示例:

{    "messageId": "c9652226-2d8f-49e9-9f06-beeb2a6f55ce",
    "receiptHandle": "AQEBoteuDChpmsb6765tA//hqtPta1W/utSYlmWuw3fjZnVvY+dxOUdj4cEjYZtLKGMGT4LUuvWbQPHb96Wwa+X0zUJo8ZiHC7dbul62hVbFTXjB7+cOKH91RXc3YMllpnd6nB3CNAOGIig6suCpEOGcrhTJ6dC45KoacROua1PIH454Ji8AP51TkQSnhkkeOJHInLHkvrd2sfoBo037kmMKJSo3kDgU7y92jbpJphRmijnNQX6gPQYSVifF3n3ApvSBMGQIUzQb65ZRLl6Mp2VPJQYF2RRjYShdrzhe3uON9H01m9f3LGcpL3yaX6yqFahfoEe3PiT6MMXHvIAaj+dKVSUqmnnk3n7X0n4WX1uFPgyjrI5KuJ64j2lf/dkcPMQEUPorjmagECmYpMrGlkBbZw==",
    "body": {
        "key": "example-key-1",
        "tag": "eb-pipe-filter",
        "object name": "sampleimage-11.png",
        "sequencer": "617f0837b476e463",
        "Order Status": "Approved"
    },
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1690589578649",
        "SenderId": "AIDAIMWXWRRSWVPYSJEH6",
        "ApproximateFirstReceiveTimestamp": "1690589578654"
    },
    "messageAttributes": {
        "Name": {
            "stringValue": "TestMessage",
            "stringListValues": [],
            "binaryListValues": [],
            "dataType": "String"
        }
    },
    "md5OfMessageAttributes": "62bd1c2ea8c5344caa6852a77543892d",
    "md5OfBody": "388e8d9be1776f61c0be0a089807afbc",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:ap-southeast-2:123456789012:test-sqs-source-pipe",
    "awsRegion": "ap-southeast-2"
}

**注意:**在前面的示例事件中,您无法使用 eventSourceeventSourceARNawsRegion 来创建事件模式,因为 EventBridge 会在轮询期间添加数据。

查看事件筛选模式的示例

事件筛选模式与元数据属性相匹配

以下事件筛选模式将管道接收到的事件与 attributes(属性)和 stringValue 元数据属性相匹配:

{  "attributes": {
    "ApproximateReceiveCount": ["1"]
  },
  "messageAttributes": {
    "Name": {
      "stringValue": ["TestMessage"]
    }
  }
}

事件筛选模式与数据属性相匹配

以下事件筛选模式与管道接收到的具有 Order Status(订单状态)数据属性和 Approved(已批准)值的事件相匹配:

{  "body": {
    "Order Status": ["Approved"]
  }
}

事件筛选模式与元数据和数据属性相匹配

以下事件筛选模式与管道接收到的具有 Order Status(订单状态)数据属性和 SenderId 元数据属性的事件相匹配:

{  "attributes": {
    "SenderId": ["AIDAIMWXWRRSWVPYSJEH6"]
  },
  "body": {
    "Order Status": ["Approved"]
  }
}

没有匹配项的事件筛选模式

以下事件筛选模式无法匹配管道接收到的事件,因为它包含 awsRegion 字段:

{  "body": {
    "Order Status": ["Approved"]
  },
  "awsRegion": ["ap-southeast-2"]
}

**注意:**EventBridge 在轮询期间添加数据时会添加 awsRegion 字段。尽管数据属性字段匹配,但事件筛选模式失败。

查看成功匹配的条件

如果您未正确配置传入消息正文和事件筛选模式,则 EventBridge 管道会丢弃该消息。

当您为事件的消息正文创建事件筛选模式时,该模式必须与源使用的格式相匹配。例如,SQS 的消息正文可以是纯字符串或 JSON 脚本。Kinesis 流和 DynamoDB 记录必须采用有效的 JSON 格式。自行管理的 Apache Kafka 流和 Amazon MQ 消息使用 UTF-8 编码的字符串,可以是纯字符串或 JSON 格式。

有关源及其筛选模式的详细信息,请参阅Amazon EventBridge 管道中的事件筛选

创建 EventBridge 管道

完成以下步骤:

  1. 打开 EventBridge 控制台
  2. 在导航窗格中,选择 Pipes(管道)。
  3. 选择 Create pipe(创建管道),然后输入管道的名称。
  4. (可选)对于 Description(描述),添加管道的描述。
  5. Build pipe(生成管道)选项卡上,选择源类型,然后配置源。
  6. 对于 Source(源),输入参数,然后选择 Next(下一步)。
  7. Sample event type(示例事件类型)下,选择 AWS events(AWS 事件)或 Enter my own(输入我自己的事件)。
  8. Event pattern(事件模式)下,输入所需的事件模式以筛选事件。
  9. (可选)选择 Test pattern(测试模式)。
  10. (可选)选择 Next(下一步)以导航到 Enrichment(扩展)。
  11. 选择 Next(下一步)以导航到 Target(目标)。
  12. Details(详细信息)下,对于 Target service(目标服务),从下拉列表中选择目标,然后输入目标资源信息。
  13. 配置管道设置。
  14. 选择 Create pipe(创建管道)。

相关信息

正确筛选 Amazon SQS 消息

正确筛选 Amazon Managed Streaming for Apache Kafka、自托管 Apache Kafka 和 Amazon MQ 消息

AWS 官方已更新 1 年前