Slide 1

Slide 1 text

Datadogのmonitorを Terraform管理に爆速で 移行する 2024/05/29 Japan Datadog User Group Meetup#4 kuroda naoki

Slide 2

Slide 2 text

自己紹介 - 株式会社サイバーエージェント23新 卒 - AI事業本部プリズムパートナーカン パニー所属 - 最近は、Datadogはもちろんのこ と、GoとかSnowflakeとかに興味が あります。 kuro @knkurokuro7

Slide 3

Slide 3 text

みなさん、Datadogのmonitor使ってま すか? Terraformで管理していますか?

Slide 4

Slide 4 text

Terraformで管理したい理由 - monitor自体をバージョン管理したい。 - コードの変更とmonitorを結びつけたい。 - 同じようなmonitorを複数作りすい形にしたい。 - 追加や削除を簡単にしたい。

Slide 5

Slide 5 text

どっちの方法がいい? - datadog_monitor として管理する。

Slide 6

Slide 6 text

どっちの方法がいい? - datadog_monitor_jsonとして管理する。

Slide 7

Slide 7 text

どっちの方法がいい? - datadog_monitorとして管理する。 - Terraform管理に移行するのが少し時間かかりそう。 - コメントを書くことができる。 - jsonに比べると見やすい。 - datadog_monitor_jsonとして管理する。 - Terraform管理に移行するのがすぐ終わる。 →ほぼjsonをUI画面からコピーするだけ。 - jsonなのでコメントを書けない。 - 量が多くなると管理しにくそう、見にくい。

Slide 8

Slide 8 text

スピーディにTerraform管理に 移行できるのであれば、 datadog_monitor の方が良さそう

Slide 9

Slide 9 text

Terraformに移行するためには? - import作業をする必要がある。 - terraform importコマンドでは、実際のリソースから、stateに反映することがで きる。 terraform import {ADDRESS} {ID} terraform import datadog_monitor.hoge 123456 - 宣言的に書きたいならimportブロックもある。

Slide 10

Slide 10 text

愚直な移行方法 1. 空のリソースをtfファイルに定義 resource "datadog_monitor" "hoge" { } 2. terraform import datadog_monitor.hoge 123456みたいなコマンドを叩く →Datadogの場合は、IDはmonitorのURLに含まれる数字 3. terraform state show datadog_monitor.hogeでstateを確認 4. stateを参考に、空のリソースを埋める。 5. terraform planで実際のリソースとの差分を確認。  →大量にmonitorがある場合かなり時間がかかりそう。。。

Slide 11

Slide 11 text

より速い移行方法 1. Terraformer(https://github.com/GoogleCloudPlatform/terraf ormer)を使う。 → terraformerコマンドでtfstate+tfファイルを自動生成 2. terraform plan -generate-config-out=〇〇を使う。 → importブロックからtfファイルを自動生成

Slide 12

Slide 12 text

1. Terraformerを使う Datadogの認証情報とかを環境変数に設定して、 terraform init terraformer import datadog --resources=monitor でいける。。。が、

Slide 13

Slide 13 text

1. Terraformerを使う 少し手のかかるポイント - terraformerにおいてterraformバージョンはv0.13を前提としているので、tfenvとか を使って切り替えてコマンドを叩く必要がある。 - moduleに対していきなりterraformerでimportできない。 - 不要な項目までtfファイルに反映される。 - importしたリソース名が意味のない文字列になる。 resource "datadog_monitor" "tfer--monitor_12345678" { } みたいな。

Slide 14

Slide 14 text

2. terraform plan -generate-config-out=〇〇を使う importブロックを定義して、 terraform plan -generate-config-out=generated.tfを叩くと、generated.tfに みたいなリソースが自動生成される。 最後にterraform plan & terraform applyでimportされる。

Slide 15

Slide 15 text

2. terraform plan -generate-config-out=〇〇を使う 少し手のかかるポイント - こちらもmodule構成のものをいきなり自動生成できない。 - 不要な項目までtfファイルに反映される。 - importブロックをあらかじめ定義する必要がある。 → terrafomerでimportしたリソース名を修正するより、importブロックを 定義する方が少し楽?

Slide 16

Slide 16 text

まとめ - datadog_monitorとして管理するのがおすすめ。 - 爆速でやりたいなら、Terraformer or terraform plan -generate-config-out=〇〇を使うのがおすす め。

Slide 17

Slide 17 text

おまけ:movedブロック - リファクタに使える。(https://developer.hashicorp.com/terraform/language/modules/develop/refactoring) - 宣言的に書くことができる。 - moduleに移行したい時や、リソース名を変更したいときに使える。 resource "datadog_monitor" "a" { 〜 }  👇 resource "datadog_monitor" "b" {  〜 } moved { from = datadog_monitor.a to = datadog_monitor.b }

Slide 18

Slide 18 text

参考文献 - Terraform Datadog monitor resources - datadog_monitor_json | Resources | DataDog/datadog | Terraform - Command: import | Terraform | HashiCorp Developer - GitHub - GoogleCloudPlatform/terraformer: CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code - Import - Generating Configuration | Terraform | HashiCorp Developer - Refactoring | Terraform | HashiCorp Developer