2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

terraformAdvent Calendar 2019

Day 22

Terraformerを利用してDatadog Dashboardをmodule化するのがすごい簡単だった話

Posted at

はじめに

これはterraform Advent Calendar 2019の22日目の記事です。
同日空いていたので、この記事とクロスポストしようとしてしまったのですが、Qiita的にダメだったので、記事内で書いたダッシュボード用のTerraformリポジトリを作るにあたって初めてTerraformerを利用してみたところ、ものすごい簡単にDatadogのDashboardがmodule化できた話を書きます。
※横着しようとしたのがダメでした。。。。。。。

Terraformerとは?

AWS/GCP/Datadogなどの環境設定をTerraformのtfコード化してくれるすばらツールです。
自分はこちらで初めて知り、使ってみたいなって思い続けて、Datadogのダッシュボードをコード化するにあたって利用しました。

Datadog DashboardのTerraform module化

流れとしてはものすごいシンプルです。

    1. テンプレート化するための元となるダッシュボードをTerraformerでインポートする
    1. インポートし作成されたtfコード内で、変数化すべきところを変数化し、module化する
    1. それを各サービス用のディレクトリから呼び出して、ダッシュボードを作成する

1の部分は、terrafomerのサンプルのように
./terraformer import datadog --resources= dashboard --filter=datadog_dashboard=[コード化したいダッシュボードのID] --api-key=[API key] --app-key[Applicationn key]
とするだけでものすごい簡単でした。
メルペイさんのこちらの記事では、Dynamic Blockへの書き換えを行ったりしていたのですが、自分の場合はそのようなことはしていません。
理由としては下記の通りです。

  • 提供するダッシュボードは、Datadog自体に慣れていないことも考えられる各サービス向けに提供するテンプレートであり、作成後の編集は各サービスにお任せしている
  • 元々、Datadog Agent用に共通のタグ設計を行っており、変数化する項目がサービス識別向けのタグ、環境定義のタグの2種類程度だった

そのため、modules内もシンプルになりました。

modules/datadog_dashboard/
├── dashboard_list.tf             # ダッシュボードリストを定義するファイル
├── host_deep_dive_dashboard.tf   # 障害対応時など各ホストを深掘りしてメトリクスみるためのダッシュボード
├── output.tf                     # terraform apply後にダッシュボードやダッシュボードリストをアウトプットするためのファイル
├── service_dashboard.tf          # 各サービス向けのダッシュボードのテンプレート
└── variables.tf                  # 変数定義

output.tfですが、terraformはapplyするまで作成されるリソースのIDがわからないため、applyとあわせてURL確認できるようにこのようにしています。
中身もシンプルです。

output "host_deep_dive_dashboard_id" {
  value = "${datadog_dashboard.host_deep_dive_dashboard.id}"
}

output "service_dashboard_id" {
  value = "${datadog_dashboard.service_dashboard.id}"
}

output "service_id_dash_list_id" {
  value = "${datadog_dashboard_list.service_id_dash_list.id}"
}

これをmodules呼び出し側でこのようにさらにoutputしつつ、URLを生成しています。

output "host_deep_dive_dashboard_url" {
  value       = "https://${var.datadog_url}/dashboard/${module.datadog_dashboard.host_deep_dive_dashboard_id}"
  description = "host deep dive dashboardのURL"
}

output "service_dashboard_url" {
  value       = "https://${var.datadog_url}/dashboard/${module.datadog_dashboard.service_dashboard_id}"
  description = "service dashboardのURL"
}

output "service_dashboard_list_url" {
  value       = "https://${var.datadog_url}/dashboard/lists/manual/${module.datadog_dashboard.service_id_dash_list_id}"
  description = "dashboard listのURL"
}

終わりに

ダッシュボード用のterraformでoutput内容を加工し、URL生成を行う、みたいなことを初めて行ったのですが、他でも利用できそうなので、今後はもっとterraform outputも活用していきたいな、と思う所存でした。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?