年中アイス

いろいろつらつら

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事前にコード化しておくと、どんな変更がいつあったか記録でき、適用前に確認もでるので、事故を防止したり、万が一何かで消えたときに復旧することもできます。

参考

*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年末からですが、これを読んでから、部屋の片付き方が変わりました。
もともとそんなに散らかす方ではないんですが、掃除が楽になりました。実践的な内容で、誰でもやれると思います。

ツインバードサイクロン掃除機

TWINBIRD サイクロンスティック型クリーナー スケルトンブラック TC-E123SBK

TWINBIRD サイクロンスティック型クリーナー スケルトンブラック TC-E123SBK

上記の本に、お気に入りの掃除機を買うというのがあり、とりあえず安めのこれを買ってから考えようと思ったんですが、すごくいいです。
単純なスティック型サイクロン掃除機なんですが、ちゃんと吸引力もあるし、ゴミ捨てして部品を掃除するのも楽です。立てて置けるので収納も困りません。
あと、吸い込んでるゴミが見えるので、掃除してる感と、そんなにゴミあるの?感があって掃除する気になります。

Panasonic ナノケア ヘアドライヤー

前は、TESCOM ione マイナスイオンヘアードライヤー シルキーゴールド TID910-N
を使っていて、それでも十分かなと思っていたんですが、ふとしたことから変えてみると、風量が明らかに違って、髪が乾く時間が短くなりました。
13,000円程と高めですが、これは高い価格のものに変えてよかったタイプです。

電気ケトル

DRETEC (ドリテック) わくわくケトル PO-101NBL

DRETEC (ドリテック) わくわくケトル PO-101NBL

主にコーヒーとか暖かい飲み物に使ってます。
前はタイガーのやつを使ってたんですが、大きいのと洗うのが面倒というのがあって、変えました。洗うのが比べれば楽で、痛んできたら、1年いかなくても買い替えてもいいかなという価格なので、こちらにしました。

使わなくなったもの

デスクトップPC

引っ越ししてデスクを置かなくなったせいもありお蔵入りしてます。キューブ型で小さい部類ではあるんですが、ディスプレイとセットで置く場所がない。代わりに活躍するのはMacbookPro13とiPadminiになりました。開発をmacで行うようになったのも大きいです。

*1:捨てて忘れてる可能性が高い

2014年振り返りと2015年抱負

2014年中にやるべきでしたが、超えました。2015年は月ごとにちゃんとやるべきかな。

2014年ハイライト

1-3月
  • 接続障害と大反省会
  • 突然のイベント決定(高負荷)
  • インフラ担当者の突然の離職と引き継ぎ
4-8月
  • 冗長化、対障害性対策
  • MySQL、アプリロジックなどパフォーマンスの改善
  • AWS料金削減
9-12月
  • golangでのWebAPI実装
  • バックエンド側の設計と負債防止対策
趣味

4Q後半から

  • 釣り再会、再開後初釣果(真鯛50cmぐらい。バスは釣れず)
  • チェス開始

具体的には

お客様ヒアリング、サーバ側設計をやっていた所から、AWS関連、インフラ、アプリケーションの構成周り全般、golangでのWebAPI作成といった風に、完全にシステムよりに変わりました。あとより手を動かす方に。

自分の中では、この3つが大きな技術キーワードでした。

システムに関しては、ほぼ1台構成から、レイヤの分離や冗長化を進め、対障害性の向上や、リリースサイクルの改善が出来ました。AWS使って何かするところは、手探りながらすすめ、サーバアプリ等担当と話しながら、無停止でのリリース手順を考え、徐々に置き換えていきました。同時にansible化を進めて、サーバ構築やリリースの効率化、確実性が格段に増したので、大きな成果です。

運用も初めて全部に関わるので、24h何かあれば対応するようになりました。電話はOpsGenieからかかってきます。オフィスはパトランプも設置され、警報がなるので、2014年前半は全員パブロフの犬になりました。

golangでのWebAPI実装も始め、久しぶりにコードを書きながら、リファクタしまくりました。

その他、必要な技術選定や、ツールの要件をまとめ、導入や実装を行ってもらいました。celeryとElasticsearchが今後に大きくつながりそうです。だいたいどれも2015年に続きます。

趣味のほうでは、後輩の誘いから釣りを再開し、ドハマリしました。年末にチェスがやりたくなり、覚え始めました。カメラはややおさまり気味。

2015年抱負

全体としては、楽しいことに注力するために攻める。

  • 後手気味の対応(負債の返済)が済んできたので、より攻めに転換する。
  • リモートワークを週半分ぐらいにする(できるようにする)
  • ブログ/Qiita/githubなどにもっとアウトプットする。
  • 海、ブラックバス共に、より多く釣りに行く。
  • まだセオリーもわからん状態から、チェスでまともな試合が出来るようにする。
  • とにかく楽しいことに注力する(仕事も楽しんでます)