我已阅读过 CloudWatch 警报可用于触发 PagerDuty 警报以及在 CloudWatch 警报恢复到正常状态时自动解决 PD 警报。
基于 CloudWatch Alerts 的 SNS 主题似乎具有包含 PagerDuty 期望进行此类集成的 message{} 成员的负载。
我想将 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 中无缝运行。在这种情况下,管理员不会将消息转发到验证集成的位置。