kakakakakku blog

Weekly Tech Blog: Keep on Learning!

CloudWatch Alarm を SNS 経由で PagerDuty に通知する

Amazon CloudWatch Alarm で検出したアラームを PagerDuty に通知する仕組みを Terraform で構築する機会があって,検証用に実装した Terraform コードをまとめておく.設定自体は難しくなくて Amazon CloudWatch AlarmAmazon SNS TopicPagerDuty のように連携する❗️

設定に関しては以下のドキュメントに詳しく載っている📝 現在だと大きく Event Orchestration を使う方法と Amazon CloudWatch Integration を使う方法がある.今回はシンプルに Amazon CloudWatch Integration を使う前提とする.

support.pagerduty.com

1. PagerDuty: Amazon CloudWatch Integration

まずは PagerDuty で Amazon CloudWatch Integration を追加する.特に設定をする必要はなく,表示される https://events.pagerduty.com/integration/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/enqueue という Integration URL を控えておけば OK👌

デフォルトだと PagerDuty の Amazon CloudWatch Integration は Alarm Name でインシデントの重複排除をしてくれるけど,判断基準を変更する場合は設定値 Correlate events byAlarm Name から変更しておく.

2. Amazon SNS Topic

次に Amazon SNS Topic(標準)を構築する.Terraform だと aws_sns_topic を使う.

resource "aws_sns_topic" "incidents" {
  name = "incidents"
}

Amazon SNS Topic と PagerDuty を連携するには HTTPS でサブスクリプションを追加すれば OK👌 Terraform だと aws_sns_topic_subscription を使う.今回は endpoint に Amazon CloudWatch Integration の Integration URL を直接指定してるけど Terraform 変数にするなどご自由に❗️

resource "aws_sns_topic_subscription" "pagerduty" {
  topic_arn = aws_sns_topic.incidents.arn
  protocol  = "https"
  endpoint  = "https://events.pagerduty.com/integration/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/enqueue"
}

\( 'ω')/ 簡単だ〜