🙄
Datadogのsynthetics_testをTerraformで作成する時の注意点
Terraform では provider 経由で様々なクラウドサービスの設定を管理することができます。
AWS や Azure などがよく知られていますが、監視サービスとして有名な Datadog についても設定を terraform で管理することができます。
そのなかで、synthetics_test の作成を Terraform で行った際にハマったことがあるので、簡単に記述します。
synthetics_test の monitor 定義を datadog_monitor 経由で作成しようとするとエラーになる
synthetics_test を Datadog の画面から作成すると、Terraform 視点で見ると以下2つのリソースが作成されます。
-
datadog_synthetic_test
-
datadog_monitor
- https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/monitor
- Synthetics Test を素にした監視設定
なので、Terraform でイチから定義を書く時には、上記2つのリソースについて定義を書けば良い、というふうに思いがちです。
ただし、これは Datadog API の仕様で、Synthetic Test 関連の datadog_monitor を直接作成することはできません。もし実施しようとすると、以下のようなエラーが表示されます。
╷
│ Error: error creating monitor from https://api.datadoghq.com/api/v1/monitor: 400 Bad Request: {"errors": ["Cannot directly update a Synthetics Monitor, use Synthetics API instead."]}
│
│ with datadog_monitor.synthetic_test_on_sada_com,
│ on monitor_synthetic_ssl.tf line 1, in resource "datadog_monitor" "synthetic_test_on_sada_com":
│ 1: resource "datadog_monitor" "synthetic_test_on_sada_com" {
│
╵
つまり、Synthetic Test 関連の Monitor 定義は、Synthetic Test の作成をすると自動的に行われるようになっており、一般的な monitor の API 経由では作成できない、ということのようです。
同じ理由で、terraform の datadog_monitor リソース経由で作成することもできない、ということになります。
解決策
身も蓋もないですが、
- synthetic_test の datadog_monitor については、terraform で管理しない
- synthetic_test 作成時に自動的に作られるのに任せる。
というのが解決策になります。
Discussion