Amazon Route53管理ツール Roadworkerの設定(Routefile)レシピ
ども、大瀧です。
Route 53の管理ツールRoadworker、便利ですね〜。え、どんなツールなのか知らない?そんな方は植木の紹介記事をどうぞ!(宣伝)
早速、弊社案件でもちょこちょこ活用しています。
触っていて気になったのが、Roadworkerの設定ファイルRoutefileの書き方です。RoutefileはRoute 53のゾーン情報をRubyのDSLで記述するので、Rubyのいろいろな文法が使えるんじゃないかと思い立ち、試してみました。
Routefileの例
zone_apex = "example.com" servers = [{ name: "mail", record: "192.168.1.20" },{ name: "app", record: "192.168.1.30" }] hosted_zone zone_apex do rrset zone_apex, "A" do dns_name "elb-dns-name.ap-northeast-1.elb.amazonaws.com" end rrset "www.#{zone_apex}", "CNAME" do ttl 300 resource_records( "www1.#{zone_apex}" ) end (1..9).each do |num| rrset "www#{num}.#{zone_apex}", "A" do ttl 300 resource_records "192.168.1.#{num}" end end servers.each do |server| rrset "#{server[:name]}.#{zone_apex}", "A" do ttl 300 resource_records server[:record] end end end
結果としては、Rubyの文法であれば一通り動きそうでした。DNSのゾーン管理で役に立ちそうなものをいくつかピックアップします。
変数の活用
まずは変数です。普通に使えますが、ゾーン名(Route 53のZone Apex)に使うととても便利です。
zone_apex = "example.com"
hosted_zone zone_apex do rrset zone_apex, "A" do dns_name "elb-dns-name.ap-northeast-1.elb.amazonaws.com" end
実行した結果をManagement Consoleで確認します。
登録できてますね。
くり返しの活用
続いて、くり返し処理。eachでループを作ることで連番レコードもお手のものです。
(1..9).each do |num| rrset "www#{num}.#{zone_apex}", "A" do ttl 300 resource_records "192.168.1.#{num}" end end
OKですね。
配列/ハッシュの活用
この辺りは、やり過ぎるとDSLで記述する意義が薄れてしまうので注意が必要です。ただ、文法をよくわかっていない人に更新をお願いするときは、配列やハッシュに必要な設定がまとまることで、わかりやすくていいのではと思います。
servers = [{ name: "mail", record: "192.168.1.20" },{ name: "app", record: "192.168.1.30" }]
servers.each do |server| rrset "#{server[:name]}.#{zone_apex}", "A" do ttl 300 resource_records server[:record] end end
OKですね。
注意 : -eオプションとの兼ね合い
実際に使うときには、roadworkコマンドの-e(Export)オプションとの兼ね合いを意識する必要があります。-eオプションは、Route 53の現在のゾーンデータをRoutefileにエクスポートしてくれる非常に便利なオプションですが、既存のRoutefileを純粋なDSLの記述で上書きしてしまうため、Ruby記法で書いた内容は失われてしまいます。
そのため、初回時のみ-eオプションを活用し、RoutefileにRuby記法を盛り込んだあとは-eオプションを使わない方がよいでしょう。
まとめ
記事の見た目はRubyの文法入門という感じになってしまいましたが、DNSのレコード定義に応用できると思うと、インフラエンジニアとしては結構胸アツでした。 皆さんもTry & ErrorでRoadworkerを使いこなしましょう!!