概要
GCPではアラートの通知チャネルとしてメールやSlack、PagerDutyなどを指定できます。
サポートされている通知チャネル一覧は以下のAPIにて確認できます。
Method: projects.notificationChannelDescriptors.list
APIを確認すると、2023/12/3時点でPagerDutyはベータ版ではあるものの通知チャネルとして利用できます。しかし、Terraformの通知チャネルリソースのドキュメント(google_monitoring_notification_channel)にはPagerDutyのサンプルが載っていません。
この記事ではPagerDutyをTerraform管理にする手順を紹介します。
前提
- PagerDutyの秘密情報はSecret Managerに保存しBerglas経由でTerraformに渡します
手順
1. PagerDutyのサービスを作成する
作成時にIntegrationsとしてEvents API V2
を選択。サービス作成後にIntegration Key控えておきます。
2. Secret ManagerにPagerDutyの秘密情報を保存
Secret Managerでシークレットを作成し、1.で控えたKeyをシークレットの値
として保存します。
3. Terraform定義を作成
秘密情報が保存されているSecretを変数として指定し、通知先チャネルを作成します。ディレクトリやファイル名は任意のもので大丈夫です。
※providerやbackendの設定方法についての説明は省略します。
export TF_VAR_pagerduty_service_key=sm://[project-name]/pagerduty_service_key
variable "pagerduty_service_key" {
description = "PagerDuty Service Key"
}
resource "google_monitoring_notification_channel" "pagerduty" {
display_name = "PagerDuty" # 任意
type = "pagerduty"
sensitive_labels {
service_key = var.pagerduty_service_key
}
}
4. 通知先チャネルを作成する
terraform apply
コマンドを実行し、通知先チャネルのリソースを作成します。
berglas exec -- terraform apply
5. 任意のアラートポリシーに通知先チャネルPagerDutyを紐付ける
作成した通知先チャネルPagerDutyを任意のアラートポリシーのnotification_channels
に設定します。
resource "google_monitoring_notification_channel" "pagerduty" {
display_name = "PagerDuty" # 任意
type = "pagerduty"
sensitive_labels {
service_key = var.pagerduty_service_key
}
}
resource "google_monitoring_alert_policy" "hoge" {
display_name = "hoge"
conditions {
...
}
notification_channels = [google_monitoring_notification_channel.pagerduty] # <- PagerDutyを通知先として指定
}
6.アラートポリシーを作成する
terraform apply
コマンドを実行し、通知先チャネルのリソースを作成します。
berglas exec -- terraform apply