AZ-104対策向けAzureサービス解説 -Application Gateway-

AZ-305を取りたいなと思ったのですが、その前にAZ-104を取らないといけないとのこと。
めんどくさいなと思いつつ、この手の話は意外と興味のある人がいるかもしれないと思ったので自分の勉強がてらAZ-104の範囲の内容についてまとめていきます。間違っているところも多々ありますがご容赦を。
というか、MSLearnの日本語訳がひどすぎるので自分でまとめる羽目になったのです。読んだことない人は一度読んでみてください。酔いそうな文章見せてくれます。

ちなみに、なぜApplication Gatewayからかという事に理由はありません。私に「体系的」という文字は無いのです。

サービス概要

L7(アプリケーション層)での負荷分散サービスになります。

MSLearnから拝借した上図でいうと、リバースプロキシのようにサーバーの手前において、ユーザーはいったんこのApplication Gatewayへアクセスします。そしてhttps://contos.com/images/*のURLはイメージサーバへ、https://contos.com/video/*のサーバーはビデオサーバへルーティングされます。こうする事で、とあるページだけは処理が重いので別のサーバーにルーティングして負荷分散させたい、といった要望を叶えられます。

負荷分散というとロードバランサーのイメージがありますが、あちらはL3~4(ネットワーク層,トランスポート層)を見て分散を行うため、宛先、もしくは送信元のIPアドレスやポート番号で分散をします。それだと、アクセス先のサイトやコンテンツが何かという事までは考慮されないため、運が悪いと軽いページを見るだけなのに重い処理やらされてるサーバへルーティングされる可能性が出てきます。

超簡単にサービスの構成を書くと、外部公開するIPアドレスをApplication gatewayに充てます(リスナーの設定)。このIPアドレスはWebサイトのアドレスとして設定します。そして、上図のように「***のURLが来たら+++のURLへルーティング」といったバックエンドのルールを定義します(バックエンド規則)。上記設定を行う事で「いったんApplication Gatwayへアクセスし、定義されたルールにのっとって任意のバックエンドへルーティングする」ことができます。

 

試験用に押さえておく情報

  • URLベースのルーティング(上図の事です)
  • 自動スケーリングがサポートされている。Application Gateway自体にアクセスが集中してダウンしないように、Applicatione Gatewaそのものも自動でスケーリングさせる事が出来るという事です。
  • 複数の可用性ゾーンを対象にデプロイできる。可用性ゾーンごとに一つ一つ Application Gateway を作成する必要がありません
  • 複数のドメインを一つのApplication gatewayで処理できる(複数サイトのホスティング)。つまり、example.comもtest.co.jpも別のサイトだけど一つのApplication gatewayを入り口に集約できるよ、という事だと思います。
  • WAFの導入が出来る。WAFはWeb Applicatione Firewalllの事です(これについてはいずれ)。ちなみにAzureのWAFは単独では実装できず、Application GatewayやFront doorといったサービスと抱き合わせでないと実装出来ないようです。
  • SSL終端機能あり。(下で解説します)

 

実務的に注目する機能

ルーティング機能

(編集中です。。)

SSL/TLS終端

これはHTTPS通信をApplication Gatewayで終了させて、バックエンドへの通信はHTTPで行うという機能です。

図で見るとよく分かりますが、TLS1.2のみの通信を受け付けて、Pool2のサーバー群へはHTTPで振り分けています。HTTPS通信は暗号処理を含むためそれなりに処理負荷がかかります。利用者が直接アクセスするのはApplication Gatewayだけなので、そこ以外は平文で通信させてしまおうというのが目的です。また、サーバー証明書もバックエンドに一つずつ入れる必要が無くなり、Application gatewayに一括で入れてしまえるので管理も楽です。ただし、証明書を作成したりローテーションしたりという機能は無いので、証明書のやりくりは自力でする必要があるようです。

Application Gatewayに限らず、リバースプロキシのように間に本来アクセスさせるサーバーの間に別のサーバーを挟んでTLS通信するときは、「どのドメインの証明書をどこに入れるのか」をあらかじめ理解しておかないとエラーが発生してしまうので気を付けましょう。

 

余談1

証明書は自己証明書でもなんでもインストール出来ますが、私のミスをここで一つ。お金を払いたくなくてApplication Gatewayに充てていたAzureの標準のドメイン(japaneast.azure.com?だったかな)にLet’s Encryptで証明書を発行しようとしたのですが以下の要領で失敗しました。

  1. バックエンドサーバーのコンテナインスタンスに対してHTTP-01チャレンジに失敗
  2. DNS-01チャレンジを試みるもドメインはAzureが管理しているのでDNSサーバーはいじれず失敗
  3. というかそもそもLet’s encryptは同一ドメインに対して1週間に20個ほどしか証明書を作れない=大勢が使っているドメインだから現実的には無理

という事で結局カスタムドメインじゃないとちゃんとした証明書はできないってことです。

 

余談2

Application Gatwayはポータルでは停止ボタンが無いので止められないと思われがちですが、コマンドを使えばなんと停止出来て課金も止まります。(このサービス無駄に高いのでテスト用とかだと夜中は止めたい)

az network application-gateway stop -g MyResourceGroup -n MyAppGateway