最近、会社の方針でDatadog monitor と SLOのcodificationをしていました。
運用中のシステムであれば既にモニターもSLOもいくつか存在すると思いますが、既存のDatadogリソースを新規でコード化しterraformで作成した新しいモニターで置き換えるのは色々と不都合が生じます。
例えば、既存のモニターに紐付いたリソース、ダウンタイムの設定やドキュメント内のリンクなどがモニターの置き換えによって破壊されます。
リンクがどのモニターと紐付いていたのかはterraform apply
時のログなどから調査しないと復旧が困難でしょうし壊れている箇所をすべてリストアップするのは現実的ではありません。
なので、既存のdatadogリソースをterraform import
してかつそれらをコード化する作業が必要になってきます。
数十個のモニターを手作業でインポート&コード化していくのは現実的ではないので何かしらのツールが必要になってくるのですが、自分のケースではterraformer
というGoogleCloudPlatformが提供しているツールを利用してcodificationを達成しました。
github.com
なぜ、terraformer
かというとDatadogの公式ドキュメントでもこのツールを使ったリソースのimport方法が紹介されており特に不具合がないので紹介されているのだろうという安心感もあります。
docs.datadoghq.com
terraformer
はGo製のツールでインストールもhomebrewがサポートしているので特にハマるところはないでしょう。
$ brew info terraformer
terraformer: stable 0.8.15 (bottled), HEAD
CLI tool to generate terraform files from existing infrastructure
https://github.com/GoogleCloudPlatform/terraformer
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/terraformer.rb
License: Apache-2.0
==> Dependencies
Build: go ✘
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 1,537 (30 days), 4,094 (90 days), 12,486 (365 days)
install-on-request: 1,537 (30 days), 4,093 (90 days), 12,481 (365 days)
build-error: 0 (30 days)
$ brew install terraformer
terraformer
自体は直接terraformリソースを変更することはなくDatadog関連のリソースにアクセスしてそれをコードに落とし込んでくれます。
なので、Datadogのアプリケーションキーとシークレットキーさえあれば試すことは簡単です。
上述のDatadogのドキュメントだとそれらのキーを引数に取る方法でコマンドを実行していますが、コードを読むと環境変数で取れるようになっているので環境変数を使ってキーをセットするのがオススメです。
$ export DATADOG_API_KEY= YOUR_DATADOG_API_KEY
$ export DATADOG_APP_KEY= YOUR_DATADOG_APP_KEY
https://github.com/GoogleCloudPlatform/terraformer/blob/e00592e28377f32c38b5816dcb13487548ede24a/cmd/provider_cmd_datadog.go#L39-L40
こんな風に複数のタイプのリソースをまとめてコード化出来ます。":"
コロン区切りで同タイプの複数のリソースをまとめてコードに落とし込むことも出来ます。
$ terraformer import datadog --resources=monitor,dashboard --filter=monitor=1234,dashboard=abc-def-ghi
# 同タイプのリソースをまとめてコード化する例
$ terraformer import datadog --resources=monitor--filter=monitor=1234:5678:9012
生成されるterraformリソースはDatadogのmessage
変数が1行で定義されているので余裕があればヒアドキュメントスタイルに修正しておくのがオススメです。
自分の場合は3桁近いモニターを一度にterraform管理に移行したので面倒くささありそのままにしてしまいました。
Datadogのドキュメントが良く出来ているのでハマることはないと思いますが、コード化した後の微調整が面倒くさくなるのでコード化も良し悪しだなという感じですね。
ブラウザ上で修正することが出来るのでモニターを編集してしまいそれをコードに落とし込まず気づいた人が直すという運用になりがち。