Pagerduty AWS 集成如何订阅基于非警报的 SNS 主题

问题描述 投票:0回答:1

我已阅读过 CloudWatch 警报可用于触发 PagerDuty 警报以及在 CloudWatch 警报恢复到正常状态时自动解决 PD 警报。

基于 CloudWatch Alerts 的 SNS 主题似乎具有包含 PagerDuty 期望进行此类集成的 message{} 成员的负载。

https://support.pagerduty.com/main/docs/amazon-cloudwatch-integration-guide#why-are-my-cloudwatch-events-not-triggering-incidents-in-pagerduty

我想将 SNS 主题订阅绑定到 PagerDuty CloudWatch API 集成,该集成不是基于 CloudWatch 警报,而是基于消息属性中写入该主题的任何其他内容。

例如,当复制任务失败时,DMS 会将消息写入 SNS 主题(不是基于 CloudWatch 警报)。当为这些 DMS SNS 主题创建 PagerDuty 订阅时,永远不会收到该消息。

有没有办法强制执行此操作,或者消息是否必须基于 CloudWatch 警报才能获得预期的负载?

我能想到的唯一替代方案是将 DMS SNS 主题订阅到 Lambda 并创建一个虚假的 CloudWatch 警报负载,然后将其发送到另一个具有 PagerDuty 端点订阅的 SNS 主题。

有更好的想法吗?我可以轻松地将基于非警报的 SNS 主题传递到 PagerDuty 吗?

Terraform 设置

locals{
  pagerduty_alerts_endpoint = "https://events.pagerduty.com/integration/xxxx/enqueue"
}

resource "aws_sns_topic" "dms_repl_tasks_topic_pagerduty" {

    name     = "dms-repl-tasks-topic-pagerduty-${local.namespace_coalesce}"  
    delivery_policy = local.sns_delivery_policy_pagerduty
    tags     = merge(local.common_tags, local.migrated_tags, tomap({ "Name" = "dms-repl-tasks-topic-pagerduty-${local.namespace_coalesce}" }))

    depends_on = [
      aws_dms_replication_instance.dms_instance_on_prem_to_rds
    ]
}

resource "aws_sns_topic_subscription" "repl_task_notification_pagerduty_subscription" {
   count = "${local.pagerduty_alerts_endpoint != "" ? 1 : 0}"
   topic_arn = aws_sns_topic.dms_repl_tasks_topic_pagerduty.arn
   protocol    = "https"
   endpoint    = "${local.pagerduty_alerts_endpoint}"
   endpoint_auto_confirms = true

   depends_on = [
     aws_sns_topic.dms_repl_tasks_topic_pagerduty
   ]
}

resource "aws_dms_event_subscription" "event_subscription_repl_task_direct" {

enabled             = true
event_categories    = ["creation", "failure", "deletion", "state change", "configuration change"]
name                = "dms-event-sub-repl-task-direct-${local.namespace_coalesce}"
sns_topic_arn       = aws_sns_topic.dms_repl_tasks_topic.arn
source_ids          = [for ts in aws_dms_replication_task.onprem_to_rds_replication_task : ts.replication_task_id]
source_type         = "replication-task"
tags                = merge(local.common_tags, tomap({ "Name" = "dms-event-sub-repl-task-direct-${local.namespace_coalesce}" }))

depends_on = [
  aws_dms_replication_task.onprem_to_rds_replication_task,
  aws_sns_topic.dms_repl_tasks_topic,
  aws_sns_topic_subscription.repl_task_notification_email_subscription
]

timeouts {
    create = "2m"
    delete = "2m"  
    update = "2m"
   }
}   

编辑:以上所有内容都可以在 PagerDuty 中无缝运行。在这种情况下,管理员不会将消息转发到验证集成的位置。

terraform amazon-cloudwatch amazon-sns pagerduty
1个回答
0
投票

通过 SNS 进行集成工作,无需警报元数据。 PagerDuty 管理员未将消息配置为转发到进行集成测试的位置。 :/

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.