Thanks Driven Life

日々是感謝

Dozens の設定を Terraform でやってみた (terraform-provider-dozens)

経緯

職場の Ops チームが AWS の各種設定を Terraform で行うようになっており、 自分も Terraform 触っていかねばという気持ちになりました。

まずは個人的に使っている環境で試してみようと思い、 現在 Terraform が扱えるプロバイダ とかいろいろ調べていたところ Terraform built-in ではないのですが、こういうものを見つけました。

github.com

Dozens とは

dozens.jp

このサービス、私も使わせてもらっており、これまでは画面から設定していました。これを 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 のコントロールパネルで確認してみると

f:id:gongoZ:20150705220653p:plain

できてるっぽい!!

.tf ファイルから resource を削除してから terraform apply すると、ちゃんとレコードやドメインが削除されるのも確認しました

まとめ

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

補足参考資料