目的
Datadogのダッシュボードをシステム毎にいっぱい作らなければいけないけど、いちいちポチポチやるのはとてもめんどくさい。かと言ってゼロからTerraformで作るのは大変そうという人向けのちょっとだけ簡単になる作り方です。
作り方
API Key, Application Keyの取得
Terraformからダッシュボードを作成するのに必要なのでコンソールから作成しておきます。
テンプレートとなるダッシュボード作成
サービス毎に横展開できるようなテンプレートとなるダッシュボードをコンソールから作成します。完成したらURLに含まれるダッシュボードIDを控えておきます。
Terraformの設定、初期化
terraform-provider-datadogの設定、テンプレートを読み込むリソースを定義しておきます
terraform { required_version = "~>0.12.24" } provider "datadog" { version = "v2.7.0" api_key = "[YOU_API_KEY]" app_key = "[YOUR_APPLICATION_KEY]" } resource "datadog_dashboard" "template" {}
あとはterraform initしておきます
terraform init
テンプレートを取り込み、hcl形式で表示
terraform importで作成したテンプレートをtfstateに取り込みます
> terraform import datadog_dashboard.template 5kx-kxj-r4q datadog_dashboard.template: Importing from ID "5kx-kxj-r4q"... datadog_dashboard.template: Import prepared! Prepared datadog_dashboard for import datadog_dashboard.template: Refreshing state... [id=5kx-kxj-r4q] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform.
terraform showでhcl形式で取り込んだテンプレートを表示できます。
> terraform show # datadog_dashboard.template: resource "datadog_dashboard" "template" { id = "5kx-kxj-r4q" is_read_only = false layout_type = "ordered" notify_list = [] title = "template" widget { layout = {} query_value_definition { autoscale = true precision = 2 time = {} title = "Running task count" request { aggregator = "last" q = "avg:aws.ecs.service.running{*}" } } } widget { layout = {} timeseries_definition { show_legend = false time = {} title = "CPU Usage (%)" request { display_type = "line" q = "avg:system.cpu.user{*}" style { line_type = "solid" line_width = "normal" palette = "dog_classic" } } yaxis { include_zero = true max = "auto" min = "auto" scale = "linear" } } } widget { layout = {} note_definition { background_color = "white" content = <<~EOT # Title ## memo This is test note. EOT font_size = "14" show_tick = false text_align = "left" tick_edge = "left" tick_pos = "50%" } } }
あとはこれをコピペしてダッシュボードを作成してあげればOKです。出力をファイルに出したいときは -no-color
オプションを付与してあげます。僕の記憶では少し前までterraform showはtfstateの中身をそのまま表示するだけだったと思うのでとても便利になりました。
以上です。