あるプロダクトの監視にはNewRelicを使っているが、手作業で作られたNewRelicのアラートが大量に放置されていた。 そのため、どのアラートが作成されているのかがわからない、不要なものもわからない、レビューがやりにくいといった問題があった。
そこでTerraformerを使ってそれらを取り込みコード化することができたので、方法を記載する。
Terraformer
リソースからTerraformのコード+tfstateを自動で生成するツール。
Terraformerを使わなくてもterraform import
コマンドを使うことでリソースを取り込むことはできるが、Terraformerを使うことのメリットは次の通り。
- tfstateとコードを両方生成してくれる。対して
terraform import
はtfstateのみ生成。 - 複数のリソースを一括で取り込める。対して
terraform import
は1リソースだけ。
リソースをTerraformで作成するときと同様、取り込みたいリソースのprovider pluginが必要となる。
TerraformerはNewRelicに対応しているはずだったが、いざ試してみると依存しているNewRelicクライアントが古すぎて失敗したため、新しいクライアントで入れ替えた。
このPRがマージされたコードが先日リリースされたため、誰でもNewRelicリソースを取り込めるようになった。やったぜ。
brew install
するなりgithubのreleaseから取ってくるなりして利用できる。
リソース取り込み
Terraformerは残念ながらTerraform 0.13にしか対応していないため、まずtfenvを使ってバージョンを下げる。
$ tfenv install 0.13.0 $ tfenv use 0.13.0
NewRelicのprovider pluginを.terraform.d/plugins/<system>
に配置する。
これをやらないとfork/exec : no such file or directory
みたいなエラーが出て動かない。
M1 Macならこんな感じになる。
$ cd .terraform.d/plugins/darwin_arm64 $ curl -LO https://github.com/newrelic/terraform-provider-newrelic/releases/download/v2.45.1/terraform-provider-newrelic_2.45.1_darwin_arm64.zip $ unzip terraform-provider-newrelic_2.45.1_darwin_arm64.zip
リソースを取り込んでみる。今のところ対応しているのはalert, infra, syntheticsの3種類。
$ terraformer import newrelic -r alert,infra,synthetics --api-key=$API_KEY --account-id=$ACCOUNT_ID
generated/newrelic
に各種リソースのコードが生成された。
. └── generated └── newrelic ├── alert │ ├── alert_channel.tf │ ├── alert_policy.tf │ ├── nrql_alert_condition.tf │ ├── outputs.tf │ ├── provider.tf │ └── terraform.tfstate ├── infra │ ├── provider.tf │ └── terraform.tfstate └── synthetics ├── outputs.tf ├── provider.tf ├── synthetics_monitor.tf └── terraform.tfstate
それぞれの./generated/newrelic/<resource>
にnewrelicの設定を記述する。
provider "newrelic" { region = "US" account_id = var.nr_account_id api_key = var.nr_api_key } variable "nr_account_id" {} variable "nr_api_key" {}
planしてみて差分が出なければ取り込み完了。
$ export TF_VAR_nr_account_id=$ACCOUNT_ID $ export TF_VAR_nr_api_key=$API_KEY $ terraform 0.13upgrade . $ terraform init $ terraform plan
取り込んだ後はTerraformの最新バージョンを使うことができるので、公式のUpgrade Guideを見ながらちまちまアップグレードする。