IISをインストールしたWindows Server 2022 EC2インスタンスへのヘルスチェックの設定をいろいろ試してみた

IISをインストールしたWindows Server 2022 EC2インスタンスへのヘルスチェックの設定をいろいろ試してみた

Clock Icon2025.02.21

はじめに

IISをインストールしたWindows Server 2022 EC2インスタンスに対してALBのヘルスチェックを設定する際、IIS側のドキュメントルートの設定ってどこで設定すればいいんだろう?あまり触ったことないしよく分からん!ということで実際にやってみました。

今回検証したWebサーバーの情報

EC2のAMI: ami-0dab59e353c1fabc0
サーバーのsysteminfo

PS C:\Windows\system32> systeminfo
Host Name:                 EC2AMAZ-5J7UEPQ
OS Name:                   Microsoft Windows Server 2022 Datacenter
OS Version:                10.0.20348 N/A Build 20348
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Server
OS Build Type:             Multiprocessor Free
Registered Owner:          EC2
Registered Organization:   Amazon.com
Product ID:                00454-60000-00001-AA664
Original Install Date:     2/21/2025, 1:52:53 AM
System Boot Time:          2/21/2025, 1:52:16 AM
System Manufacturer:       Amazon EC2
System Model:              t3.small
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2500 Mhz
BIOS Version:              Amazon EC2 1.0, 10/16/2017
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume1
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC) Coordinated Universal Time
Total Physical Memory:     2,010 MB
Available Physical Memory: 596 MB
Virtual Memory: Max Size:  3,162 MB
Virtual Memory: Available: 1,771 MB
Virtual Memory: In Use:    1,391 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    WORKGROUP
Logon Server:              N/A
Hotfix(s):                 6 Hotfix(s) Installed.
                           [01]: KB5049617
                           [02]: KB5012170
                           [03]: KB5051979
                           [04]: KB5044414
                           [05]: KB5050117
                           [06]: KB5034439
Network Card(s):           1 NIC(s) Installed.
                           [01]: Amazon Elastic Network Adapter
                                 Connection Name: Ethernet 3
                                 DHCP Enabled:    Yes
                                 DHCP Server:     10.0.0.1
                                 IP address(es)
                                 [01]: 10.0.0.33
                                 [02]: fe80::b9d1:62b3:77fe:ddff
Hyper-V Requirements:      A hypervisor has been detected. Features required for Hyper-V will not be displayed.

IISのバージョン情報

PS C:\Windows\system32> reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp
    IISProgramGroup    REG_SZ    Microsoft Internet Information Services
    InstallPath    REG_EXPAND_SZ    %windir%\system32\inetsrv
    MajorVersion    REG_DWORD    0xa
    MinorVersion    REG_DWORD    0x0
    PathWWWRoot    REG_EXPAND_SZ    %SystemDrive%\inetpub\wwwroot
    ProductString    REG_SZ    Microsoft Internet Information Services
    SetupString    REG_SZ    IIS 10.0
    VersionString    REG_SZ    Version 10.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components

ALBのヘルスチェック機能

今回の構成はIISをインストールしたWindows Server2022(EC2)に、ALBからヘルスチェックを行う簡単な構成です。
無題

この構成でヘルスチェックを行うパターンを色々試してみます。

まずはALBのヘルスチェックが機能していることを確認します。
ターゲットグループのヘルスチェックステータスを確認します。
CleanShot 2025-02-21 at 11.06.47@2x

Healthyとなっていますね。
ヘルスチェックはWebサーバーに対して定期的にリクエストを送信して、リクエスト結果からサーバーのステータスを判断します。

EC2側のログで該当時間にヘルスチェックを受けていることも確認できます。

> type "C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log" | findstr "ELB-HealthChecker"

2025-02-21 03:30:35 10.0.0.33 GET / - 80 - 10.0.17.80 ELB-HealthChecker/2.0 - 200 0 0 1
2025-02-21 03:30:36 10.0.0.33 GET / - 80 - 10.0.9.203 ELB-HealthChecker/2.0 - 200 0 0 0
2025-02-21 03:30:40 10.0.0.33 GET / - 80 - 10.0.17.80 ELB-HealthChecker/2.0 - 200 0 0 1
...

どういう仕組みになってる?

どのファイルに対してヘルスチェックしてる?

どのファイルに対してヘルスチェックを実行しているかというと、デフォルトではIISマネージャーのDefault Documentに登録したファイルに対してヘルスチェックを行なっています。

確認してみます。
IISマネージャーを開いて
ホスト名 > Sites > Default Web Siteの順に進みます。
Default Documentが開かれて、いくつかのファイルが登録されていることが分かります。
CleanShot 2025-02-21 at 11.16.01@2x

上の方にDefault Documentの説明が書かれています。

Use this feature to specify the default file(s) to return when a client does not request a specific file. Set Default Documents in order of priority.

書かれている通り、Default Documentはクライアントが特定のファイルを要求しなかったときに返すデフォルトのファイルを登録するための設定です。
今回の場合はクライアントがALBのヘルスチェックに当たります。

どのフォルダを見てるの?

Default Documentの画面ではファイル名しか書かれていませんね。
では、Default Documentに登録したファイルはどこに配置するのでしょうか?

Default Documentが探しに行く先は物理パスで設定されています。

再度、IISマネージャーから
ホスト名 > Sites > Default Web Siteの順に進みます。
Default Web Siteを右クリックしてManage Website > Advanced Settingsの順にクリックします。
CleanShot 2025-02-21 at 13.02.23@2x

設定一覧のPhysical Pathがヘルスチェックを行うファイルを配置するフォルダです。
デフォルトではC:\inetpub\wwwrootが設定されています。
CleanShot 2025-02-21 at 13.02.39@2x

物理パスのフォルダを見てみる

物理パスで設定されたC:\inetpub\wwwrootを見てみましょう。
CleanShot 2025-02-21 at 11.12.14@2x

デフォルトではiisstart.htmが置かれていますね。
Default Documentにiisstart.htmが登録さいるので、ヘルスチェックはこのiisstart.htmに対して行われていることが分かりました。

ここからはALBのヘルスチェックパス、Default Document、物理パスを変更しながら動作を検証していきます。

ALBのヘルスチェックパスを変更

【条件】
ALBヘルスチェックパス: /
Default Document: デフォルト
物理パス: %SystemDrive%\inetpub\wwwroot

フォルダ構成
└── C
    └── inetpub
        └── wwwroot
            └── health.txt

Default Documentに存在しないファイルを物理パスのフォルダに置くパターンを試してみます。
これはUnhealtyになりました。
CleanShot 2025-02-21 at 11.18.17@2x

想定通りの結果です。Default Documentでhealth.txtが指定されていないからですね。

ではALBのターゲットグループのヘルスチェックパスを/health.txtに変更するとどうなるでしょうか?
条件を変更します。
【条件】
ALBヘルスチェックパス: /health.txt
Default Document: デフォルト
物理パス: %SystemDrive%\inetpub\wwwroot
CleanShot 2025-02-21 at 11.29.52@2x

ALBのヘルスチェックパスを変更しました。
これはHealtyになりました。
つまり、物理パスで設定したC:\inetpub\wwwrootの配下にあればALBのヘルスチェックパスを変更するだけでヘルスチェックが通ります。

階層構造

次に、条件はそのままでhealth.txtの配置する階層を深くしてみます。
新たにフォルダを作成してC:\inetpub\wwwroot\Health\の配下にhtalth.txtを配置します。これはどうでしょうか。
これもHealtyになりました。

つまり、C:\inetpub\wwwroot の配下であれば階層構造でもヘルスチェックが可能ということが分かりました。
サーバー側に変更を加えず、ALBのヘルスチェックパスで制御したい場合はこの方法がよさそうです。

Default Documentを変更

【条件】
ALBヘルスチェックパス: /
Default Document: health.txt 追加
物理パス: %SystemDrive%\inetpub\wwwroot

└── C
    └── inetpub
        └── wwwroot
            └── health.txt

Default Documentにhealth.txtを追加して、C:\inetpub\wwwroot 配下にもhealth.txtを配置したパターンです。

これはHealtyになりました。想定通りの動きですね。
ALBのヘルスチェックパスをデフォルト/から変更したくない場合はこの方法が使えます。

物理パスを変更

【条件】
ALBヘルスチェックパス: /
Default Document: デフォルト
物理パス: %SystemDrive%\Health

└── C
    └── Health
        └── health.txt

最後に物理パスを変更するパターンです。
物理パスを%SystemDrive%\inetpub\wwwrootから%SystemDrive%\Health に変更しました。
また、フォルダ構成も新たに作成したC:\Healthの下にhealth.txtを配置しました。

これはHealtyになりました。
物理パスを変更することで、ユーザーの指定した特定のフォルダにヘルスチェック先を向けることができます。

ヘルスチェックを自身のWebサイトのトップページに向けたいけど、プロジェクトのフォルダ内がC:\inetpub\wwwroot 配下ではない場所にある時などには物理パスを変更する方法が考えられます。

余談

Default Documentの管理方法として、物理パスに指定されたフォルダ内のweb.configファイルを編集する方法もあります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <defaultDocument enabled="true">
            <files>
                <add value="health.txt" />
	         	<add value="test.txt" /> <--ここに追加するとDefault Documentにも追加される
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>

まとめ

【ALBのヘルスチェックパスを"/"で固定したい場合】

  • Default Documentに登録された規定のファイルをC:\inetpub\wwwrootに配置する(デフォルトでiisstart.htmlが存在する)
  • Default Documentに任意のファイルを登録して、C:\inetpub\wwwrootにファイルを配置する

【ALBのヘルスチェックパスだけ変更したい場合】

  • ヘルスチェックパスを変更して、C:\inetpub\wwwrootにファイルを配置する(階層構造も可)

C:\inetpub\wwwroot以外に配置したファイルにヘルスチェックを行いたい場合】

  • IISマネージャーから、Default Documentの物理パスを変更する

IISに慣れていないので、IISでの物理パスやDefault Documentの設定方法に戸惑いましたが、実際に触りながらヘルスチェックの挙動が確認できたので理解が深まりました。

ヘルスチェックは数秒間隔でリクエストを送り続けるため、サーバーへの負荷を考慮してヘルスチェック用のファイルを用意することはよくあると思います。
そのようなケースではWebサーバーの設定をなるべく変更することなく、ヘルスチェック用のファイルをデフォルトの物理パスに配置する方法が管理工数の少ない方法になると思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.