

# 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을 자동적으로 사용할지 여부를 지정합니다. Windows Sysprep을 EC2 Service Properties 대화 상자로부터 실행하는 경우에는 이 값을 변경할 필요가 없습니다. 기본 값은 `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 연결을 비활성화합니다. 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를 실행한 후 로그인한 모든 계정은 첫 로그인 시 해당 프로파일 및 콘텐츠의 사본을 받게 됩니다.

  새 이미지로 전달하고자 하는 사용자 프로파일에 대한 특정한 사용자 지정이 없다면 이 설정을 False로 변경하세요. Windows Sysprep은 모든 사용자 프로파일을 삭제하며, 이를 통해 시간과 디스크 공간을 절약합니다.
+ **TimeZone**: 표준 시간대는 UTC(협정 세계시)로 기본 설정되어 있습니다.
+ **Synchronous command with order 1**: 시스템은 다음 명령을 실행하여 관리자 계정을 활성화하고 암호 요건을 지정합니다.

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **Synchronous command with order 2**: 시스템은 관리자 암호를 암호화합니다. 이 보안 조치는 ec2setpassword 설정을 활성화하지 않으면 Windows Sysprep이 완료된 후 인스턴스에 액세스할 수 없도록 설계되어 있습니다.

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **Synchronous command with order 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>Other</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**참고**  
일반화 및 특수화 단계에서 EC2Config 서비스는 OS의 상태를 모니터링합니다. EC2Config는 OS가 Sysprep 단계에 있다는 것을 탐지하면 시스템 로그에 다음 메시지를 출력합니다.  
EC2ConfigMonitorState: Windows 0개가 구성 중입니다. 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. 모든 “Before Windows is ready” 플러그인을 동시에 실행합니다.
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. 실행이 완료된 후에는 “Windows is ready”라는 메시지를 인스턴스 시스템 로그에 전송합니다.

1. 모든 “After Windows is ready” 플러그인을 동시에 실행합니다.
   + 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. 그 AMI를 사용자 지정합니다.

1. EC2Config 서비스 응답 파일에서 구성 설정을 다음과 같이 지정합니다.

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

1. Windows **시작** 메뉴에서 **모든 프로그램**을 선택한 후 **EC2ConfigService 설정**을 클릭합니다.

1. **Ec2 서비스 속성** 대화 상자에서 **이미지** 탭을 선택합니다. Ec2 서비스 속성 대화 상자의 옵션 및 설정에 대한 자세한 내용은 [Ec2 서비스 속성](ec2config-service.md)을 참조하세요.

1. 관리자 암호에 대한 옵션을 선택하고 **Shutdown with Sysprep(Sysprep을 이용해 종료)** 또는 **Shutdown without Sysprep(Sysprep을 사용하지 않고 종료)**을 선택합니다. EC2Config는 선택한 암호 옵션에 기반하는 설정 파일을 편집합니다.
   + **Random(무작위)**: EC2Config는 암호를 생성하고 이를 사용자의 키로 암호화한 다음, 암호화된 암호를 콘솔에 표시합니다. 첫 실행 후 이 설정을 비활성화하여 인스턴스가 재부팅되거나 중단되고 시작된 경우에도 해당 암호가 계속 유지되도록 합니다.
   + **지정**: 암호를 암호화되지 않은 형태(클리어 텍스트)로 Windows Sysprep 응답 파일에 저장합니다. Windows Sysprep은 다음에 실행될 때 관리자 암호를 설정합니다. 지금 종료하면 암호는 지금 바로 설정됩니다. 서비스가 다시 시작할 때 관리자 암호는 제거됩니다. 이 암호는 나중에 다시 확인할 수 없기 때문에 이를 꼭 기억해두세요.
   + **기존 유지**: Windows Sysprep이 실행 중일 때 또는 EC2Config가 재시작할 때, 관리자 계정에 대한 기존 암호를 변경하지 않습니다. 이 암호는 나중에 다시 확인할 수 없기 때문에 이를 꼭 기억해두세요.

1. **확인**을 선택합니다.

Windows Sysprep 실행 및 인스턴스 종료 여부 확인 요청을 받을 때 **예**를 클릭합니다. EC2Config가 Windows Sysprep을 실행하는 것을 확인할 수 있습니다. 그 다음 인스턴스에서 로그아웃되고 인스턴스는 종료됩니다. Amazon EC2 콘솔의 [**인스턴스(Instances)**] 페이지를 보면 인스턴스 상태가 [`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`의 내용을 참조하세요.