15
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure での Sorry サーバー考察

Posted at

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

15
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?