Roadworkerを使ってRoute53の管理

記事タイトルとURLをコピーする

DNSが苦手な皆様、こんにちは。
技術4課、岩本です。

DNSサーバーの設定変更は、サービス全体への影響が大きくなる場合が多く、いつも神経使います。
AWSでは、マネジメントコンソールから比較的に簡単なGUIでRoute53を利用することが可能です。
ただし、GUI全般の弱点として、差分の確認や実行結果の確認(ドライラン)は難しいです。
そこでRoadworkerを使って、CUIからRoute53を管理してみます。

Roadworker とは?

Roadworkerは、
DSL(Domain-Specific LangDSL)を用いてRoute53の管理が行えるコマンドラインツールです。

Roadworker is a tool to manage Route53. It defines the state of Route53 using DSL, and updates Route53 according to DSL.

インストール

Mac環境などでは、既にRuby/Gemがインストールされていれば、
下記のコマンドでインストールが行えます。

$ gem install roadworker

使い方

  • アクセスキー/シークレットキーの登録
$ export AWS_ACCESS_KEY_ID='...'
$ export AWS_SECRET_ACCESS_KEY='...'
  • 既存情報のアウトプット
roadwork -e -o Routefile
  • ドライラン
roadwork -a --dry-run
  • 適用
roadwork -a

Routefileのサンプル

# -*- mode: ruby -*-
# vi: set ft=ruby :
hosted_zone "examples.com." do
  rrset "examples.com.", "A" do
    dns_name "xxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com."
  end
# examples.com のAレコードにAliasとして”xxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com.”を追加

  rrset "examples.com.", "MX" do
    ttl 300
    resource_records(
      "100 mx.examples.com"
    )
  end
# MXレコードの設定

rrset "mx.examples.com.", "A" do
    ttl 300
    resource_records(
      "192.168.0.1"
    )
  end
# Aレコードの設定

  rrset "www.examples.com.", "A" do
    ttl 300
    resource_records(
      "192.168.0.1"
    )
  end
# Aレコードの設定
end

実行

www.examples.commx.examples.comのAコードを
192.168.0.1から192.168.0.2へと変更してみました。

  • Routefile自体の編集は手動で行います。

ドライラン

$ roadwork -a --dry-run -f Routefile
Apply `Routefile` to Route53 (dry-run)
Update ResourceRecordSet: mx.examples.com. A (dry-run)
  resource_records:
    -[{:value=>"192.168.0.1"}]
    +[{:value=>"192.168.0.2"}] (dry-run)
Update ResourceRecordSet: www.examples.com. A (dry-run)
  resource_records:
    -[{:value=>"192.168.0.1"}]
    +[{:value=>"192.168.0.2"}] (dry-run)
No change
  • 上記の様に変更箇所が明示的に表示されます(この時点でドライランです)

適用

$ roadwork -a -f Routefile
Apply `Routefile` to Route53
Update ResourceRecordSet: mx.examples.com. A
  resource_records:
    -[{:value=>"192.168.0.1"}]
    +[{:value=>"192.168.0.2"}]
Update ResourceRecordSet: www.examples.com. A
  resource_records:
    -[{:value=>"192.168.0.1"}]
    +[{:value=>"192.168.0.2"}]

まとめ

上記の様にコマンドライン上でRoute53の変更箇所を明示的に表示てでき、適用が可能です。
さらにRoutefile自体をGit管理することで、ファイル履歴の取得も可能となります。
ぜひご活用ください。