

# EC2Config で Windows Sysprep を使って AMI を作成する
<a name="sysprep-using"></a>

EC2Config サービスがインストールされたインスタンスからイメージを作成すると、EC2Config はイメージが作成されたときに特定のタスクを実行します。これには Windows Sysprep を使用した作業が含まれます。詳細については、「[Windows Sysprep のステップ](ami-create-win-sysprep.md#sysprep-phases)」を参照してください。

**Topics**
+ [Windows Sysprep のアクション](#sysprep-actions)
+ [Sysprep 後](#sysprep-post)
+ [EC2Config サービスで Windows Sysprep を実行する](#sysprep-gui-procedure)

## Windows Sysprep のアクション
<a name="sysprep-actions"></a>

イメージを準備するために、Windows Sysprep と EC2Config サービスは次のアクションを実行します。

1. **[EC2 サービスのプロパティ]** ダイアログボックスで **[Sysprep を使用してシャットダウンする]** を選択すると、システムは **ec2config.exe -sysprep** コマンドを実行します。

1. EC2Config サービスは `BundleConfig.xml` ファイルの内容を読み込みます。デフォルトでは、このファイルは `C:\Program Files\Amazon\Ec2ConfigService\Settings` ディレクトリにあります。

    `BundleConfig.xml` ファイルには、以下の設定が含まれています。これらの設定は変更できます：
   + **AutoSysprep**: Windows Sysprep を自動で使用するかどうかを示します。[EC2 サービスプロパティ] ダイアログボックスで Windows Sysprep を実行した場合、この値を変更する必要はありません。デフォルト値は `No` です。
   + **SetRDPCertificate**: リモートデスクトップサーバーに自己署名証明書を設定します。これによって、リモートデスクトッププロトコール (RDP) を安全に使用して、インスタンスに接続できます。新しいインスタンスに証明書が必要な場合は、値を `Yes` に変更します。この設定は、Windows Server 2012 のインスタンスでは使用されません。これらのオペレーティングシステムが独自の証明書を生成できるためです。デフォルト値は `No` です。
   + **SetPasswordAfterSysprep**: 新しく起動したインスタンスにランダムなパスワードを設定し、ユーザー起動キーで暗号化して、暗号化されたパスワードをコンソールに出力します。新しいインスタンスにランダムに暗号化されたパスワードを設定しない場合は、値 `No` に変更します。デフォルト値は `Yes` です。
   +  **PreSysprepRunCmd**: 実行するコマンドの場所。コマンドは、デフォルトでは `C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd` ディレクトリにあります。

1. システムは `BeforeSysprep.cmd` を実行します。このコマンドは、次のレジストリキーを作成します。

   ```
   reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
   ```

   レジストリキーは再度有効になるまで RDP 接続を無効にします。RDP 接続を無効にすることは、安全上の観点より必要となります。これは、Windows Sysprep 実行後の最初のブートセッション中、RDP が接続できるわずかな時間の間に管理者パスワードが空白となるためです。

1. EC2Config サービスは、以下のコマンドを実行して Windows Sysprep を呼び出します。

   ```
   sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown
   ```

### ステップの一般化
<a name="sysprep-generalize"></a>
+ このツールは、コンピュータ名や SID のようなイメージに固有の情報と設定を削除します。インスタンスがドメインのメンバーである場合は、そのドメインから削除されます。`sysprep2008.xml` 応答ファイルには、このステップに影響する以下の設定が含まれています。
  + **PersistAllDeviceInstalls**: この設定は、Windows セットアップがデバイスを削除したり再設定することを防ぐことによってイメージ準備プロセスを高速化します。これは、Amazon AMI を実行するためには特定のドライバーが必要となり、これらのドライバーの再検出には時間がかかるためです。
  + **DoNotCleanUpNonPresentDevices**: この設定では、現在存在しないデバイス用のプラグアンドプレイ情報を保持します。
+ Windows Sysprep は AMI の作成の準備完了後に OS をシャットダウンします。システムは、新しいインスタンスを起動するか、または元のインスタンスを起動します。

### ステップの特定化
<a name="sysprep-specialize"></a>

システムは、コンピュータ名や SID など OS に固有の要件を生成します。またシステムは、sysprep2008.xml 応答ファイルで指定した設定に基づいて、次のアクションを実行します。
+ **CopyProfile**: Windows Sysprep は、組み込まれた管理者のプロファイルを含むすべてのユーザープロファイルを削除するように設定できます。この設定は、組み込まれた管理者アカウントを保持するため、アカウント作成したすべてのカスタム設定は新しいイメージに引き継がれます。デフォルト値は True です。

  **CopyProfile** は、デフォルトのプロファイルを既存のローカル管理者プロファイルに置き換えます。Windows Sysprep の実行後にログインしたすべてのアカウントは、最初のログイン時にそのプロファイルとその内容のコピーを受け取ります。

  新しいイメージに引き継ぐことを希望する特定のユーザープロファイルがない場合、この設定を「いいえ」に変更します。Windows Sysprep はすべてのユーザーを削除します。これによって時間とディスク領域が節約されます。
+ **タイムゾーン**: タイムゾーンはデフォルトで世界時 (UTC) に設定されます。
+ **順序 1 の同期コマンド**: システムは次のコマンドを実行して、管理者アカウントを有効化し、パスワード条件を指定します。

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **順序 2 の同期コマンド**: システムは、管理者パスワードを組み換えます。このセキュリティ対策の目的は、ec2setpassword 設定を有効にしていない場合、Windows Sysprep の完了後にインスタンスへのアクセスを防ぐことです。

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **順序 3 の同期コマンド**: システムは次のコマンドを実行します。

  C: \$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1SysprepSpecializePhase.cmd

   このコマンドは、RDP を再度有効にする次のレジストリキーを追加します。

  reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 0 /f

### OOBE のステップ
<a name="sysprep-oobe"></a>

1. EC2Config サービス応答ファイルを使用すると、システムは次の設定を指定します。
   + <InputLocale>en-US</InputLocale>
   + <SystemLocale>en-US</SystemLocale>
   + <UILanguage>en-US</UILanguage>
   + <UserLocale>en-US</UserLocale>
   + <HideEULAPage>true</HideEULAPage>
   + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
   + <NetworkLocation>その他</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**注記**  
一般化と特定化ステップにおいて、EC2Config サービスは OS のステータスをモニタリングします。OS が Sysprep のステップにあることが EC2Config によって検出された場合、以下のメッセージがシステムログに発行されます。  
EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. OOBE フェーズが完了すると、システムは `SetupComplete.cmd` から `C:\Windows\Setup\Scripts\SetupComplete.cmd` を実行します。2015 年 4 月以前の Amazon パブリック AMI では、このファイルは空となり、イメージには何も実行されません。2015 年 4 月以降のパブリック AMI では、ファイルに **call "C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1PostSysprep.cmd"** の値が含まれます。

1. システムが `PostSysprep.cmd` を実行し、次の操作を行います。
   + ローカル管理者パスワード期限切れにならないよう設定します。パスワードの期限が切れた場合、管理者がログインできないことがあります。
   + MSSQLServer マシン名を設定すると (インストールされている場合)、名前は AMI で同期されます。

## Sysprep 後
<a name="sysprep-post"></a>

Windows Sysprep が完了したら、EC2Config サービスは次のメッセージをコンソール出力へ送信します。

```
Windows sysprep configuration complete.
			Message: Sysprep Start
			Message: Sysprep End
```

そして、EC2Config は次のアクションを実行します。

1. config.xml ファイルのコンテンツを読み取り、すべての有効なプラグインを示します。

1. 「Windows の準備が終了する前」のすべてのプラグインを同時に実行します。
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. これが完了すると、「Windows の準備完了」のメッセージをインスタンスのシステム ログに送信します。

1. 「Windows の準備が終了した後」のすべてのプラグインを同時に実行します
   + Amazon CloudWatch Logs 
   + UserData
   + AWS Systems Manager (Systems Manager) 

Windows プラグインの詳細については、「[EC2Config サービスを使用して、EC2 レガシー Windows オペレーティングシステムインスタンスの起動時にタスクを実行する](ec2config-service.md)」を参照してください。

## EC2Config サービスで Windows Sysprep を実行する
<a name="sysprep-gui-procedure"></a>

以下の手順に従って、Windows Sysprep と EC2Config サービスを使用して標準化 AMI を作成します。

1. Amazon EC2 コンソールで複製を希望する AMI を見つけるか、[作成](creating-an-ami-ebs.md)します。

1. Windows インスタンスを起動して接続します。

1. カスタマイズする。

1. EC2Config サービス応答ファイルで特定設定を指定します。

   `C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml`

1. Windows の [**スタート**] メニューから [**すべてのプログラム**] を選び、次に [**EC2ConfigService 設定**] を選択します。

1. [**Ec2 サービスプロパティ**] ダイアログボックスで [**イメージ**] タブを選択します。Ec2 サービスプロパティダイアログボックスのオプションと設定についての詳細は、「[Ec2 サービスプロパティ](ec2config-service.md)」を参照してください。

1. 管理者パスワードのオプションを選択してから、[**Shutdown with Sysprep**] または [**Shutdown without Sysprep**] を選択します。EC2Config は、選択したパスワードオプションに基づいて設定ファイルを編集します。
   + **ランダム**: EC2Config はパスワードを生成してユーザーのキーで暗号化し、暗号化されたパスワードをコンソールに表示します。この設定は初回起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
   + **指定**: パスワードは、Windows Sysprep 応答ファイルに暗号化されていない形式 (平文) で保存されます。Windows Sysprep が次に実行されると、管理者パスワードに設定されます。ここでシャットダウンした場合、パスワードはすぐに設定されます。サービスを再開すると、管理者パスワードは削除されます。このパスワードは後で取得できないため覚えておくことが重要です。
   + **既存のパスワードを保持**: Windows Sysprep の実行時や EC2Config の再起動時に、管理者アカウントの既存のパスワードは変更されません。このパスワードは後で取得できないため覚えておくことが重要です。

1. [**OK**] を選択してください。

Windows Sysprep を実行しインスタンスをシャットダウンするかどうか確認を求められたら **[はい]** をクリックします。これにより、EC2Config が Windows Sysprep を実行します。次に、ユーザーは自動的にログオフさせられ、インスタンスがシャットダウンします。Amazon EC2 コンソールの [**インスタンス**] ページを見ると、インスタンスの状態が `Running` から `Stopping`、最終的に `Stopped` に変わるのがわかります。この状態になれば、インスタンスから AMI を安全に作成できます。

コマンドラインから Windows Sysprep ツールを手動で呼び出すには、次のコマンドを使います。

```
"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep"" 
```

**注記**  
CMD シェルが C:\$1Program Files\$1Amazon\$1EC2ConfigService\$1 ディレクトリ内に既に存在する場合、コマンドの二重引用符は不要です。

ただし、この操作は慎重に行ってください。`Ec2ConfigService\Settings` フォルダで指定した XML ファイルオプションが正しくないと、インスタンスに接続できなくなる場合があります。設定ファイルの詳細については、「[EC2Config の設定ファイル](ec2config-service.md#UsingConfigXML_WinAMI)」を参照してください。コマンドラインから Windows Sysprep を設定して実行する例については、「`Ec2ConfigService\Scripts\InstallUpdates.ps1`」を参照してください。