しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure DNS の Alias Records を使って Zone Apex で Traffic Manager + App Service な環境を作る

Ignite 2018 の前から Azure DNS を弄ってたら気づいた Alias Record Set が GA しました。*1

Traffic Manager か Public IP Address の場合のみ利用可能という制約がありますが、長らく Zone Apex なドメインは使えなかったという問題が解消です。

これまでは www を付けて CNAME という方法しかなかったので嬉しいです。

早速 App Service を Traffic Manager に追加し、世界中のリージョンに App Service をデプロイして負荷分散を試そうかと思ったのですが、Alias として Traffic Manager を追加しようとするとエラーになりました。

f:id:shiba-yan:20180926000553p:plain

今のところ Traffic Manager に IP アドレスで追加していないと、Zone Apex なドメインに Alias は作れないらしいです。そして普通に Traffic Manager に App Service を追加すると、ドメイン名で追加されるのでエラーになるというわけです。

ならば IP アドレスとして追加してやればよいので、External Endpoint として追加します。App Service は A レコード向けに VIP が提供されているので、この IP アドレスを使います。

f:id:shiba-yan:20180926000708p:plain

VIP をメモして Traffic Manager に追加します。そのままだとモニタリングが落ちるので、カスタムヘッダーとして Host を追加して SNI でちゃんと処理されるようにします。

f:id:shiba-yan:20180926000602p:plain

将来的には IP アドレスとして追加する機能があれば嬉しいですね。比較的簡単そうですし。

これでもう一度 Alias Record を追加すると、今度は上手くいくはずです。

f:id:shiba-yan:20180926000612p:plain

実際にブラウザでアクセスすると、ちゃんと App Service でホストしているページが表示されます。HTTPS の場合も SNI で App Service にバインドを追加しておけば問題ないです。

f:id:shiba-yan:20180926001223p:plain

ちなみに nslookup を使って名前解決を試すと、以下のような結果になります。

www の方は Alias ではなく CNAME を使っているので、結果が少し異なっていますが同じ IP アドレスが返ってきていることが確認できます。

f:id:shiba-yan:20180926001343p:plain

App Service は Run From Package で複数の App Service に対してのデプロイが非常に簡単かつ、一貫性のあるデプロイが行えるようになっているので、複数リージョンに展開することも簡単になってきています。

実際に運用する場合には証明書の扱いや、デプロイフローを多少考える必要がありますが、今度適当に試してまとめてみたいと思います。

*1:Azure DNS 系は突然出てきて GA というのが多い気がする