Roadworker v0.5.2: Private DNS対応など

Route53管理ツール「Roadworker」の v0.5.2 をリリースしました

https://github.com/winebarrel/roadworker

主な変更点は以下の通りです。

  • Private DNS対応
  • --target-zoneオプション追加
  • マジックコメント出力対応

Private DNS対応

以下のようなシンタックスでPrivate HostedZoneを作成できます。

hosted_zone "winebarrel.local." do
  vpc "us-east-1", "vpc-xxxxxxxx"
  vpc "us-east-2", "vpc-xxxxxxxx"

  rrset "www.winebarrel.local.", "A" do
    ttl 300
    resource_records(
      "10.0.0.1",
      "10.0.0.2"
    )
  end
end

Public/Privateの区別はVPC情報の有無です。公式APIがそんな感じなので*1

Route53の仕様として、作ったHostedZoneのPublic/Privateを変更することはできません。 また、Private HostedZoneには最低一つ以上のVPCを関連づける必要があります。

あと、ネイティブな機能としてEC2インスタンスのNameタグとの連携をサポートしているわけではないのですが、以下のようなRoutefileをcron等で定期的に適用すれば、さくっとダイナミックな内部DNSを作れるかと。

hosted_zone "ap-northeast-1.local." do
  vpc "ap-northeast-1", "vpc-XXXXXXXX"

  AWS.ec2.vpcs["vpc-XXXXXXXX"].instances.each {|instance|
    rrset "#{instance.tags.Name}.ap-northeast-1.local.", "A" do
      ttl 300
      resource_records instance.private_ip_address
    end
  }
end

--target-zoneオプション

Private DNSの追加で「このHostedZoneだけ適用したい!」みたいなユースケースが増えるかもと思って追加しました。

--target-zone (正規表現) でマッチしたHostedZoneだけ apply/export/test をするようになります。

エクスポート時のマジックコメント出力

ご要望いただいたので、対応しました。 ファイルにエクスポートすると以下のマジックコメントがつくようになります。

# -*- mode: ruby -*-
# vi: set ft=ruby :
hosted_zone "winebarrel.jp." do
  rrset "www.winebarrel.jp.", "A" do
...

piculetのほうはもう少しお待ちください…

aws-sdk-v1

aws-sdk-v1はPrivate DNSに対応していなかったので、プルリクを投げてマージしてもらいました

ですが、マージの過程でエンバグしたらしくHostedZone#vpcsが動作しません。 一応、Fixするプルリクを投げていますが、今のところRoadworker側で対応している状態です。

Route53 API

ListHostedZonesGetHostedZoneのレスポンスのドキュメントが間違っています。

今のところ、ListHostedZonesで関連づけられたVPCの情報は取得できませんし、GetHostedZoneの<VPCs>は<HostedZone>の外側です

2014/11/12 注) ドキュメントは修正されました

その他

VPCの「DNS hostnames」を有効にしないと、VPCからPrivate DNSを引けないようです。 これで少しはまりました。

f:id:winebarrel:20141108210922p:plain


どうぞご利用ください。

あ、あとRoadworkerに限らず弊プロダクトのコミッターは随時募集中です。

*1:PrivateZoneという情報がAPIから取得できるのですが、あくまでステータスを表す情報なのでDSLに定義できませんでした