そうですね、IISのバックアップはちょっと面倒です。特にサーバー間でデータを移行しようとしている場合や、安全を確保したい場合などはなおさらです。サイトが起動しなくなったり、突然設定が消えてしまったりすることもあります。ファイル、設定、証明書など、すべてを適切にバックアップする方法を知っておくと、後々頭を悩ませる事態を避けられます。このガイドでは、appcmd、PowerShell、さらにはmsdeployなどの組み込みツールの使い方など、実際の環境で効果があった方法をいくつか紹介しているので、万が一問題が発生しても困ることはありません。
Windows Server で IIS 構成をバックアップおよび復元する方法
Windows Server での IIS のバックアップ
IISを適切にバックアップするには、サイトファイル、SSL証明書、そして構成設定をすべて取得する必要があります。正直なところ、どこか1つでも障害が発生すると、他のすべてが壊れてしまう可能性があります。設定をクローンする簡単な方法があるのに、なぜわざわざ時間をかけて手動で修正する必要があるのでしょうか?サーバーによってはシンプルなバックアップ方法で十分ですが、特に複雑な環境では、完全なスナップショットが必要になる場合があります。
例えば、よくある問題は、すべてを手動でコピーすることです。静的サイトファイルの場合は%SystemDrive%\inetpub\wwwrootをコピーするだけですが、SSL証明書やIIS設定など、同様に重要なものはコピーされません。この問題を軽減するには、一般的に以下の方法が有効です。
ステップ1: IIS Webサイトのファイルをバックアップする
- inetpub\wwwrootフォルダ全体をコピーするか、Windows Server バックアップを使用してこのディレクトリをバックアップ プランに含めることをお勧めします。
- PowerShell では、次のようにバックアップのスクリプトを作成できます。
# Install Windows Server Backup if not installed Install-WindowsFeature -Name Windows-Server-Backup # Backup inetpub directory to a network share wbadmin start backup –backupTarget:\\srv-backup1\backup -include:c:\inetpub\wwwroot -vsscopy
この方法では、静的サイトファイルの完全なコピーを取得できます。特定の設定では、最初の実行が失敗する場合もありますが、再実行または再起動すると解決することがよくあります。必ずしも確実に信頼できるとは限りませんが、すべてを手動で行うよりはましです。
ステップ2: SSL証明書をエクスポートする
- netsh http show sslcertでSSL証明書のリストを取得します。このコマンドは、念のため、すべてのSSLバインディングを表示します。
- 証明書をエクスポートするには、PowerShell が役立ちます。
dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | Foreach-Object { [system. IO. File]::WriteAllBytes( "\\srv-backup1\backup\$($_. Subject).pfx", ($_. Export('PFX', 'secret')) ) }
これにより、SSL鍵を含むPFXファイルが作成されます。ただし、状況によっては完全にエクスポートされない場合があるので、ダウンロードした証明書が後でインポートする際に正常に機能することを必ず確認してください。また、バックアップの保存場所は安全な場所にしてください。秘密鍵は慎重に扱う必要があります。
ステップ3: IIS構成(設定)をバックアップする
これは見落とされがちですが、非常に重要です。組み込みのappcmdツールを使えば、簡単に設定できます。管理者権限のコマンドプロンプトを開き、ディレクトリを変更するだけです。
cd c:\Windows\system32\inetsrv
次に、バックアップ コマンドを実行します。
appcmd add backup srv1-iis-backup-2022_03_10
c:\Windows\system32\inetsrv\backupに新しいフォルダが作成され、そこにapplicationHost.config、administration.config 、その他の重要なXMLファイルを含むすべての設定が含まれています。このフォルダ全体をバックアップ先にコピーするだけです。簡単ですが、定期的にコピーすることを忘れないでください。Windowsはこれらのバックアップを上書きまたは自動で履歴化するため、必要に応じて元に戻すことができます。
新しいサーバー (2016/2019) では、PowerShell のBackup-WebConfigurationコマンドレットも使用できます。
Backup-WebConfiguration -Name MyBackup202203
このコマンドはバックアップを簡素化し、設定をデフォルトのバックアップフォルダ(通常は$env:Windir\System32\inetsrv\backup )に保存します。コマンドよりもスクリプトを好む場合に便利です。
別の Windows Server ホストでの IIS 構成の復元
バックアップをどこか(例えばネットワーク共有や外付けドライブなど)に保存していて、それを別の場所に復元したいとします。手順は複雑ではありませんが、少し注意が必要です。
まず、バックアップフォルダを新しいサーバーのc:\windows\system32\backupにコピーします。バックアップがリストに表示されていることを確認します。
appcmd list backup
バックアップが表示されたら、次のコマンドで復元できます。
appcmd restore backup /stop:true srv1-iis-backup-2022_03_10
/ stop :trueオプションは、設定を適用する前に IIS をシャットダウンするように指示します。これにより、多くの場合、エラーを回避できます。設定が完了すると、サイトは以前の設定のままになります。
あるいは、 Backup-WebConfigurationを使用した場合は、PowerShell を使用して復元することもできます。
Restore-WebConfiguration -Name srv1-iis-backup-2022_03_10
古いバックアップを削除したい場合(つまり、少し整理したい場合)、次のコマンドを実行します。
appcmd.exe delete backup BackupName
get-itemproperty HKLM:\SOFTWARE\Microsoft\InetStp\ | select setupstring, versionstring
また、カスタムアプリケーションプールやSSL証明書が新しいサーバーにインポートされ、使用可能になっていることを確認してください。そうしないと、復元されたサイトが混乱したまま放置されてしまう可能性があります。
自動化に興味があるなら、msdeployツールは頼りになる選択肢です。サイトと設定ファイルを1つのマシンに圧縮して別のマシンにデプロイしたり、増分バックアップを作成したりできます。
msdeploy -verb:sync -source:webServer, computername=192.168.100.112 -dest:package=c:\Backup\IIS\server1_iis_backup.zip
または、個々のサイト/静的ファイルをバックアップします。
msdeploy –verb:sync –source:contentPath="site_name.com", computername=192.168.100.112 -dest:package=c:\Backup\IIS\site_name.zip
ちょっとやり過ぎな気もしますが、完全なクローンを作りたいなら、実環境ではこれがうまくいくのを実際に見てきました。ただし、証明書のインポートと権限チェックは必ず準備しておいてください。Windowsは当然ながら、必要以上に手間取らせてしまうからです。
まとめ
- サイト ファイルをコピーするか、Windows Server バックアップを使用して%SystemDrive%\inetpub\wwwrootを取得します。
- PowerShell または netsh を使用して SSL 証明書をエクスポートします。
- appcmdまたは PowerShell のBackup-WebConfigurationを使用して IIS 構成をバックアップします。
- appcmd restoreまたはRestore-WebConfigurationを使用して構成を復元します。
- 特に移行する場合は、サイト全体のバックアップまたはバッチ バックアップに msdeploy の使用を検討してください。
- 常に IIS バージョンの互換性を確認し、新しいホストに SSL 証明書をインポートします。
まとめ
IISのバックアップは面倒に思えるかもしれませんが、appcmd、PowerShell、msdeployなどのツールの使い方に慣れてしまえば、それほど難しくはありません。確かに、ファイルと設定を手動でコピーするのが一番簡単な方法な場合もありますが、自動化と適切なエクスポートによって、後々面倒な手間を省くことができます。正直なところ、設定と証明書の両方について、定期的なバックアップを設定する価値は十分にあります。サーバーがいつトラブルを起こすかは分かりませんから。この方法が役に立つ、あるいは少なくとも、復元が必要になった時に多くの時間を節約してくれることを願っています。