しばやん雑記

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

App Service Environment で Internal Load Balancer が使えるようになったので作って試してみた

最近は仕事で ASE を使ったりしていて、ここしばらく更新が無いと思っていたら、かなり大きなアップデートがやってきました。ARM な VNET へのデプロイと ILB への対応です。

ARM な VNET へのデプロイは置いといて、ILB への対応で完全に VNET 内からしかアクセスが出来ない Web Apps を作成できるようになりました。エンプラ向きな感じで、社内ポータルやアプリケーションを ASE に構築して、ExpressRoute でインターネット経由せずにアクセスとか出来ます。

内部 IP から ASE にアクセスを昔試したことがありましたが、公式サポートされたということで、実際に試してみることにしました。ASE は高いので検証が地味に大変です。

ASE を ILB 付きで作成

ドキュメントにある VNET Configuration ですが、サブスクリプションに VNET が最低でも 1 つ存在しないと出てこないというのが地味に罠っぽかったです。仕方ないので予め VNET を作っておきました、

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

追加された VNET Configuration を開くと VIP Type を External と Internal から選択できます。External がこれまで ASE で対応していたもので、Internal が ILB を使う設定になります。

Internal を選ぶとサブドメインを求められるので、適当に入れておきます。ここで入力したサブドメインが ASE 全体で使われるものになります。

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

設定を保存すると、ASE の Name 部分に表示されていたサブドメインが p.azurewebsites.net から、入力したサブドメインに変わっていることが分かります。

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

これで作成準備が完了したので、実際に ASE を作成します。2 時間ほどかかるので、気長に待ちましょう。

ILB に証明書を設定

ASE の作成が完了すると、ブレードが開けるようになってます。開くと上の方に ILB に Certificate が必須という警告が出ているので、自己証明書を作成してアップロードします。

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

この設定を行っておかないと HTTPS での通信に問題が出ます。

自己証明書は makecert を使ってワイルドカードとして作成しました。最終的にアップロードするのは PFX ファイルになるので、適切に変換しておく必要があります。

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

上の画像では *.ilbase-test.jp 向けにしか用意していないですが、Kudu へのアクセスには *.scm.ilbase-test.jp 向けの証明書が必要になるので、その点だけ注意しておきたいです。

証明書のアップロードを行うと、設定の完了までに少し時間がかかります。Scale Operation という表現だったので、最初に見た時にはに少し驚きました。

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

ちなみに ASE のプロパティを開くと VIP と Outbound IP を確認できるので、この 2 つを利用して DNS の設定と NSG の設定を行えるようになっています。VIP は ILB のアドレスを指しています。

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

ここまでの設定を行うと、やっと Web Apps を作成できる状態となります。

ASE 上に Web Apps を作成する

Web Apps の作成自体はこれまでと変わらずですが、App Service Plan を作成するときに Location として作成した ASE を選択します。

ちゃんとホスト名が ASE で設定したものになっていることが、ここでも確認できます。

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

Web Apps の作成が終わると URL が表示されますが、今回の ASE は Internal 専用なので、当然ながらインターネットから URL を叩いても表示されません。

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

したがって確認をするためには VNET に参加した仮想マシンから行います。ちなみに ASE と同じサブネットに VM を追加してしまうと通信が出来なくなるので、別のサブネットを作って参加するようにします。*1

まずは動作確認なので hosts ファイルに VIP とホスト名を追加して試します。

10.0.0.8    kosmosebi.ilbase-test.jp

後はブラウザから URL を叩いて、いつも通りの Web Apps デフォルトのページが表示されたら動作確認は完了です。HTTPS での接続は VM に証明書をインストールしておけば、エラーは出なくなります。

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

HTTP / HTTPS の両方でページが表示されました。ASE の作成に時間はかかりますが、ここまでほぼポータルだけの作業で完了するのが Azure の特徴という感じですね。

VNET に DNS サーバーを追加する

VNET に参加しているマシンから ASE 上の Web Apps に簡単にアクセスするためには、DNS サーバーを追加していくつかの A レコードを設定する必要があります。今回の場合だと、以下の 4 つを追加します。

  • *.ilbase-test.jp
  • *.scm.ilbase-test.jp
  • ftp.ilbase-test.jp
  • publish.ilbase-test.jp

今回は簡単に Windows Server の DNS サーバー機能を使って、A レコードの追加を行いました。

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

このサーバーを DNS として設定すると、VNET に接続した別のマシンからでも ASE 上の Web Apps にそのままアクセスできるようになります。結構ネットワークの知識が要求される感じです。

ここまで行って、やっと ASE をイントラ向けアプリケーション向けに使えるようになります。

中身は Web Apps と全く同じなので Visual Studio や Git を使ったデプロイなど、同じように行えるのが最大のメリットですね。少し高いですがオンプレの管理をするよりお得だと思います。