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 を追加しようとするとエラーになりました。
今のところ Traffic Manager に IP アドレスで追加していないと、Zone Apex なドメインに Alias は作れないらしいです。そして普通に Traffic Manager に App Service を追加すると、ドメイン名で追加されるのでエラーになるというわけです。
ならば IP アドレスとして追加してやればよいので、External Endpoint として追加します。App Service は A レコード向けに VIP が提供されているので、この IP アドレスを使います。
VIP をメモして Traffic Manager に追加します。そのままだとモニタリングが落ちるので、カスタムヘッダーとして Host を追加して SNI でちゃんと処理されるようにします。
将来的には IP アドレスとして追加する機能があれば嬉しいですね。比較的簡単そうですし。
これでもう一度 Alias Record を追加すると、今度は上手くいくはずです。
実際にブラウザでアクセスすると、ちゃんと App Service でホストしているページが表示されます。HTTPS の場合も SNI で App Service にバインドを追加しておけば問題ないです。
ちなみに nslookup を使って名前解決を試すと、以下のような結果になります。
www の方は Alias ではなく CNAME を使っているので、結果が少し異なっていますが同じ IP アドレスが返ってきていることが確認できます。
App Service は Run From Package で複数の App Service に対してのデプロイが非常に簡単かつ、一貫性のあるデプロイが行えるようになっているので、複数リージョンに展開することも簡単になってきています。
実際に運用する場合には証明書の扱いや、デプロイフローを多少考える必要がありますが、今度適当に試してまとめてみたいと思います。
*1:Azure DNS 系は突然出てきて GA というのが多い気がする