Amazon CloudWatch Alarm で検出したアラームを PagerDuty に通知する仕組みを Terraform で構築する機会があって,検証用に実装した Terraform コードをまとめておく.設定自体は難しくなくて Amazon CloudWatch Alarm
→ Amazon SNS Topic
→ PagerDuty
のように連携する❗️
設定に関しては以下のドキュメントに詳しく載っている📝 現在だと大きく Event Orchestration を使う方法と Amazon CloudWatch Integration を使う方法がある.今回はシンプルに Amazon CloudWatch Integration を使う前提とする.
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 by を Alarm 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" }
\( 'ω')/ 簡単だ〜