IISをインストールしたWindows Server 2022 EC2インスタンスへのヘルスチェックの設定をいろいろ試してみた
はじめに
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のヘルスチェックが機能していることを確認します。
ターゲットグループのヘルスチェックステータスを確認します。
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が開かれて、いくつかのファイルが登録されていることが分かります。
上の方に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の順にクリックします。
設定一覧のPhysical Pathがヘルスチェックを行うファイルを配置するフォルダです。
デフォルトではC:\inetpub\wwwroot
が設定されています。
物理パスのフォルダを見てみる
物理パスで設定されたC:\inetpub\wwwroot
を見てみましょう。
デフォルトでは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になりました。
想定通りの結果です。Default Documentでhealth.txtが指定されていないからですね。
ではALBのターゲットグループのヘルスチェックパスを/health.txtに変更するとどうなるでしょうか?
条件を変更します。
【条件】
ALBヘルスチェックパス: /health.txt
Default Document: デフォルト
物理パス: %SystemDrive%\inetpub\wwwroot
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サーバーの設定をなるべく変更することなく、ヘルスチェック用のファイルをデフォルトの物理パスに配置する方法が管理工数の少ない方法になると思います。