Roadworkerを使ってRoute53 Private DNSを管理する
Roadworkerとは
Route53の設定を、DSLで管理するruby製のツールです。ドメイン設定をコード化できるので、gitで管理することができます。
winebarrel/roadworker · GitHub
Route53 private DNSとは
2014年の11月ごろから使えるようになった機能です。
特定のVPC内からのみ応答するdomainを設定することができます。VPC内からは、任意の名前で対象を指定できます。 ec2で最初から割り当てられるprivate DNSは、ローカルIPアドレスが含まれているので、DBサーバといった役割の名前として使えませんでした。
ちなみに少しお金かかります。public/private変わらずな感じ。 ホストゾーンは、0.50USD/1ホストゾーン月と、標準リクエスト0.40USD/最初の10億リクエストまで月
料金 - Amazon Route 53(ドメインネームサーバー― DNS サービス) | アマゾン ウェブ サービス(AWS 日本語) 他、細かい説明がありますが、1USD/月ぐらいで試すのはできるようです。
Roadworkerのinstall
sudo gem install roadworker
入ったのは、0.5.4
でした。
ここでは、AWSの接続用のトークン設定の説明は省きます。環境変数で指定するか、Credentialでも動きます。
試してみる
Private DNS用のHostedZoneの作成
AWSコンソールにログインして、Route53 > HostedZones > [Create Hosted Zone]
項目 | 値 |
---|---|
Domain name | 設定したいHostedZone名、ここでは、private.local |
Comment | 説明とか |
Type | [Private Hosted Zone for Amazon VPC]を選択 |
VPC ID | 設定するDNSを使えるVPCのID(選択肢が出ます) |
これでprivate.local
というPrivate domainが作成されました。画面上末尾に.がついてprivate.local.
となりますが大丈夫です。
gitで管理する準備
gitで管理するため、専用のディレクトリを作ります。
mkdir route53 cd route53 git init
現在の設定をexportする
exportは、-e
または--export
を指定します。
HostedZoneごとにファイルが分かれる方が管理しやすいので、--split
を指定します。
roadwork -e --split
以下2種類のファイルが作成されます。
- Routefile
- private.local.route
Routefile
は、HostedZoneごとのrouteファイルを読み込んでいるだけです。
# -*- mode: ruby -*- # vi: set ft=ruby : require 'private.local.route' # 複数あればここにrequireが増えます。
private.local.route
に、domainごとの設定が出力されています。
# -*- mode: ruby -*- # vi: set ft=ruby : hosted_zone "private.local." do vpc "ap-northeast-1", "vpc-XXXXXXXX" end
gitで記録する
git commit -a -m 'stored route53 routings.'
編集する
一つドメインを追加してみます。vpc
の行の後に以下のように追加します。シンプルなaliasレコードです。
10.0.0.10
というPrivateIPにdb.private.local
というdomainを割り当てます。
# -*- mode: ruby -*- # vi: set ft=ruby : hosted_zone "private.local." do vpc "ap-northeast-1", "vpc-XXXXXXXX" # --ここから rrset "db.private.local.", "A" do ttl 300 resource_records( "10.0.0.10" ) end # --ここまで end
DSLわからないときは、AWSコンソールから作って、exportするのが早いです。domainの末尾にある.
は省略しても勝手にあるものとして扱われます。exportした方は、末尾に.
が付いているので、つけた方がexportと合わせられていいと思います。
gitで管理していれば、何かあっても戻せますし、差分も見やすいです。*1
適用する
-a
または--apply
を指定すると適用できます。まず必ず--dry-run
をつけて、適用対象を確認しましょう。
*2
roadwork -a --target-zone private.local --dry-run
新規はCreate(青文字), Update(黄文字), Delete(赤文字)という接頭語で対象が羅列されます。以下簡単な例です。
# 追加 Create ResourceRecordSet: db.private.local A (dry-run) # 変更 Update ResourceRecordSet: <変更するdomain> A (dry-run) set resource_records=[{:value=>"<新しいIPとか変更情報>"}] (dry-run) # 削除 Delete ResourceRecordSet: <消すdomain> A (dry-run)
変更対象を確認したら、--dry-run
を外して実行します
roadwork -a --target-zone private.local
確認
対象のVPCにあるインスタンス上で、dig db.private.local
とすると、DNSの応答があります。
# 前後省略 ;; ANSWER SECTION: db.private.local. 300 IN A 10.0.0.10
HostedZoneの削除
そんなにやる機会はないかもしれませんが、HostedZoneを削除するときは、Routefileから対象のHostedZone(require行)を消します。 ただし、applyしようとすると、そのままでは消せずに、警告がでます。
Undefined HostedZone (pass `--force` if you want to remove): private.local. (dry-run)
--force
をつけると、HostedZoneの削除も出来きます。--force --dry-run
とすると、force状態でのdry-runが可能です。
Apply `Routefile` to Route53 (dry-run) Delete HostedZone: private.local. (dry-run)
現状と比較する
-t
または--test
を使って、現在のDSLと、実際のDNS問い合わせ結果が同期した状態かを確認できます。
Aliasレコードでは完全ではないようで、おそらく
- 同じドメインに複数のIPを割り当てる場合、実際にDNSから返ってくるのはランダムに1つ
- そのため、一致しない別のIPが返ってくると失敗する。
- またPrivate DNSは、そもそもVPC内からのみ有効なので、外からは応答なく失敗となる
なのでこの-t
は、それを踏まえて使う必要があります。PrivateDNSは、もし確認するのであれば、VPC内のインスタンス上でRoadworkerを動かせば確認できると思いますが、前述の失敗条件もあるので、気をつける必要があります。
まとめ
Route53は、AWSコンソールのUIが少し微妙なので、謝って別の行を変更してしまうことが、ごく稀にあります(ありました)また、変更の履歴はないので、誰がいつやったかはわかりません。*3事前にコード化しておくと、どんな変更がいつあったか記録でき、適用前に確認もでるので、事故を防止したり、万が一何かで消えたときに復旧することもできます。
参考
- Route 53のPrivate DNS対応を試してみた | Developers.IO
- 【AWS】Route53をgitで管理する「Roadworker」を早速試してみました | Developers.IO
*1:ローカルで編集して、git commitする前にexportすると消えるので、注意してください。
*2:個人的には、--target-zoneを使ってHostedZoneも指定して適用します。複数のHostedZoneがある場合に、万が一、他のZoneに不必要な影響があっては困るので、対象のzoneに絞ります。
*3:2015/3/8現在、CloudTrailの対象にまだない様子。AWS CloudTrail ( AWS API の呼び出し記録、ログファイル送信)| アマゾン ウェブ サービス(AWS 日本語)
2014年に買ってよかったもの(生活周り)
ある意味これも振り返りかなと思ったので書いてみました。買って失敗だったものも思い出せたら書いてみようかな。*1
kindle (paper white / voyage)
場所を取らない、買ってすぐ読めるという点が一番でした。漫画、小説、新書あたりは新しいのはkindle版を買っています。例外として、技術書は参照時にページの行き来が多いため、紙を買うようにしています。ハッカーと画家のような読み物は、kindle版を買います。
別にkindle端末を持つ理由としては、電池の持ちと、読みやすさです。文字の見やすさはやはりe-inkが優位です。初めての人は、paper whiteか、最近出たもう少し安いやつでも十分だと思います。
この1年で、だいぶkindle版が普通になってきたので、2015年もだいぶ進むんじゃないかなと思ってます。
SIM free iPhone5s
こちらのエントリに書いた通りです。
香港に行った時は、コンビニで売ってる1,000円ぐらいのSIMを指して使ってました。韓国に行った時は、SIMが4,000円ぐらいして、滞在期間と割に合わなかったので買いませんでした。
普段はOCN使ってますが、当時から参入業者も増えて競争で価格と通信データ量が改善しているのもいいところです。
iPhone6とplusは、2015/1/4現在、SIM freeの扱いが止まっているので、早く復活してほしいですね。
部屋を活かせば人生が変わる
- 作者: 部屋を考える会
- 出版社/メーカー: 夜間飛行
- 発売日: 2013/11/05
- メディア: 単行本
- この商品を含むブログ (3件) を見る
もともとそんなに散らかす方ではないんですが、掃除が楽になりました。実践的な内容で、誰でもやれると思います。
ツインバードサイクロン掃除機
TWINBIRD サイクロンスティック型クリーナー スケルトンブラック TC-E123SBK
- 出版社/メーカー: ツインバード工業(TWINBIRD)
- 発売日: 2012/09/14
- メディア: ホーム&キッチン
- 購入: 2人 クリック: 7回
- この商品を含むブログを見る
単純なスティック型サイクロン掃除機なんですが、ちゃんと吸引力もあるし、ゴミ捨てして部品を掃除するのも楽です。立てて置けるので収納も困りません。
あと、吸い込んでるゴミが見えるので、掃除してる感と、そんなにゴミあるの?感があって掃除する気になります。
Panasonic ナノケア ヘアドライヤー
Panasonic ヘアードライヤー ナノケア 白 EH-NA96-W
- 出版社/メーカー: パナソニック(Panasonic)
- 発売日: 2014/09/01
- メディア: ホーム&キッチン
- この商品を含むブログ (1件) を見る
を使っていて、それでも十分かなと思っていたんですが、ふとしたことから変えてみると、風量が明らかに違って、髪が乾く時間が短くなりました。
13,000円程と高めですが、これは高い価格のものに変えてよかったタイプです。
電気ケトル
DRETEC (ドリテック) わくわくケトル PO-101NBL
- 出版社/メーカー: ドリテック(dretec)
- メディア: ホーム&キッチン
- この商品を含むブログを見る
前はタイガーのやつを使ってたんですが、大きいのと洗うのが面倒というのがあって、変えました。洗うのが比べれば楽で、痛んできたら、1年いかなくても買い替えてもいいかなという価格なので、こちらにしました。
使わなくなったもの
デスクトップPC
引っ越ししてデスクを置かなくなったせいもありお蔵入りしてます。キューブ型で小さい部類ではあるんですが、ディスプレイとセットで置く場所がない。代わりに活躍するのはMacbookPro13とiPadminiになりました。開発をmacで行うようになったのも大きいです。
*1:捨てて忘れてる可能性が高い
2014年振り返りと2015年抱負
2014年中にやるべきでしたが、超えました。2015年は月ごとにちゃんとやるべきかな。
2014年ハイライト
1-3月
- 接続障害と大反省会
- 突然のイベント決定(高負荷)
- インフラ担当者の突然の離職と引き継ぎ
9-12月
- golangでのWebAPI実装
- バックエンド側の設計と負債防止対策
趣味
4Q後半から
- 釣り再会、再開後初釣果(真鯛50cmぐらい。バスは釣れず)
- チェス開始
具体的には
お客様ヒアリング、サーバ側設計をやっていた所から、AWS関連、インフラ、アプリケーションの構成周り全般、golangでのWebAPI作成といった風に、完全にシステムよりに変わりました。あとより手を動かす方に。
自分の中では、この3つが大きな技術キーワードでした。
システムに関しては、ほぼ1台構成から、レイヤの分離や冗長化を進め、対障害性の向上や、リリースサイクルの改善が出来ました。AWS使って何かするところは、手探りながらすすめ、サーバアプリ等担当と話しながら、無停止でのリリース手順を考え、徐々に置き換えていきました。同時にansible化を進めて、サーバ構築やリリースの効率化、確実性が格段に増したので、大きな成果です。
運用も初めて全部に関わるので、24h何かあれば対応するようになりました。電話はOpsGenieからかかってきます。オフィスはパトランプも設置され、警報がなるので、2014年前半は全員パブロフの犬になりました。
golangでのWebAPI実装も始め、久しぶりにコードを書きながら、リファクタしまくりました。
その他、必要な技術選定や、ツールの要件をまとめ、導入や実装を行ってもらいました。celeryとElasticsearchが今後に大きくつながりそうです。だいたいどれも2015年に続きます。
趣味のほうでは、後輩の誘いから釣りを再開し、ドハマリしました。年末にチェスがやりたくなり、覚え始めました。カメラはややおさまり気味。