AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。

本ページにはプロモーションが含まれています。

お仕事

どーも。seiです。久々の技術系ネタwww

以前の投稿では、Azure Traffic Managerを使ってマルチリージョンのDR(ディザスターリカバリー)構成を構築しました。

コスパ重視でTraffic Managerをかませていましたが、今回はその構成をAzure Front Doorに置き換える手順を提示していきたいと思います。

Azure Front Doorとはなんぞや?という方は以下のサイトでご確認ください。

今回のゴール&前提条件

今回のゴールは以下の構成図のような感じです。前回のDR構成を構築したところとの違いはTraffic ManagerがAzure Front Door(以降AFD)に置き換わるだけですので、それ以外の部分は今回は割愛させていただきます。前回の投稿を元に構築ください。

また、Azure Static Web Appsをフロントエンドとして追加しています。これはプライマリーリージョンにリソース作成していますが、グローバルに展開されるリソースなため既定でリージョン障害に対応しているので、リソースをプライマリーリージョンに1つだけデプロイします。

今回デプロイするAzure Functionsも自身のリソース名を返すだけの単純なものにして実行させます。ご自由に振る舞いを実装していただければと思います。

簡単に説明すると、クライアントからのリクエストをまずAFDが受けてトラフィックを振り分けます。サイトへのアクセス(/*)の場合はフロントエンドに振り分けます。フロントエンドはバックエンドに対してリクエストを投げますが、AFDを介してバックエンドのAzure Functionsにリクエスト(/api/*)が送信される感じになります。その時、プライマリーリージョンで障害が発生している場合は、フェールオーバーを行い、セカンダリーリージョンのAzure Functionsにリクエストが自動的に送信される構成を実現していきたいと思います。

Azure Front Doorを利用したシステム構成図

【前提条件】

  • フロントエンドリソース(Azure Static Web Appsとか)がデプロイ済み
  • バックエンドAzure Functionsが2つのリージョンにデプロイ済み
  • (Azure Functionsの認証方法=Functionの場合)2つのリージョンにデプロイしたAzure Functionsの関数キー(ホストキー)が共通化されている。
  • DNSレコード編集可能なカスタムドメインを保持している

上記のような前提条件のもと進めていきたいと思います。

Azure Front Doorの構築手順

AFDリソースの作成

まずはAzure Front Doorリソースをデプロイしていきます。マーケットプレイスから「Front Door」あたりで検索してもらえば出てくるはずの「Front Door and CDN profiles」を選択します。

マーケットプレイスからFront Doorで検索

Front Door and CDN profilesの「作成」ボタンをクリックします。

Front Doorリソースを作成

以下の画面が表示されます。本当は空っぽのところにいろいろ追加していこうと思ったのですが、なんかうまくできなかったので、上段の「Azure Front Door」を選択(これはマストですね)し、下段は「カスタム作成」を選択後、「フロント ドアの作成を続行する」をクリックします。

Front Doorオファリングの選択

以下の画面で、サブスクリプション、リソースグループなどを選択したら名前を入力し課金レベルを選択します。今回は「Standard」ティアを選択します。「次へ:シークレット」ボタンをクリックします。ちなみにStandardとPremiumの違いは、ボット対策やプライベートリンクなど追加のセキュリティ機能があるかないかとかですかね。

Front Doorのリソース名の入力

以下の画面では、持ち込みのSSL/TLS証明書を追加することができますが、Azure Front Doorが用意して自動で更新してくれる無料のマネージド証明書が利用できますので今回はパス。「次へ:エンドポイント」をクリックします。

Front Doorシークレットの設定

Azure Front Doorでは、HTTPS通信を構成する際に「シークレット」という概念を使います。これは、Azure Key Vaultに格納されたSSL/TLS証明書をFront Doorが安全に参照するための設定情報です。シークレットを通じて証明書のバージョン管理や自動更新が可能となり、セキュリティと運用性の両立が図れます。

エンドポイントの作成

ここからがAFD設定の本番です。AFDの設定は「エンドポイント」、「ルート」、「配信元グループ」がキモとなってきます。

エンドポイントとルート、配信元グループは以下のような関連性になっています。一例です。

エンドポイント、ルート、配信元グループの関連性

今回はリソース作成時に設定していこうと思いますが、あとで設定することも可能です。まずはエンドポイントを作成していきますので、「エンドポイントの追加」ボタンをクリックします。

エンドポイントの追加

「エンドポイントの追加」パネルが表示されるので、エンドポイント名を入力します。今回は「dr-demo」というエンドポイント名にします。すると自動的にエンドポイントのホスト名が生成されます。よろしければ「追加」をクリックしましょう。

エンドポイント名の入力

ルートの作成

エンドポイントが作成されると以下の画面になります。作成されたエンドポイントのホスト名は赤下線で示す場所に表示されます。エンドポイントの配下にルートを追加していきましょう。「ルートの追加」をクリックします。

新規ルートの追加

カスタムドメインの割り当て

ルートの追加ブレードが表示されます。まずはAFDにカスタムドメインを追加したいと思うので、「新しいドメインの追加」をクリックします。ここでカスタムドメインを追加する必要はなく、もちろん後から設定可能です。

新しいドメインの追加

ドメインの追加ブレードが表示されるので、以下の表のとおり設定して「追加」をクリックしましょう。ちなみに今回はエックスサーバーで管理している当サイトのドメインにサブドメインを追加してAFDのカスタムドメインとして利用するテイで進めます。

カスタムドメインの追加設定
設定項目設定値
ドメインの種類Azure以外の検証済みドメイン
DNSの管理その他すべてのDNSサービス
カスタムドメイン(自身で管理しているAFDに割り当てるドメインを入力)
証明書の種類AFDマネージド(推奨)
TLSポリシーよしなに。最新でいいと思う。。。

すでにAzure Static Web Appsなどの別リソースにカスタムドメインを割り当てている場合、[ドメインの種類]で「Azureの事前検証済みドメイン」を選択すると、[事前検証済みのカスタムドメイン]にその設定済みのドメインがでてくるので、簡単だ~とつい選びたくなってしまうのですが、その場合、AzureマネージドSSL証明書の更新はカスタムドメインを割り当てたリソースに依存します。

【参考リンク】https://learn.microsoft.com/ja-jp/azure/frontdoor/domain#rotate-own-certificate

ですのでAFDにカスタムドメインを割り当てたあと、もう不要だとSWAのカスタムドメインを削除しようものならSSL証明書の更新が出来ず、サイトは停止します。この一文(「Azure マネージド証明書は、ドメインを検証する Azure サービスによって自動的にローテーションされます。」)で理解するのはちょっとハードル高すぎますが、(せめて「AFDは他のリソースで割り当てたカスタムドメインの証明書まで更新はせんよ!!」くらい書いてよ・・・自分の理解力のなさ?)極力AFD側で証明書の更新が可能なように「AFDマネージド」証明書を利用するのがよいのではないでしょうか。(ちなみにリソース正常性アラートもしっかり確認しましょうよwww)

Azureマネージド証明書利用時の注意事項

カスタムドメインの追加が完了すると、ルートの追加ブレードに戻ってくるので、ルート名を入力し、先ほど追加したカスタムドメインにチェックを付け、デフォルトのドメインは利用しないのでチェックを外しましょう。カスタムドメインはあとの手順で検証作業が必要になります。次に配信元グループを追加するので、「新しい配信元グループを追加する」をクリックします。

配信元グループの追加

配信元グループの作成

[配信元グループの追加]パネルが表示されるので、適当な名前を入力しましょう。今回はフロントエンドの配信元とするので、「drdemo-frontend-group」としました。次に「配信元の追加」をクリックします。

配信元の追加

[配信元の追加]パネルが表示されます。フロントエンドのアプリを配信元として設定していくので、[配信元の種類]を「静的WEBアプリ」、[ホスト名]にフロントエンドアプリとして利用するSWAリソースを指定し、「追加」ボタンをクリックしましょう。

配信元のホストの選択

[配信元グループの追加]パネルに戻り、配信元のホスト名としてフロントエンドアプリが表示されて有効になっていればOKです。「追加」をクリックしていきましょう。

配信元の確認画面

[ルートの追加]ブレードに戻ってきます。配信元グループとして先ほど作成した配信元グループ名がセットされていることを確認します。あ、「一致するパターン」ですが、フロントエンドアプリとしてすべてSWAに流すので、ここでは「/*」のままでOKです。ご自身の環境に合わせてご対応ください。また、CDNとしてキャッシュを利用する方も「キャッシュを有効にする」をよしなに。「追加」ボタンをクリックします。

ルートの追加を実行

[Front Doorプロファイルの作成]画面まで戻ってきました。作成したルート、配信元グループ、ドメインが表示されているのが確認できます。フロントエンドとしての設定は完了したので、あとはバックエンドのルートを追加しようと思ったのですが、なぜか更なる「ルートの追加」が出来んかった・・・(。´・ω・)?なぜ?ちょっとわからないので、バックエンド用のルートはリソース作成後の画面から行っていきたいと思います。あ、あと今回はWAF機能は利用しませんので割愛します。「確認および作成」ボタンをクリックしましょう。

リソース作成時にルートの追加ができない?

「作成」をクリックすればリソースの作成が始まります。

Front Doorリソース作成の確認画面

無事AFDリソースのデプロイが完了しました。それではリソース作成時にはできなかったバックエンド用のルート作成を追加で行っていきましょう。「フロントドアマネージャー」を選択します。

Front Doorリソース作成完了画面

フロントドアマネージャーからのルート追加

[フロントドアマネージャー]ブレードが開きます。基本的な操作はフロントエンド用ルートを作成したリソース作成時の操作と一緒です。エンドポイントに対して「ルートの追加」を行っていきます。

フロントドアマネージャー画面からのルート追加

ルートを追加していきます。バックエンド用ルートということがわかるような名前を付けましょう。あ、ルートのスペル間違ってますね。正しくはrouteですね。お気になさらずw

ドメインはリソース作成時に追加したカスタムドメインを選択します。

バックエンド用ルートの追加

以下のエラーが表示されます。要するに「どっちのルートに行くかの判断ができない同じURLパターンが設定されているよ」とのことですので、フロントエンド用ルートで設定済みの「/*」を削除して、Azure Functionsのエンドポイントとなる「/api/*」を追加しましょう。(直接「/*」を「/api/*」に変更してももちろんOK)

URLパターンの修正

次にバックエンド用の配信元グループをこのルートに追加します。「新しい配信元グループを追加する」をクリックします。

バックエンド用配信元グループの追加

名前を入力して「配信元の追加」をクリック。

バックエンド用配信元の追加

[配信元の追加]パネルが表示されるので、バックエンドAzure Functionsを設定するので、[配信元の種類]を「App Services」、[ホスト名]にまずはプライマリーリージョンのAzure Functionsリソースを指定し、「追加」ボタンをクリックしましょう。

プライマリーのAzureFunctionsを配信元として追加

プライマリーリージョンのAzure Functionsが配信元として追加されました。同様に「配信元の追加」を行い、今度はセカンダリーリージョンのAzure Functionsを配信元として追加しましょう。

プライマリーのAzureFunctionsを配信元として追加完了した画面

[配信元の種類]を「App Services」、[ホスト名]にセカンダリーリージョンのAzure Functionsリソースを指定します。また、優先順位をプライマリーリージョンで設定されている優先順位より大きな値(今回は「2」)に変更後、「追加」ボタンをクリックします。

セカンダリーのAzureFunctionsを配信元として追加

配信元グループとして2つのリージョンにあるAzure Functionsが追加されました。優先順位値が小さいホストに優先的にトラフィックが割り当てられる形で負荷分散が行われます。

プライマリーのAzureFunctionsを配信元として追加完了した画面

ルートの追加ブレードに戻ってきました。バックエンド用の配信元グループが設定されているのを確認し、「追加」をクリックしましょう。

バックエンド用ルートの追加実行

フロントドアマネージャーに戻ってきました。エンドポイントにフロントエンド用とバックエンド用の2つのルートが存在するようになっていればOKですね。最後に追加したカスタムドメイン追加に関する手順を行っていきたいと思います。「ドメイン」をクリックしてください。

カスタムドメインの追加

カスタムドメインの所有権確認&エンドポイントのリダイレクト設定

カスタムドメインは追加しただけではそのまま利用できません。ご自身が所有するドメインであるかどうかの検証と、カスタムドメインでアクセスされたときにAFDエンドポイントへリダイレクトされるようにDNSレコードにCNAMEレコードの追加が必要です。

カスタムドメインの所有権確認

[ドメイン]ブレードで[検証の状態]を確認すると、所有権の検証が済んでいないと「保留中」となっていると思います。「保留中」をクリックします。

検証の状態の保留中をクリック

以下のパネルが表示されるので、「レコード名」、「レコードの値」を、ドメインを管理しているDNSプロバイダーのDNSレコード管理画面で追加してください。自分はエックスサーバーですので、エックスサーバーサーバーパネルの[ドメイン]-[DNSレコード設定]よりTXTレコードとして追加しました。

カスタムドメインの所有権確認のための値を取得

DNSレコードを追加した後、しばらく(結構待つと思う・・・)すると検証の状態が「承認済み」になればカスタムドメインの所有権の確認はOKです。ですがまだ「DNSの状態」が「CNAMEまたはエイリアスレコードが検出されていません」となっているのでこれを解決してAFDの導入が完了します。

カスタムドメインの所有権が承認された画面

カスタム ドメインとAzure Front Doorエンドポイントとの関連付け

最後の手順です。カスタムドメインでアクセスされたときにAFDにリダイレクトされるように設定していきたいと思います。

まずはAFDのフロントドアマネージャーにアクセスし、AFDのエンドポイントをコピーします。

Front DoorのエンドポイントURLを取得する方法

次にドメインのDNSプロバイダーの管理画面よりCNAMEレコードとしてコピーしたAFDのエンドポイントを登録してください。自分はエックスサーバーですので、こんな感じ。

エックスサーバー側でのDNSレコードの編集

こちらもそこそこ結構な時間かかると思いますが、DNSの状態が「トラフィックは安全に配信されます」になれば無事Azure Front Doorのセットアップ完了です。お疲れさまでした!!

カスタムドメインの設定が完了した画面

Azure Front Doorはグローバルなサービスであるため、DNSレコードの検証も世界中のエッジノードから行われます。DNSレコードが一部の地域で反映されていても、他の地域ではまだキャッシュが残っている可能性があり、これが「承認済み」や「トラフィックは安全に配信されます」になるまでの遅延につながるようです。

Azure Front Doorのセットアップが完了しました。これが今回の最終形態です。

Front Doorのすべての設定が完了

Azure Front DoorでのDR構成が機能しているか確認

それでは最後に稼働確認を行っていくのですが、まずはバックエンドAzure FunctionsのCORS設定をカスタムドメインを受け入れるように忘れずに変更しておきましょう。プライマリー、セカンダリー、両方ともね。また、プライマリーとセカンダリーのAzure Functionsの認証がFunctionsの場合はアプリキーの共通化も忘れずに行っておいてください。

CORS設定を変更する

では、まずは通常パターン。プライマリーリージョンがピンピンしている場合。ちゃんと「primary」が返ってきているのでプライマリーリージョンのAzure Functionsが呼び出されているのが確認できます。

通常時のレスポンス結果

それでは次にリージョン障害が発生したシチュエーションを。プライマリーリージョンのAzure Functionsを停止させます。

プライマリーのバックエンドを停止させる

プライマリーリージョンのバックエンドが停止しました。

プライマリーのバックエンドが停止している様子

この状態でフロントエンドStatic Web Appsを起動してリクエストをバックエンドに送信してみます。おお!「secondary」が返ってきているのでちゃんとセカンダリーリージョンのバックエンドにフェールオーバーされたことが確認できました!素晴らしい(*^^)v

フェールオーバーされたレスポンス結果

最後に停止させていたプライマリーリージョンのAzure Functionsを再開させてもう一度フロントエンドを実行します。OK!!ちゃんとプライマリーリージョンのバックエンドにフェールバックされました。いいね~~~~。

フェールバックされたレスポンス結果

さいごに

Azure Front Doorの構築は、一見複雑に見えるかもしれませんが、エンドポイント・ルート・配信元グループの関係性をしっかり把握していれば、実は非常にシンプルかつ論理的です。今回の投稿ではCDNやWAFなどのセキュリティ・高速化機能には触れていませんが、AFDはそれらを必要に応じて柔軟に組み合わせられる点が大きな魅力です。

価格面ではTraffic Managerより大分お高めですが、WAFによるセキュリティ強化、CDNによる高速配信、Private Linkによる安全なバックエンド接続など、トラフィック分散だけにとどまらない多機能性がAFDの強みです。さらに、AFD経由以外のアクセスを遮断する制御も可能で、

バックエンドをパブリックに晒すことなく、安全な構成を実現できる!すごくいいっ!!

おまけに、Cookieを扱っているのならサードパーティCookieとして最近のブラウザーのCookie規制強化の影響も受けることなくバックエンドとフロントエンドのカスタムドメインを統一する手間も省ける!!ディ・モールト、ディ・モールト、良いぞッ!!

グローバルな可用性、セキュリティ、パフォーマンスを一手に担えるこのサービスは、モダンなWebアーキテクチャの中核として非常に優秀だと感じています。

以上、DR構成時におススメのAzure Front Doorに変えてみた編でした!!


システムエンジニアランキング

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

コメント

タイトルとURLをコピーしました