如何过滤 Elasticache 发送的 SNS 消息?

How to filter SNS message sent by Elasticache?

我需要使用 SNS + Pagerduty 监控 Elasticache 复制组。 问题是 Elasticache 将所有事件发送到已配置的 sns arn,而不区分它是 ElastiCache:SnapshotFailed 之类的严重事件还是 ElastiCache:CacheClusterParametersChanged.

之类的正常事件

我试图将过滤策略附加到主题的订阅中,不幸的是,过滤仅适用于包含 "MessageAttributes" 字段如 https://docs.aws.amazon.com/sns/latest/dg/message-filtering.html 中所述。所以它对我不起作用。

Elasticache 发送的消息是这样的:

{
  "Type" : "Notification",
  "MessageId" : "93cc4ffe-bbd7-521e-8dd1-1c25d437dc1b",
  "TopicArn" : "arn:aws:sns:eu-central-1:custid:redis-monitor-a",
  "Message" : "{\"ElastiCache:SnapshotComplete\":\"redis-a-001\"}",
  "Timestamp" : "2018-08-01T08:21:52.610Z",
  "SignatureVersion" : "1",
  "Signature" : "aaabbbccc",
  "SigningCertURL" : "xxxbbbzzz",
  "UnsubscribeURL" : "yyyzzzaaa"
}

正如您正确指出的那样,SNS 消息过滤是基于消息属性工作的。

所以基本上,如果 elasticache 没有设置任何 MessageAttributes,那么就无法进行消息过滤

留给你的唯一选择是阅读订阅者中的消息,然后忽略那些你不想要的