Azure
Sorryサーバ
WebApps

Azure での Sorry サーバー考察

Azure テクノロジーソリューションプロフェッショナルの鈴木祐巳です。
普段は、企業の方々に公開ウェブサイト向けの Azure サービス使っていただけるよう頑張っています。
たまにお客様に尋ねられることに「Sorry サーバーの構築」があります。内心「クラウドなんだから、Sorryサーバーなんか準備しないで、短期的にリソース追加して、トラフィックさばけよ!」と思っているわけですが、提案依頼書(RFP)に 「Sorry サーバー準備」などの項目があると、用意しておく必要があったりするわけです。

ということで、Azure で Sorry サーバーの構築方法を考えてみます。

Web Apps か? Azure Storage か?

Sorry サーバーは、最小限の静的コンテンツを返すことで、大量のアクセスを捌くことを目的としています。静的コンテンツを扱えればよいので、クラウドを使うのであれば、ウェブサーバーではなく、https/http でアクセスできるストレージ、Azureなら、Blob Storage をウェブサーバー代わりにつかって、配信する
いわゆる10円サーバー的な使い方で、Sorry サーバー構築を考慮されることもあると思います。実際に、最初は、Storage を使って、Sorry サーバーを構築しようと思いました。
Blob Storage を静的コンテンツ向けウェブサーバーとして利用する方法は、検索するとイロイロでてくると思うので、ここでは割愛します。が、実際に、Storage を使用すると、1つ問題があります。

Sorry ページのステータスコードは、200? 503?

Storage をウェブサーバー代わりにつかうと、ステータスコードは、200となり、検索エンジンにキャッシュされる可能性があります。それを避けるために、Sorry ページのステータスコードは503、つまりは、Service Unavailable であるのが適切と言われています。実際には、ステータスコード200で Sorry ページを運用されている例もあるので、Storage を Sorry ページに使うのは絶対にNGという訳ではないですが、できれば、ステータスコード503を返す Sorry サーバーを構築したいところです。ということで、App Service Web Apps の出番となります。

Web Apps で、オリジナルな静的コンテンツをホストしつつ、ステータス 503 を返す。

独自ドメイン運用が必要な場合が多いと思いますので、Shared上のプランが必要になります。Shared プランだと、パフォーマンスの懸念を感じることもありますが、前段にCDNを配置することで、Shared での運用も、パフォーマンス的に問題にならない事も多いと思います。SLAが必要なら、Basic 以上での運用も考慮したいところですが、そうなると価格が一気にあがってきますので注意が必要です。すでに、他のサイト運用で、Basic プラン以上の App Service Plan を作成している場合には、その App Service Plan に Web Apps を追加するという運用をするのが良いと思います。
ここでは、Windows 版の Web Apps を使う前提です。ということで、IIS の設定での、カスタムページを表示しつつ、ステータスコード503を返す設定を web.config にて行います。設定例は以下の通りです。

web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="SiteDown" stopProcessing="true">
                    <match url=".*" />
                    <action type="CustomResponse" statusCode="503" statusReason="Down for Maintenance" statusDescription="Will be back soon" />
                </rule>
            </rules>
        </rewrite>
        <httpErrors existingResponse="Auto" errorMode="Custom" defaultResponseMode="File">
         <remove statusCode="503" subStatusCode="-1" /> 
            <error statusCode="503" path="503.html" />
     </httpErrors>
    </system.webServer>
</configuration>

運用ウェブサーバーから Sorry サーバーへの切り替え

運用ウェブサーバーと Sorry サーバーの切替は、DNS CNAMEの手動書き換えで実施してもよいのですが、Azure では、Traffic Manager を使うことで、運用サーバーがなんらかの状況で停止した際に、自動切り替えが可能です。Traffic Manager のルーティング方法の設定で「優先度」を選択肢、Sorry サーバーを最も優先度の低いサーバーとして登録することで、運用サーバーにトラブルが発生した際に、自動的に、Sorry サーバーに切り替わるようになります。
TM.png