経緯
職場の 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 が標準でサポートしている各種サービスで充分まかなえるとは思いますが、 今回のようなカスタムプロバイダを作成したり、それを利用するのも結構手軽にできるのは良いですね。