これはなに

Datadog にサイトという概念が爆誕していてはまった件について書いています。

サイト?

AWSでいうところのリージョンのようにDatadogにもサイトという概念があり、地域ごとにデータセンターが分かれているとのこと。
https://docs.datadoghq.com/ja/getting_started/site/

以前は上のページでいうところの US1 しかなかったのでなにも意識することがなかったのですが、東京(AP1)が2023年4月に登場していたらしい。(他のサイトがいつできていたかは謎)
最近 NewRelic ばっかりだったので気がついていませんでした。

サイトが分かれるとどうなるかというと、ブラウザでアクセスする先のURLや、エージェントがデータを投げる先のエンドポイントがそれぞれ違うということになります。
アカウントや、格納されるデータも完全に独立しているらしい。

自分はとある案件でお客様が契約したDatadogアカウントで東京がチョイスされていることに気が付かずはまってしましました。

なにがはまる?

いままで単一のサイトしかなかったので、アクセス先を意識する必要がなかったのですが、分かれたことにより下記のようなことが発生しました

ログイン先を変える必要がある

https://サイト名.datadoghq.com/account/login?redirect=f

というログイン先URLを指定する必要があります。
アカウント自体がサイトごとに独立しているので、同じメールアドレスをユーザーとして入ってもOrganizationなどが見えないので、このことを知らないと???ということになってしまいます。

ログイン先のサイトは画面上で変更することもできます。
下記は AP1 を選択している場合

Terraform の設定を変える必要がある

一番はまったのがこれで、1時間くらい時間を無駄にしました。

Terraform の Datadog Provider の設定の中で api_url というパラメータがあって、APIを叩く際のエンドポイントが指定できるのですが、従来US1しかなかったころに作成していたTFのソースだと明示的に api_url を指定していなかったので、その頃作成したものを AP1 で使おうとするとデフォルト値である https://datadoghq.com へアクセスにいってしまい結果エラーが発生するということになります。

下記はAP1 で作成したAPIキーおよびAPPキーを使ってapi_urlを指定していないTFソースを対象に plan を実施したときの結果です。
(異なるサイトのキーを突っ込んでるからForbiddenになっていると思われる)

 $ terraform plan
╷
│ Error: 403 Forbidden
│ 
│   with provider["registry.terraform.io/datadog/datadog"],
│   on main.tf line 12, in provider "datadog":
│   12: provider "datadog" {
│ 

下記のような設定をすることにより解決しました。

変数を定義するファイルに下記を記述

variable "datadog_api_url" {
  type    = string
  default = "https://ap1.datadoghq.com"
}

provider を定義するファイルに下記を記述

provider "datadog" {
  api_url = var.datadog_api_url
}

以上です。