Autonaming来てた!!!

あまりにもひっそりとお知らせされたため、全く気付かないでスルーしていました。
ちょっとコンテナのリプレースでもしようかな、とECSのサービス作成GUI眺めてたら、見覚えのないメッセージと項目があるじゃないですか。

…あれ? これアレ用のやつじゃね? 北米でみたぞ?

Amazon Route 53 Auto Naming が追加の 5 AWS リージョンで利用可能に

キテマシタワー! これを待っていたんですよ!
全国18人くらいのECSとFARGATEファンはこれでサービスディスカバリに頭悩ませなくて済みます! 少ないな。万とかを忘れてないか。

FARGATEが来た時点で来るのはわかっていたことでしたが、先日JAWSの懇親会でAWSの中の人に「いつAutonaming来るんだよう、来るのはわかってんだから教えろよぅ」と絡んだのは僕ですごめんなさい。
驚くほどすぐ来てちょっと笑ってしまいました。

これは何か、というと、要するにRoute53のヘルスチェックをコンテナのサービスレイヤまで拡張し、DNSレコードでサービスディスカバリをしてしまおう、という手抜き感満載ですが、DNSキャッシュとか限りなくTTL削れば十分実用的な話の内容です。
結局Consulとかだって名前解決なんですし。

というかAuroraのエンドポイントとかが基本的な部分はそういう構造のハズです。
フェールオーバーを起こすとエンドポイントのレコードが書き変わる。まあ、あちらはヘタするとTTLが60秒以下の可能性が高そうなのですが。

何に使うか、というとFARGATEって結局コンテナ間リンクが利用できません。
コンテナ間での通信はどうやってもVPC上のローカルIPを叩く必要があります。Dockerのリンク名ではつなげないわけです。
マイクロサービス化したコンテナ間を結ばないといけないとき、これは結構めんどくさいことになります。FARGATEコンテナが再起動したりするたびにアドレスが変わるわけですから。

従来だと、Consulとかサービスディスカバリを立てて、そちらに問い合わせるなり、ConsulのDNSを使うなり、って感じですが、せっかくRoute53にローカルゾーン作ってaws cliだけでレコード書いたり消したりしてるのに、一部だけのけ者になってしまうとかイケてません。
全部APIの中で済ませたいのです。
というかTerraformで済ませたいのです。これだけAWS担いでいるのに、CloudFormationだけはかつての苦行が思い出されるので苦手意識が消えません。HCLもJSONとほとんど変わらないだろ、とか言われるとぐうの音も出ないのですが、HCLはJSONほど書式に厳しくないのです。クォートのネストとか、要素名くくれよ!とか、リストの最後の要素のお尻に,がついてるとか、そんな枝葉末節のことで怒ったりしないいい子なのです。

そんないい子のHCLなのに毎回Syntaxで怒られる私にJSONとか厳格な人が扱えるわけがないのです。JQとJson online parserから離れられなくなるのです。

YAML使えよとかいうたわごとは効かなかった方向で。ResultSetがJSONで帰ってくるのにテンプレートスタックだけYAMLで書かれてるとか気持ち悪い。それならaws cliの結果もYAMLで返ってこい(インデントに意味があるYAMLをリザルトセットで返せとかキ○ガイ沙汰の暴言)。
というかCFデザイナの出来が気に入らないのです。IDEっぽくするならもっとプロパティをさくさく書けるようにしてほしい。シンタックスハイライトも欲しい。というかIDEよろしくプロパティウィンドウがぺろっと出てきて選ぶだけになってると幸せ。
VPCいっこ作るのにえーっとあのプロパティなんだっけ。とかつらいのです。それならコードをタイプしたほうが速いですしね。

ってこうやって書いておいたらいつの間にかAWSの中の人が気を利かせてVisualOpsくらいには使いやすくなったりしないかしら。最近見かけないけどVisualOps元気なのだろうか。Terraformに出家してから触ってないですけど。

さて、これでDockerでやりたいことはだいたい出そろった。EFSはもっと早く来てほしかったけど。
まあ、書きあげたTerraformモジュールが半分くらいリファクタリングしないといけないっぽいので、もう少し早くにお願いしたかったところなのですが。
ついこないだEFS対応用にリファクタしたばっかり…。