経緯
職場の Ops チームが AWS の各種設定を Terraform で行うようになっており、 自分も Terraform 触っていかねばという気持ちになりました。
まずは個人的に使っている環境で試してみようと思い、 現在 Terraform が扱えるプロバイダ とかいろいろ調べていたところ Terraform built-in ではないのですが、こういうものを見つけました。
Dozens とは
このサービス、私も使わせてもらっており、これまでは画面から設定していました。これを Terraform で設定してみよう!!
インストール
README にも書いてあるとおり
$ go get -u github.com/takebayashi/terraform-provider-dozens
知っている人は知っている諸注意なのですが、Terraform のカスタムプロバイダを使用する時は、
そのバイナリが terraform と同じディレクトリ内に配置されている必要があります。
例えば今回の場合、↑ の go get とすると $GOPATH/bin/terraform-provider-dozens が作成されると思いますが、
これを terraform と同じディレクトリにコピーだったり symlink を張っておきましょう。
そうでないと、terraform 実行時に
* Provider 'dozens' not found * 1 error(s) occurred:
みたいなエラーが出ると思います。
やってみる
1. .tf ファイル作成
provider "dozens" {
user = "user"
key = "key"
}
resource "dozens_domain" "gongoexample_org" {
name = "gongoexample.org"
mail = "gongo@example.com"
}
resource "dozens_record" "foo_gongoexample_org" {
depends_on = "dozens_domain.gongoexample_org"
domain = "gongoexample.org"
name = "foo"
address = "192.0.2.123"
type = "A"
ttl = "7200"
priority = ""
}
resource "dozens_record" "gongoexample_org" {
depends_on = "dozens_domain.gongoexample_org"
domain = "gongoexample.org"
name = ""
address = "gongo.github.io"
type = "CNAME"
ttl = "7200"
priority = ""
}
こんな感じのを作ってみました。
2. apply
$ terraform apply dozens_domain.gongoexample_org: Creating... mail: "" => "gongo@example.com" name: "" => "gongoexample.org" dozens_domain.gongoexample_org: Creation complete dozens_record.gongoexample_org: Creating... address: "" => "gongo.github.io" domain: "" => "gongoexample.org" ttl: "" => "7200" type: "" => "CNAME" dozens_record.foo_gongoexample_org: Creating... address: "" => "192.0.2.123" domain: "" => "gongoexample.org" name: "" => "foo" ttl: "" => "7200" type: "" => "A" dozens_record.foo_gongoexample_org: Creation complete dozens_record.gongoexample_org: Creation complete Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
できたっぽい。Dozens のコントロールパネルで確認してみると

できてるっぽい!!
.tf ファイルから resource を削除してから terraform apply すると、ちゃんとレコードやドメインが削除されるのも確認しました
まとめ
Terraform が標準でサポートしている各種サービスで充分まかなえるとは思いますが、 今回のようなカスタムプロバイダを作成したり、それを利用するのも結構手軽にできるのは良いですね。