如何过滤 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,那么就无法进行消息过滤
留给你的唯一选择是阅读订阅者中的消息,然后忽略那些你不想要的
我需要使用 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,那么就无法进行消息过滤
留给你的唯一选择是阅读订阅者中的消息,然后忽略那些你不想要的