🙄

Datadogのsynthetics_testをTerraformで作成する時の注意点

2022/08/10に公開

Terraform では provider 経由で様々なクラウドサービスの設定を管理することができます。
AWS や Azure などがよく知られていますが、監視サービスとして有名な Datadog についても設定を terraform で管理することができます。

そのなかで、synthetics_test の作成を Terraform で行った際にハマったことがあるので、簡単に記述します。

synthetics_test の monitor 定義を datadog_monitor 経由で作成しようとするとエラーになる

synthetics_test を Datadog の画面から作成すると、Terraform 視点で見ると以下2つのリソースが作成されます。

なので、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