Amazon EC2 Windows 인스턴스 문제 해결
Amazon EC2 Windows 인스턴스 문제 해결
다음은 Amazon EC2 Windows 인스턴스의 문제를 해결하는 데 도움이 되는 팁입니다.
출처: 문서
Windows Server 2025 인스턴스에 AWS Systems Manager Sessions Manager 연결 불가
Windows Server 2025 인스턴스에 AWS Systems Manager Sessions Manager를 연결하는 데 문제가 발생할 수 있어요. 이 문제를 해결하려면 인스턴스에 로그온한 뒤 Settings > Apps > Optional Features로 이동해 WMIC를 추가하세요. SSM Agent 서비스를 다시 시작하거나 인스턴스를 재부팅하면 Sessions Manager가 연결되어야 합니다.
같은 작업을 수행하는 PowerShell 명령을 사용할 수도 있습니다.
Start-Process -FilePath "$env:SystemRoot\system32\Dism.exe" -ArgumentList @('/Online', '/Add-Capability', '/CapabilityName:WMIC~~~~') -Wait; Restart-Service -Name AmazonSSMAgent
Windows Server 2016 및 2019에서 EBS 볼륨이 초기화되지 않음
Windows Server 2016 및 2019용 Amazon Machine Image(AMI)로 만든 인스턴스는 EBS 볼륨 초기화를 포함한 다양한 시작 작업에 EC2Launch v1 에이전트를 사용합니다. 기본적으로 EC2Launch v1은 보조 볼륨을 초기화하지 않아요. 그러나 다음과 같이 EC2Launch v1을 구성해 이러한 디스크를 자동으로 초기화할 수 있습니다.
볼륨에 드라이브 문자 매핑
- 인스턴스에 연결해
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json파일을 텍스트 편집기로 엽니다. - 볼륨 설정을 다음과 같이 지정합니다.
{
"driveLetterMapping": [
{
"volumeName": "sample volume",
"driveLetter": "H"
}]
}
- 변경 사항을 저장하고 파일을 닫습니다.
- Windows PowerShell을 열고 다음 명령을 사용해 디스크를 초기화하는 EC2Launch v1 스크립트를 실행합니다.
PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1
인스턴스가 부팅될 때마다 디스크를 초기화하려면 -Schedule 플래그를 다음과 같이 추가하세요.
PS C:\> C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule
EC2Launch v1 에이전트는 initializeDisks.ps1 같은 인스턴스 초기화 스크립트를 InitializeInstance.ps1 스크립트와 병렬로 실행할 수 있어요. InitializeInstance.ps1 스크립트가 인스턴스를 재부팅하면 인스턴스 시작 시 실행되는 다른 예약 작업을 방해할 수 있습니다. 잠재적인 충돌을 피하려면 initializeDisks.ps1 스크립트에 인스턴스 초기화가 먼저 완료되도록 하는 로직을 추가하는 것을 권장합니다.
참고 — EC2Launch 스크립트가 볼륨을 초기화하지 않으면 볼륨이 온라인 상태인지 확인하세요. 볼륨이 오프라인이면 다음 명령을 실행해 모든 디스크를 온라인으로 전환합니다.
PS C:\> Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False
EC2 Windows 인스턴스를 DSRM(Directory Services Restore Mode)으로 부팅
Microsoft Active Directory를 실행하는 인스턴스에서 시스템 장애나 기타 심각한 문제가 발생하면, **DSRM(Directory Services Restore Mode)**이라는 특수한 버전의 안전 모드로 부팅해 문제를 해결할 수 있어요. DSRM에서 Active Directory를 복구하거나 복원할 수 있습니다.
DSRM용 드라이버 지원
DSRM을 활성화하고 인스턴스로 부팅하는 방법은 인스턴스가 실행하는 드라이버에 따라 달라집니다. EC2 콘솔에서 System Log로 인스턴스의 드라이버 버전 세부 정보를 볼 수 있어요. 다음 표는 DSRM을 지원하는 드라이버를 보여줍니다.
| 드라이버 버전 | DSRM 지원? | 다음 단계 |
|---|---|---|
| Citrix PV 5.9 | 아니요 | 백업에서 인스턴스를 복원하세요. DSRM을 활성화할 수 없습니다. |
| AWS PV 7.2.0 | 아니요 | 이 드라이버는 DSRM을 지원하지 않지만, 인스턴스에서 루트 볼륨을 분리하고, 볼륨 스냅샷을 만들거나 여기서 AMI를 만든 뒤, 같은 가용 영역의 다른 인스턴스에 보조 볼륨으로 연결할 수는 있습니다. 그런 다음 DSRM을 활성화할 수 있어요(이 섹션에서 설명하는 대로). |
| AWS PV 7.2.2 이상 | 예 | 루트 볼륨을 분리해 다른 인스턴스에 연결하고 DSRM을 활성화하세요(이 섹션에서 설명하는 대로). |
| Enhanced Networking | 예 | 루트 볼륨을 분리해 다른 인스턴스에 연결하고 DSRM을 활성화하세요(이 섹션에서 설명하는 대로). |
인스턴스를 DSRM으로 부팅하도록 구성
EC2 Windows 인스턴스는 운영 체제가 실행되기 전에는 네트워크 연결이 없어요. 따라서 키보드에서 F8 버튼을 눌러 부팅 옵션을 선택할 수 없습니다. EC2 Windows Server 인스턴스를 DSRM으로 부팅하려면 다음 절차 중 하나를 사용해야 합니다.
Active Directory가 손상되었고 인스턴스가 여전히 실행 중이라고 의심되면, 시스템 구성 대화 상자 또는 명령 프롬프트를 사용해 인스턴스를 DSRM으로 부팅하도록 구성할 수 있습니다.
시스템 구성 대화 상자를 사용해 온라인 인스턴스를 DSRM으로 부팅:
- 실행 대화 상자에
msconfig를 입력하고 Enter를 누릅니다. - Boot 탭을 선택합니다.
- Boot options 아래에서 Safe boot를 선택합니다.
- Active Directory repair를 선택한 뒤 OK를 선택합니다. 시스템이 서버를 재부팅하라고 알립니다.
명령줄을 사용해 온라인 인스턴스를 DSRM으로 부팅:
명령 프롬프트 창에서 다음 명령을 실행하세요.
bcdedit /set safeboot dsrepair
인스턴스가 오프라인이고 도달할 수 없다면, 루트 볼륨을 분리해 다른 인스턴스에 연결해 DSRM 모드를 활성화해야 합니다.
오프라인 인스턴스를 DSRM으로 부팅:
- Amazon EC2 콘솔을 https://console.aws.amazon.com/ec2/에서 엽니다.
- 탐색 창에서 Instances를 선택합니다.
- 영향을 받는 인스턴스를 찾아 선택하고, Instance state > Stop instance를 선택합니다.
- Launch instances를 선택해 영향을 받는 인스턴스와 같은 가용 영역에 임시 인스턴스를 만듭니다. 다른 버전의 Windows를 사용하는 인스턴스 유형을 선택하세요. 예를 들어 인스턴스가 Windows Server 2016이라면 Windows Server 2019 인스턴스를 선택합니다.
중요 — 영향을 받는 인스턴스와 같은 가용 영역에 인스턴스를 만들지 않으면 영향을 받는 인스턴스의 루트 볼륨을 새 인스턴스에 연결할 수 없습니다.
- 탐색 창에서 Volumes를 선택합니다.
- 영향을 받는 인스턴스의 루트 볼륨을 찾습니다. 볼륨을 분리하고 이전에 만든 임시 인스턴스에 연결합니다. 기본 디바이스 이름(
xvdf)으로 연결하세요. - 원격 데스크톱으로 임시 인스턴스에 연결한 뒤 디스크 관리 유틸리티를 사용해 볼륨을 사용 가능하게 만듭니다.
- 명령 프롬프트를 열고 다음 명령을 실행합니다.
D를 방금 연결한 보조 볼륨의 실제 드라이브 문자로 바꾸세요.
bcdedit /store D:\Boot\BCD /set {default} safeboot dsrepair
- 디스크 관리 유틸리티에서 앞서 연결한 드라이브를 선택하고, 컨텍스트(오른쪽 클릭) 메뉴를 연 뒤 Offline을 선택합니다.
- EC2 콘솔에서 임시 인스턴스에서 영향을 받는 볼륨을 분리하고, 디바이스 이름
/dev/sda1로 원래 인스턴스에 다시 연결합니다. 볼륨을 루트 볼륨으로 지정하려면 이 디바이스 이름을 지정해야 합니다. - 인스턴스를 시작합니다.
- 인스턴스가 EC2 콘솔의 상태 검사를 통과한 뒤 원격 데스크톱으로 연결해 DSRM 모드로 부팅하는지 확인합니다.
- (선택) 이 절차에서 만든 임시 인스턴스를 삭제하거나 중지합니다.
인스턴스의 네트워크 연결이 끊어지거나 예약 작업이 예상대로 실행되지 않음
인스턴스를 다시 시작했는데 네트워크 연결이 끊어지면 인스턴스의 시간이 잘못되었을 수 있어요. 기본적으로 Windows 인스턴스는 UTC(Coordinated Universal Time)를 사용합니다. 인스턴스의 시간을 다른 시간대로 설정한 뒤 다시 시작하면 시간이 어긋나고 인스턴스가 일시적으로 IP 주소를 잃을 수 있습니다. 인스턴스는 결국 네트워크 연결을 되찾지만, 몇 시간이 걸릴 수 있어요. 연결을 되찾는 데 걸리는 시간은 UTC와 다른 시간대의 차이에 따라 달라집니다.
같은 시간 문제로 예약 작업이 예상 시간에 실행되지 않을 수도 있어요. 이 경우 인스턴스의 시간이 올바르지 않기 때문에 예약 작업이 예상대로 실행되지 않습니다.
UTC가 아닌 다른 시간대를 영구적으로 사용하려면 RealTimeIsUniversal 레지스트리 키를 설정해야 합니다. 이 키가 없으면 인스턴스는 다시 시작한 뒤 UTC를 사용합니다.
네트워크 연결 손실을 유발하는 시간 문제 해결:
- 권장 PV 드라이버를 실행 중인지 확인하세요.
- 다음 레지스트리 키가 존재하고
1로 설정되어 있는지 확인합니다:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal
콘솔 출력을 가져올 수 없음
Windows 인스턴스의 경우 인스턴스 콘솔은 Windows 부팅 프로세스 중 수행된 작업의 출력을 표시합니다. Windows가 성공적으로 부팅되면 마지막으로 기록되는 메시지는 Windows is Ready to use입니다. 콘솔에서 이벤트 로그 메시지를 표시할 수도 있지만, Windows 버전에 따라 이 기능은 기본적으로 활성화되어 있지 않을 수 있어요.
Amazon EC2 콘솔을 사용해 인스턴스의 콘솔 출력을 가져오려면 인스턴스를 선택한 뒤 Actions > Monitor and troubleshoot > Get system log를 선택하세요. 명령줄로 콘솔 출력을 가져오려면 get-console-output(AWS CLI) 또는 Get-EC2ConsoleOutput(AWS Tools for Windows PowerShell)을 사용하세요.
Windows Server 2012 R2 이하를 실행하는 인스턴스에서 콘솔 출력이 비어 있으면 EC2Config 서비스에 문제(예: 잘못 구성된 구성 파일)가 있거나 Windows가 제대로 부팅에 실패했을 수 있어요. 이 문제를 해결하려면 최신 버전의 EC2Config를 다운로드해 설치하세요.
Windows Server 2012 R2를 네트워크에서 사용할 수 없음
네트워크에서 사용할 수 없는 Windows Server 2012 R2 인스턴스의 문제를 해결하는 방법은 "Windows Server 2012 R2 loses network and storage connectivity after an instance reboot" 문서를 참조하세요.
디스크 서명 충돌
EC2Rescue for Windows Server를 사용해 디스크 서명 충돌을 확인하고 해결할 수 있어요. 또는 다음 단계를 수행해 디스크 서명 문제를 수동으로 해결할 수 있습니다.
경고 — 다음 절차는 레지스트리 편집기로 Windows 레지스트리를 편집하는 방법을 설명합니다. Windows 레지스트리에 익숙하지 않거나 레지스트리 편집기로 안전하게 변경하는 방법을 모른다면 "Configure the Registry"를 참조하세요.
- 명령 프롬프트를 열고
regedit.exe를 입력한 뒤 Enter를 누릅니다. - 레지스트리 편집기에서 컨텍스트(오른쪽 클릭) 메뉴로 HKEY_LOCAL_MACHINE을 선택한 뒤 Find를 선택합니다.
- Windows Boot Manager를 입력하고 Find Next를 선택합니다.
11000001이라는 키를 선택합니다. 이 키는 이전 단계에서 찾은 키의 형제 키입니다.- 오른쪽 창에서 Element를 선택하고 컨텍스트(오른쪽 클릭) 메뉴에서 Modify를 선택합니다.
- 데이터의 오프셋
0x38에서 4바이트 디스크 서명을 찾습니다. 이는 BCD(Boot Configuration Database) 서명이에요. 바이트를 뒤집어 디스크 서명을 만들고 적어 둡니다. 예를 들어 다음 데이터로 표시되는 디스크 서명은E9EB3AA5입니다.
...
0030 00 00 00 00 01 00 00 00
0038 A5 3A EB E9 00 00 00 00
0040 00 00 00 00 00 00 00 00
...
- 명령 프롬프트 창에서 다음 명령을 실행해 Microsoft DiskPart를 시작합니다.
diskpart
select diskDiskPart 명령을 실행하고 디스크 서명 충돌이 있는 볼륨의 디스크 번호를 지정합니다.팁 — 디스크 서명 충돌이 있는 볼륨의 디스크 번호를 확인하려면 디스크 관리 유틸리티를 사용하세요. 명령 프롬프트를 열고
compmgmt.msc를 입력한 뒤 Enter를 누릅니다. 왼쪽 탐색 패널에서 Disk Management를 엽니다. 디스크 관리 유틸리티에서 디스크 서명 충돌이 있는 오프라인 볼륨의 디스크 번호를 확인하세요.
DISKPART> select disk 1
Disk 1 is now the selected disk.
- 다음 DiskPart 명령을 실행해 디스크 서명을 가져옵니다.
DISKPART> uniqueid disk
Disk ID: 0C764FA8
- 이전 단계에서 표시된 디스크 서명이 앞서 적어 둔 디스크 서명과 일치하지 않으면 다음 DiskPart 명령을 사용해 일치하도록 디스크 서명을 변경합니다.
DISKPART> uniqueid disk id=E9EB3AA5