IIS 7.0 の構成履歴の使用

公開日: 2007 年 11 月 22 日 (作業者: saad (英語))

更新日: 2009 年 5 月 12 日 (作業者: saad (英語))

はじめに

IIS 6.0 には、管理者が IIS の構成の変更内容を簡単に確認できるセーフティ ネットがありました。 これは容易に復元できる履歴ファイルとして実装されており、構成に対して発生したイベントの有用な履歴として機能していました。 アプリケーションのインストール、アップグレード、またはメタベースへの個々の変更において不具合が発生した場合、ユーザーは動作する状態を復元することができます。

IIS 7.0 の新しい構成でも、IIS チームは同じ "セーフティ ネット" を求めていましたが、構成アーキテクチャの変更のために、IIS 6.0 の履歴機能は使用できませんでした。 IIS 7.0 では、マスター構成ファイル ApplicationHost.config に対する変更を監視し、必要に応じて後で取得できるスナップショットを定期的に作成するサービスを作成することによって、この問題を解決しました。

この機能を、IIS 7.0 の構成履歴と呼びます。 このウォークスルーでは、この機能の仕組みを示します。

このウォークスルーでのタスク

  • configHistory の既定の構成設定を確認する
  • configHistory 機能が正常に動作していることを検証する
  • 保持する構成ディレクトリの数 (maxHistories) および期間の属性を変更する
  • configHistory のバックアップを保存するための既定のパスを変更する
  • バックアップ ファイルから構成を復元する

タスク 1: configHistory の既定の構成設定を確認する

このタスクでは、IIS 7.0 の既定のインストールを実行した後、使用できる構成オプションを確認します。 後のタスクでは、これらの設定の一部を変更して、環境に合わせた機能の柔軟性を示します。

手順 1: applicationHost.config を開く

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、[名前] ボックスに「notepad」と入力し、[OK] をクリックします。
    Ee890781.Fig1(ja-jp,TechNet.10).png
    図1: メモ帳で構成を開く

  2. [ファイル] メニューの [開く] をクリックし、[ファイル名] ボックスに「%windir%\system32\inetsrv\config\applicationHost.config」と入力します。 [開く] をクリックします。
    Ee890781.Fig2_1(ja-jp,TechNet.10).png
    図2: ApplicationHost.config のパス

  3. configHistory セクションを検索するために、Ctrl キーを押しながら F キーを押して、「configHistory」と入力し、[次を検索] をクリックします。

マスター ファイルを開いた後、次のような configHistory のエントリが表示されます。

sectionGroup name"system.applicationHost>

    <section name="applictionPools" allowDefinition="AppHostOnly" overrideMode="Deny" />

    <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

       <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

       <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

       <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

       <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

       <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /> 

</sectionGroup>

applicationHost.config では、この機能の設定はこれだけです。 既定では、IIS 7.0 は IIS 7.0 スキーマに格納された値を使用するので、これは想定された動作です。 既定の設定を表示するには、IIS 7.0 スキーマ ファイル (IIS_schema.xml) を開きます。

手順 2: IIS スキーマで configHistory の既定値を検索する

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、[名前] ボックスに「notepad」と入力し、[OK] をクリックします。

  2. [ファイル] メニューの [開く] をクリックし、[ファイル名] ボックスに「%windir%\system32\inetsrv\config\schema\iis_schema.xml」と入力します。
    Ee890781.Fig3_1(ja-jp,TechNet.10).png
    図 3: IIS スキーマ

  3. configHistory セクションを検索するために、Ctrl キーを押しながら F キーを押して、「configHistory」と入力します。

  4. Windows Server® 2008 では、次のように表示されます。
    Ee890781.using iis 7 configuration history(ja-jp,TechNet.10).jpg

図 4: configHistory スキーマ定義

configHistory セクションには、4 つの構成可能な設定 (属性) があります。  

<table>
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<tbody>
<tr class="odd">
<td><p><strong>属性</strong></p></td>
<td><p><strong>既定の設定</strong></p></td>
<td><p><strong>定義</strong></p></td>
</tr>
<tr class="even">
<td><p><strong>enabled</strong></p></td>
<td><p>True</p></td>
<td><p>この値は、構成履歴が有効であるか、無効であるかを示します。</p></td>
</tr>
<tr class="odd">
<td><p><strong>path</strong></p></td>
<td><p>%systemdrive%\inetpub\history</p></td>
<td><p>履歴ディレクトリを作成および保存するパス。</p></td>
</tr>
<tr class="even">
<td><p><strong>maxHistories</strong></p></td>
<td><p>10</p></td>
<td><p>IIS 7.0 で保持されるディレクトリの最大数。</p></td>
</tr>
<tr class="odd">
<td><p><strong>period</strong></p></td>
<td><p>00:02:00</p></td>
<td><p>IIS 7.0 で変更のチェックが行われる時間間隔。</p></td>
</tr>
</tbody>
</table>

まとめ

比較的単純ですが、このタスクを見過ごさないでください。 configHistory セクションで使用可能な構成属性を直接確認することができます。環境に基づく機能の柔軟性を示すデモとして、後でこれらの設定を変更します。

タスク 2: configHistory 機能が正常に動作していることを検証する

このタスクの目標は configHistory の動作を確認することです。 さらに、IIS 6.0 のメタベース履歴を理解している経験豊富な管理者は、このタスクで 2 つの機能の違いを学習できます。

メタベース履歴は、IIS 7.0 の構成履歴のようなディレクトリ ベースではなく、ファイル ベースでした。 たとえば、IIS 6.0 のすべてのバックアップは、カスタマイズできない同じ場所に保存されていました。 IIS 7.0 では、作成時にそれぞれ一意のコピーが独自のディレクトリに保存されます。 このタスクでは、IIS マネージャーを使用して IIS 7.0 の構成ファイルに変更を加え、これらの変更の結果を確認します。

手順 1: Web サイトを作成する

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックして「Inetmgr」と入力し、[OK] をクリックします。
    Ee890781.Fig5_1(ja-jp,TechNet.10).png
    図 5: IIS マネージャーを開く

  2. サーバー名 (IIs7Server など) をダブルクリックして、ナビゲーション ツリーを展開します。

  3. サーバーを右クリックし、[Web サイトの追加] をクリックします。.
    Ee890781.Fig6_1(ja-jp,TechNet.10).png
    図 6: [Web サイトの追加]

  4. [Web サイトの追加] ダイアログ ボックスで、情報を入力して新しい Web サイトを作成します。 その例を次に示します。
    Ee890781.Fig7(ja-jp,TechNet.10).png
    図 7: [Web サイトの追加] ダイアログ ボックス

  5. [OK] をクリックします。

  6. 次のように、IIS マネージャーで作成した新しい Web サイトが表示されます。
    Ee890781.Fig8(ja-jp,TechNet.10).png
    図 8: IIS マネージャーのホーム ページ

    次に、構成の変更の正常なバックアップが、Application Host Helper Service によってキャプチャされていることを確認します。

手順 2: applicationHost.config の履歴ファイルを検索する

注: 以下の手順を実行した後、コピーがすぐに表示されない場合があります。 これは、既定値が 2 分であるためです。 コピーが作成されない場合は、2 分間待ったことを確認してください。

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、「%systemdrive%\inetpub\history」と入力して開きます。     
    Ee890781.Fig9(ja-jp,TechNet.10).png
    図 9: 構成履歴の既定のパス

  2. history フォルダーをダブルクリックし、最新の変更を探します。
    Ee890781.Fig10(ja-jp,TechNet.10).png
    図 10: ApplicationHost.config の履歴ファイル

    注: history フォルダー内でコピーが見つからない場合は、Application Host Helper Service が実行されていることを確認します。 イベント ビューアーで、IIS-AppHstSvc によって潜在的なエラーがスローされていないか確認します。 

**** Ee890781.Fig11(ja-jp,TechNet.10).png 図 11: Application Host Helper Service

まとめ

このタスクでは、IIS 7.0 の構成履歴機能の仕組みについての理解を深めました。 まず、ApplicationHost.config に変更を加え、スケジュールされている次の機会に Application Host Helper Service でコピーが作成されるようにトリガーします。 さらに、コピーを検索し、%systemdrive%\inetpub\history に正しくコピーが作成されていることを検証しました。

タスク 3: 保持する構成ディレクトリの数 (maxHistories) および期間の属性を変更する

このタスクの目標は、IIS 7.0 で保持される履歴ファイルの数を正しく変更することです。 既定値はスキーマに格納されているので、applicationHost.config に configHistory セクションを作成し、適切な属性と、maxHistories および period 属性の値を追加します。

このタスクでは、メモ帳を使用してこの属性を変更して、IIS 7.0 の ApplicationHost.config の編集の柔軟性と容易性を示します。

手順 1: applicationHost.config を開く

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、[名前] ボックスに「notepad」と入力し、[OK] をクリックします。
  2. [ファイル] メニューの [開く] をクリックし、[ファイル名] ボックスに「%windir%\system32\inetsrv\config\applicationHost.config」と入力し、[開く] をクリックします。

次の手順では、構成セクションを追加し、属性と値を追加します。

手順 2: configHistory セクションと Add maxHistory を追加する

  1. configHistory セクションを検索するために、Ctrl キーを押しながら F キーを押して、「<system.applicationHost」と入力します。
    Ee890781.Fig12(ja-jp,TechNet.10).png
    図 12: system.applicationHost セクション グループの検索

  2. これで、適切なセクションが見つかったので、適切な属性と maxHistory の値を追加します。 system.applicationHost セクション グループ内に次のテキストを入力します。

    
    
        <configHistory maxHistories="15" /> 
    

注: 次の手順で時間を節約するために、このタスクが終了した後もメモ帳を開いておいてください。

最後に、変更が行われたことを確認します。 既定では、IIS 7.0 のスキーマで定義されているように、一度に表示されるディレクトリは 10 個だけです。

IIS 7.0 で保存されている最大値を大きくした後、多くのディレクトリの作成をトリガーするための簡単な方法が必要です。 これをシミュレートするために、period 属性の既定値を小さくして、既定の最小値である 10 秒に設定します。 これによって、変更をチェックする回数が増加し、動的な環境でより多くのファイルのコピーが作成されます。

手順 3: configHistory の period 属性を設定する

  1. 前のセッションを使用して、period="00:00:10" を追加することによって period 属性を追加します。
  2. [ファイル] メニューの [上書き保存] をクリックして、変更を確定します。

この作業が完了すると、configHistory セクションは次のようになります。

                      

                      
    <configHistory maxHistories="15" period="00:00:10" /> 

手順 4: スクリプトを実行して履歴を作成する

  1. メモ帳を開きます。 次の内容をコピーして貼り付けます。

    Option Explicit 
    
    '  Global objects, variables
    Dim objShell, argObj, oExec
    Dim strDirectory, strFile, strCmd, strFullCmd, stdIn, i
    
    set objShell = CreateObject("Wscript.Shell")
    strDirectory = "%windir%\system32\inetsrv\" 
    strFile = "AppCmd.exe"
    
    set ArgObj = Wscript.Arguments
    
    '  No args (default case), hard-code StdIn
    If ArgObj.Count = 0 Then 
        stdIn = 17
    
        i = 0 'initilize i
    
        For i = 0 to stdIn        
            '  Call Select Case to change Statement 
            strCmd = getStrCmd(i)
            strFullCmd = strDirectory & strFile & " " & strCmd
    
            Set oExec = objShell.Exec(strFullCmd)  
    
            Do While oExec.Status = 0
                 WScript.Sleep 100
            Loop 
    
            If oExec.ExitCode <> 0 Then 
               '  Something wrong with the IIS Installation
    
               '  Is AppCmd installed on the machine? \inetsrv directory?
               msgBox "Executing AppCmd Command Failed.  Please Try Again!"
    
               wscript.Quit
            End if 
    
            WScript.Sleep(2 * 1000)
    
        Next 
    
    '  Handle the case where we passed arguments to
    '  the script
    
    Else 
        stdIn = ArgObj(0)
    
        ' Same code as above but handle arguments being passed.
    
        i = 0 ' initialize i
    
        For i = 0 to stdIn        
            '  Call Select Case to change Statement
            strCmd = getStrCmd(i)
            strFullCmd = strDirectory & strFile & " "& strCmd
    
        Set oExec = objShell.Exec(strFullCmd)
    
        Do While oExec.Status = 0
             WScript.Sleep 100
        Loop 
    
        '  Validate that AppCmd calls succeeded by checking Error code
        If oExec.ExitCode <> 0 Then 
               '  Something wrong with the IIS Installation
               '  Is AppCmd installed on the machine? \inetsrv directory?
               msgBox "Executing AppCmd Command Failed.  Please Try Again!"
               wscript.Quit
        End if 
    
        '  Go to sleep for x period (default:  20)
        WScript.Sleep(20 * 1000)
    
        Next 
    
    ' End the StdIn Input Tree
    
    End if 
    
    '  AppCMD Command Function 
    Function getStrCmd(MyIndex)
        Select Case (MyIndex)
            Case 0 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:false"
            Case 1 ' set Default Document
                getStrCmd = "set config /section:defaultDocument /enabled:true"
            Case 2  'set httpRedirect
                getStrCmd = "set config /section:httpRedirect /enabled:true"
            Case 3  ' set Client Certificate Mapping Auth
                getStrCmd = "set config /section:security/authentication/clientCertificateMappingAuthentication /enabled:true"
            Case 4  ' set Directory Browse
                getStrCmd = "set config /section:directoryBrowse /enabled:true"
            Case 5  ' set httpRedirect
                getStrCmd = "set config /section:httpRedirect /enabled:false"     
            Case 6  ' set anonymousAuth
                getStrCmd = "set config /section:security/authentication/anonymousAuthentication /enabled:false"
            Case 7  ' set basicAuth
                getStrCmd = "set config /section:security/authentication/basicAuthentication /enabled:true"
            Case 8  ' set digestAuth
                getStrCmd = "set config /section:security/authentication/digestAuthentication /enabled:true"
            Case 9  ' set client cert mapping auth
                getStrCmd = "set config /section:security/authentication/clientCertificateMappingAuthentication /enabled:false"
            Case 10 ' set windows auth
                getStrCmd = "set config /section:security/authentication/windowsAuthentication /enabled:true"
            Case 11 ' server runtime
                getStrCmd = "set config /section:serverRuntime /enabled:true"
            Case 12 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:false"
            Case 13 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:true"
            Case 14 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:true"
            Case 15 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:true"
            Case 16 ' set Server Runtime
                getStrCmd = "set config /section:serverRuntime /enabled:true"
            Case 17 ' set Server Runtime
          getStrCmd = "set config /section:serverRuntime /enabled:true"
    
            End select 
    End Function 
    
    
  2. このファイルを ConfigHst.vbs という名前で保存します ([すべてのファイル] を選択してテキスト ファイルとして保存されないようにしてください)。
    Ee890781.Fig13(ja-jp,TechNet.10).png
    図 13: VBS スクリプトの保存

  3. コマンド プロンプトを開き、この VBS ファイルの保存場所に移動して、次のように入力して VBS ファイルを実行します。

    cscript//nologo configHst.vbs 
    

    このスクリプトによって、IIS 7.0 の構成が 15 秒ごとに変更されます。 これは、構成履歴によって変更をチェックし、バックアップを作成するのに十分な時間です。 この作業を終了すると、バックアップ ディレクトリに構成のバックアップが多数作成されます。

  4. 次に、[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、「%systemdrive%\inetpub\history」と入力して configHistory の既定のパスを開きます。

  5. CFGHISTORY_0000001、CFGHISTORY_0000002 などのバックアップ フォルダーが表示されます。

このスクリプトの実行後、最大値 (maxHistories) に達したときに、この機能によって最も古いバックアップが削除されることに注意してください。 前の例では、CFGHISTORY_0000000015 に達した後、16 番目のディレクトリが作成される前に最も古いアイテムが削除されます。

Ee890781.Fig14(ja-jp,TechNet.10).png
図 14: maxHistories の値が 15 に設定された history ディレクトリ

 

まとめ

このタスクでは、IIS 7.0 によって保存されるバックアップの数を変更しました。 既定値の 10 は多くの場合は十分ですが、ユーザーがランダムかつ頻繁にサイトにサインアップするような共有ホスティング サーバーなどの動的な環境では、より多くの履歴を作成することをお勧めします。

このタスクでは、configHistory セクションの maxHistories 属性と period 属性を変更した後、複数の変更を行って、10 個 (既定値) より多くのコピーが保存されるようにしました。

タスク 4: configHistory のバックアップを保存するための既定のパスを変更する

IIS 7.0 で保存される履歴ディレクトリおよび関連ファイルの数は、環境に合わせて柔軟に構成できます。 多くの場合、履歴ファイルをシステム パスに保存すること (%systemdrive%inetpub\history) は好ましくありません。 構成履歴を攻勢するためのメカニズムがなかった IIS 6.0 の履歴とは異なり、IIS 7.0 の構成履歴では、IIS 7.0 の履歴ディレクトリおよびファイルの保存場所を変更できるようになりました。

このタスクでは、新しい方法で構成を変更します。ここでは、IIS 7.0 の新しいコマンド ライン インターフェイスを使用します。 このタスクの目標は、構成履歴のディレクトリのパスを変更する方法を習得し、さらに IIS 7.0 の構成およびランタイム データへのコマンド ライン インターフェイスである AppCmd.exe の使用法を習得することです。

手順 1: 履歴用のディレクトリを作成する

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、「CMD」と入力して [OK] をクリックします。

  2. コマンド プロンプトで、次のように入力してディレクトリを作成します。

    md MyWebHistory

ディレクトリが存在していない場合、自動的には作成されないので、この手順が必要です。 この手順を実行できない場合、次のダイアログ ボックスが表示されます。
Ee890781.Fig15(ja-jp,TechNet.10).png
図 15: 履歴パスへのアクセス許可が十分ではない場合のイベント メッセージ

手順 2: AppCmd.exe を探す

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、「CMD」と入力して [OK] をクリックします。

  2. コマンド プロンプトで、次のように入力してディレクトリを変更します。

    Cd %windir%\system32\inetsrv 
    
  3. AppCmd の構文を参照するには、次のように入力します。 

    Appcmd /?  
    

ここで、path 属性の値を使用環境に適した値に変更します。 この場合、システム パーティション上のカスタム ディレクトリである、%systemdrive%\MyWebHistory ディレクトリに変更します。

: 通常、このデータは別のパーティション、さらにできれば、D:\ などの別のコントローラー上のドライブに移動する必要があります。AppCmd を使用してパスの値を変更します。

手順 3: configHistory のパスの値を変更する

  1. AppCmd.exe の使い方に慣れるために、コマンド プロンプトを開いて、次のように入力します。

    Appcmd set– config section:? 
    

    このコマンドによって、現在編集可能なセクションを確認する方法を参照できます。

    Appcmd list config –section:configHistory –config:* 
    

    このコマンドによって、システムで現在設定されている属性および値を把握できます。  

  2. ここで、次のコマンドを実行して、path 属性を既定の %systemdrive%inetpub\history から %systemdrive%MyWebHistory に変更します。

    Appcmd set config -section:configHistory –path:"%systemdrive%MyWebHistory"    
    
  3. 変更内容を確認するために、次のように入力して、maxHistories と period が適切に設定されていることを確認します。

                      
<configHistory maxHistories="15" period="00:00:10" path="%systemdrive%\MyWebHistory"/>

次のように表示されます。
Ee890781.Fig16(ja-jp,TechNet.10).png
図 16: AppCmd による構成の表示

最後に、構成を変更して、バックアップをトリガーします。ディレクトリとファイルの新しい場所に注目してください。

手順 4: 前のスクリプトの再実行

  • 次のように入力して、ConfigHst.vbs を実行します。
cscript //nologo configHst.vbs

%systemdrive%\MyWebHistory を確認すると、CFGHISTORY_0000001、2 などの名前のディレクトリが表示されます。

まとめ

重要な、頻繁に変更されるデータをサーバーのシステム パーティション (既定では %systemdrive%) から、他のパーティションやドライブに移動することは、標準的な手法です。 このタスクでは、IIS 7.0 構成履歴ディレクトリのターゲットの場所を変更しました。

タスク 5: バックアップ ファイルから構成を復元する

以前に動作していた構成を復元する方法が提供されていなければ、履歴機能の意味がありません。 このタスクの目的は、以前に作成した構成のコピーから手動で復元するための手順を説明することです。

手順 1: 使用可能なバックアップを一覧表示する

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックして「CMD」と入力し、[OK] をクリックします。
  2. 「cd %windir%\system32\inetsrv」というコマンドを使用して、inetsrv ディレクトリに移動します。
  3. configHistory セクションで現在構成されているパスを取得するには、次のように入力します。
    appcmd list backups

このコマンドによって、使用可能なバックアップの一覧が表示されます。これには、appcmd add backup コマンドを使用して手動で作成したバックアップと、構成履歴サービスによって作成されたバックアップが含まれます。 
次の手順に従って、appcmd restore backup コマンドを使用して、表示されたバックアップのいずれかを復元できます。

手順 2: バックアップを復元する

前の手順に従ってバックアップの一覧を表示した後、復元するバックアップを選択し、次のように入力して復元します。

     appcmd restore backup BACKUPNAME

BACKUPNAME は手順 1. で一覧に表示されたバックアップのいずれか (CFGHISTORY_0000000016 など) です。

バックアップ フォルダー内の構成ファイルを手動で検索し、復元するバックアップを指定することもできます。

[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックして「CMD」と入力し、[OK] をクリックします。

  1. 前の手順 1. の情報を使用して、履歴ディレクトリに変更します。
  2. Windows の findstr コマンドを使用して、対象となる変更内容を検索します。 ここでは、directoryBrowse が false に設定されている構成を検索します。
Findstr /S /I /C:"directoryBrowse enabled=\"false\"" *.config

これによって、現在のディレクトリとすべてのサブディレクトリで、directoryBrowse が false に設定されている文字列が検索されます。 結果として、CFGHISTORY_0000000016 などのアイテムが 1 つだけ返され、復元する対象が示されます。

まとめ

このタスクでは、履歴のコピーを検索し、復元しました。 このタスクは、構成履歴機能の最も重要な部分を示しています。この機能によって、以前に動作していた構成に簡単にロールバックすることができるからです。