对 Amazon SQS 事件源使用事件筛选
您可以使用事件筛选,控制 Lambda 将流或队列中的哪些记录发送给函数。有关事件筛选工作原理的一般信息,请参阅 控制 Lambda 向您的函数发送的事件。
本节重点介绍 Amazon MSK 事件源的事件筛选。
Amazon SQS 事件筛选基础知识
假设 Amazon SQS 队列包含以下 JSON 格式的消息。
{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }
此队列的示例记录将如下所示。
{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }
要根据 Amazon SQS 消息的内容进行筛选,请使用 Amazon SQS 消息记录中的 body
键。假设您只想处理 Amazon SQS 消息中 RequestCode
为“BBBB”的记录。FilterCriteria
对象将如下所示。
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }
为了更清楚起见,以下是在纯 JSON 中展开的筛选条件 Pattern
的值。
{ "body": { "RequestCode": [ "BBBB" ] } }
您可以使用控制台、AWS CLI 或 AWS SAM 模板添加筛选条件。
假设您希望函数只处理 RecordNumber
大于 9999 的记录。FilterCriteria
对象将如下所示。
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }
为了更清楚起见,以下是在纯 JSON 中展开的筛选条件 Pattern
的值。
{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }
您可以使用控制台、AWS CLI 或 AWS SAM 模板添加筛选条件。
对于 Amazon SQS,消息正文可以是任何字符串。但如果您的 FilterCriteria
期望 body
为有效的 JSON 格式,则可能会导致问题。反之亦然:如果传入的消息正文为 JSON 格式,但筛选条件期望 body
为纯字符串,这可能会导致出现意外行为。
要避免此问题,请确保 FilterCriteria
中的正文格式与您从队列中收到的消息中的 body
的期望格式一致。在筛选消息之前,Lambda 会自动评估传入消息正文的格式以及 body
的筛选条件模式的格式。如果不一致,Lambda 将会删除此消息。下表汇总了此评估:
传入消息 body 格式 |
筛选条件模式 body 格式 |
导致的操作 |
---|---|---|
纯字符串 |
纯字符串 |
Lambda 根据您的筛选条件进行筛选。 |
纯字符串 |
数据属性中没有筛选条件模式 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
纯字符串 |
有效 JSON |
Lambda 将会丢弃消息。 |
有效 JSON |
纯字符串 |
Lambda 将会丢弃消息。 |
有效 JSON |
数据属性中没有筛选条件模式 |
Lambda 根据您的筛选条件进行筛选(仅限其他元数据属性)。 |
有效 JSON |
有效 JSON |
Lambda 根据您的筛选条件进行筛选。 |