hene

hene.dev

Terraform で Slack 通知を設定

Terraform で Slack 通知を設定

Terraformgoogle_monitoring_notification_channel のリソースを作成するときにエラーが発生したため、その対処方法をまとめました。

発生したエラー

google_cloud_monitoring.tfgoogle_monitoring_notification_channel.project_name_noti_slack を追加。

# 略

resource "google_monitoring_notification_channel" "project_name_noti_slack" {
  display_name = "project_name_noti"
  type         = "slack"

  labels = {
    auth_token : ""
    channel_name : "#project_name_noti"
    team : "PROJECT_NAME"
  }
}

# 略

$ terraform apply を実行すると、以下のエラーが発生。

$ terraform apply

略

╷
│ Error: Error creating NotificationChannel: googleapi: Error 400: Field notification_channel.labels[auth_token] had an invalid value: Value must NOT be empty if provided.
│
│   with google_monitoring_notification_channel.project_name_noti_slack,
│   on google_cloud_monitoring.tf line 999, in resource "google_monitoring_notification_channel" "project_name_noti_slack":
│  999: resource "google_monitoring_notification_channel" "project_name_noti_slack" {
│
╵

対応方法

以下の手順でエラーを解消しました。

  1. Google Cloud Console でリソースを一旦作成
  2. Terraform で、1 で作成したリソースを import

Google Cloud Console でリソースを一旦作成

https://console.cloud.google.com/monitoring/alerting/notifications?referrer=search&project={{project_name}} を開いて、リソースを作成する。

オブザーバビリティ -> アラート -> 通知チャンネル

通知チャンネル設定

Slack -> Add New

Slack 通知設定

Allow

OAuth

Add Slack Channel で、チャンネル名表示用の名前 を入力し、Save

Slack チャンネル設定

Terraform で、1 で作成したリソースを import

google_monitoring_notification_channel | Resources | hashicorp/google | Terraform | Terraform Registry に記載の方法で、リソースを import できます。

Import

NotificationChannel can be imported using any of these accepted formats:

  • {{name}}

In Terraform v1.5.0 and later, use an import block to import NotificationChannel using one of the formats above. For example:

import {
  id = "{{name}}"
  to = google_monitoring_notification_channel.default
}

When using the terraform import command, NotificationChannel can be imported using one of the formats above. For example:

$ terraform import google_monitoring_notification_channel.default {{name}}

今回は、import block を利用しました。

import.tf を作成

https://console.cloud.google.com/monitoring/alerting/notifications?referrer=search&project={{project_name}} を開いて、一番左のアイコンをクリックするとリソースの id をコピーできます。

リソースの id をコピー

import.tf を作成。

import {
  id = "projects/{{project_name}}/notificationChannels/0000000000000000000"
  to = google_monitoring_notification_channel.project_name_noti_slack
}

$ terraform plan でインポートされるリソースを確認

$ terraform plan

略

  # google_monitoring_notification_channel.project_name_noti_slack will be imported
    resource "google_monitoring_notification_channel" "project_name_noti_slack" {
        description         = null
        display_name        = "project_name_noti"
        enabled             = true
        force_delete        = false
        id                  = "projects/{{project_name}}/notificationChannels/0000000000000000000"
        labels              = {
            "auth_token"   = null
            "channel_name" = "#project_name_noti"
            "team"         = "PROJECT_NAME"
        }
        name                = "projects/{{project_name}}/notificationChannels/0000000000000000000"
        project             = "{{project_name}}"
        type                = "slack"
        user_labels         = {}
        verification_status = null

        timeouts {}
    }

Plan: 1 to import, 99 to add, 0 to change, 0 to destroy.

$ terraform apply で反映

$ terraform apply

略

import.tf を削除

$ terraform applyimport が完了すると import.tf は必要なくなるため削除。

参考

関連記事