amazon-web-services - 如何过滤Elasticache发送的SNS消息?

标签 amazon-web-services amazon-sns amazon-elasticache

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

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

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"
}

最佳答案

对于那些像我一样来到这里的人来说,在 2023 年,现在可以过滤掉弹性疼痛事件

您现在可以设置订阅过滤器策略,使其过滤器策略范围为消息正文,并且您可以将策略设置为如下所示

{
  "ElastiCache:SnapshotComplete": [
    {
      "exists": false
    }
  ]
}

这将过滤掉消息正文中包含“ElastiCache:SnapshotComplete”的所有事件

如果你使用 terraform,它是这样的

resource "aws_sns_topic_subscription" "sns_subscription" {
  filter_policy = jsonencode({
    "ElastiCache:SnapshotComplete" = [{ "exists" : false }]
  })
  filter_policy_scope = "MessageBody"
}

关于amazon-web-services - 如何过滤Elasticache发送的SNS消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51629189/

相关文章:

redis - 无法访问 Redis(已启用集群模式)集群的端点

amazon-web-services - 在 CloudFormation 模板中设置可变数量的 CloudWatch 警报

amazon-web-services - 用于 AWS Elasticache 的 JAVA API

linux - 如何将多个文件下载、解压并直接传输到一个 s3 存储桶中?

php - 使用 Laravel Mail 类通过 AWS SES 发送电子邮件

javascript - 我该如何删除 JSON 中的特定字段以进行测试,然后在另一个测试中重新加载 JSON,而不缓存删除内容?

amazon-web-services - 使用 AWS Lambda 函数订阅 Amazon SNS 主题?

amazon-web-services - 通过 Terraform 添加 SNS 过滤策略

scala - 将 DynamoDB 与 Scala 结合使用

sql - 如何将 SQL Server RDS 备份导入 SQL Server Linux Docker 实例?