중첩 가상화로 Amazon EC2 인스턴스에서 하이퍼바이저 실행하기

중첩 가상화로 Amazon EC2 인스턴스에서 하이퍼바이저 실행하기

**중첩 가상화(nested virtualization)**를 사용하면 가상 Amazon EC2 인스턴스 안에서 Hyper-V나 KVM 같은 하이퍼바이저를 실행할 수 있어요. 여기서 가상 EC2 인스턴스는 베어 메탈(bare metal)이 아닌 인스턴스를 말합니다. 이 기능은 가상 EC2 인스턴스에 프로세서 수준 가상화 지원을 추가해 가상화 유연성을 확장하며, 인스턴스에서 실행 중인 하이퍼바이저가 가상 머신을 만들고 관리할 수 있게 해줘요.

출처: 문서

본문

중첩 가상화는 개발 워크플로에서 Docker Desktop, Windows Subsystem for Linux 2(WSL2), Android Studio 에뮬레이터, QEMU 같은 개발 도구를 실행할 때 도움이 돼요. 특정 성능과 가격 요구사항을 충족하는 다양한 표준 가상 Amazon EC2 인스턴스 유형을 선택할 수 있기 때문이에요. 중첩 가상화 사용에는 추가 비용이 없습니다.

목차 (Contents)

  • 작동 방식 (How it works)
  • 고려사항 (Considerations)
  • 중첩 가상화를 활성화한 새 인스턴스 실행 (Launch a new instance with nested virtualization enabled)
  • 기존 인스턴스가 중첩 가상화를 사용하도록 구성 (Configure an existing instance to use nested virtualization)
  • 중첩 가상화를 지원하는 인스턴스 유형 찾기 (Find the instance types that support nested virtualization)

작동 방식 (How it works)

가상 EC2 인스턴스는 Nitro 하이퍼바이저가 있는 물리적 호스트에서 실행돼요. 중첩 가상화를 지원하기 위해 Nitro System은 Intel VT-x 같은 프로세서 확장을 인스턴스에 전달해 중첩 가상 머신 실행을 돕습니다. 중첩 가상화 아키텍처는 세 계층으로 구성됩니다.

  • 물리적 AWS 인프라스트럭처와 Nitro 하이퍼바이저 (L0)
  • 하이퍼바이저를 실행하는 내 EC2 인스턴스 (L1)
  • 그 인스턴스 안에서 만들어진 하나 이상의 가상 머신 (L2)

고려사항 (Considerations)

중첩 가상화를 사용하기 전에 다음을 고려하세요.

  • 지원되는 인스턴스 유형 – 중첩 가상화는 현재 다음 인스턴스 유형에서 지원돼요.
    • 범용(General Purpose): M7i, M7i-flex, M8i, M8id, M8i-flex
    • 컴퓨팅 최적화(Compute Optimized): C7i, C7i-flex, C8i, C8id, C8i-flex
    • 메모리 최적화(Memory Optimized): R7i, R7iz, R8i, R8id, R8i-flex, X8i
    • 스토리지 최적화(Storage Optimized): I7i, I7ie
  • 지원되는 하이퍼바이저 – 현재 KVM과 Hyper-V가 지원되는 L1 하이퍼바이저예요.
  • Windows 인스턴스 – Windows 인스턴스에서 중첩 가상화를 활성화하면:
    • Credential Guard – Virtual Secure Mode(VSM)가 자동으로 비활성화됩니다.
    • Hibernation(최대 절전) – 인스턴스 최대 절전 및 재개가 지원되지 않아요.
    • CPU 한도 – m8i.96xl처럼 192개가 넘는 CPU를 가진 Windows 인스턴스에서는 지원되지 않습니다.
  • 보안 책임 – EC2 인스턴스에서 중첩 가상화를 사용할 때, AWS는 기본 인프라스트럭처를 보호하고 AWS Nitro System이 제공하는 EC2 인스턴스 간의 강력한 격리 경계를 유지하는 **"클라우드의 보안(security of the cloud)"**을 책임져요. 고객은 EC2 인스턴스 내부의 운영 체제, 하이퍼바이저, 중첩 가상 머신, 게스트 운영 체제, 애플리케이션, 데이터를 보호하는 **"클라우드 내의 보안(security in the cloud)"**을 책임집니다.
  • 성능 – AWS는 하드웨어 가상화 확장에 접근해야 하고 성능에 민감하거나 엄격한 지연 시간 요구사항이 있는 워크로드를 실행하려는 고객에게 베어 메탈 인스턴스를 평가해 볼 것을 권장해요.

중첩 가상화를 활성화한 새 인스턴스 실행하기 (Launch a new instance with nested virtualization enabled)

새 인스턴스를 실행할 때 중첩 가상화를 켜서 그 위에서 하이퍼바이저와 가상 머신을 실행할 수 있어요.

콘솔 (Console)

인스턴스 실행 중 중첩 가상화를 활성화하려면

  1. 콘솔의 실행 인스턴스 마법사(Launch an EC2 instance using the launch instance wizard) 절차를 따라 필요에 따라 인스턴스를 구성합니다.
  2. 지원되는 인스턴스 유형이 선택되었는지 확인합니다.
  3. Advanced details를 펼치고 Nested virtualization에서 Enable을 선택합니다.
  4. Summary 패널에서 인스턴스 구성을 검토한 뒤 Launch instance를 선택합니다.

AWS CLI

중첩 가상화를 활성화한 인스턴스를 실행하려면

run-instances 명령을 사용합니다.

aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type r8i.4xlarge \
    --cpu-options "NestedVirtualization=enabled" \
    --key-name my-key-pair

PowerShell

중첩 가상화를 활성화한 인스턴스를 실행하려면

New-EC2Instance 명령을 사용합니다.

New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType r8i.4xlarge `
    -CpuOption @{NestedVirtualization='enabled'} `
    -KeyName my-key-pair

기존 인스턴스가 중첩 가상화를 사용하도록 구성하기 (Configure an existing instance to use nested virtualization)

기존 Amazon EC2 인스턴스에서 중첩 가상화를 켤 수 있어요.

사전 조건 (Prerequisites)

  • 인스턴스가 **중지된 상태(stopped state)**여야 합니다.
  • 인스턴스 유형이 중첩 가상화를 지원해야 해요.

콘솔 (Console)

기존 인스턴스에서 중첩 가상화를 활성화하려면

  1. Amazon EC2 콘솔을 엽니다. https://console.aws.amazon.com/ec2/
  2. 탐색 창에서 Instances를 선택합니다.
  3. 인스턴스 표에서 수정하려는 인스턴스를 선택합니다.
  4. Actions, Instance settings, Change CPU options를 선택합니다.
  5. Change CPU options 페이지의 Nested virtualization에서 다음 중 하나를 선택합니다.
    • Enable – 인스턴스의 중첩 가상화를 켭니다.
    • Disable – 인스턴스의 중첩 가상화를 끕니다.
  6. 변경 사항을 검토한 뒤 Change를 선택해 새 CPU 옵션을 적용합니다.

AWS CLI

기존 인스턴스에서 중첩 가상화를 활성화하려면

먼저 인스턴스를 중지한 뒤 modify-instance-cpu-options 명령을 사용합니다.

aws ec2 modify-instance-cpu-options \
    --instance-id i-1234567890abcdef0 \
    --core-count 4 \
    --threads-per-core 2 \
    --nested-virtualization enabled

PowerShell

기존 인스턴스에서 중첩 가상화를 활성화하려면

먼저 인스턴스를 중지한 뒤 Edit-EC2InstanceCpuOption 명령을 사용합니다.

Edit-EC2InstanceCpuOption `
    -InstanceId i-1234567890abcdef0 `
    -CoreCount 4 `
    -ThreadsPerCore 2 `
    -NestedVirtualization enabled

중첩 가상화를 지원하는 인스턴스 유형 찾기 (Find the instance types that support nested virtualization)

어떤 Amazon EC2 인스턴스 유형이 중첩 가상화를 지원하는지 찾을 수 있어요. 전체 AWS 리전을 대상으로 쿼리하거나 특정 인스턴스 유형을 확인할 수 있습니다.

AWS CLI

리전에서 중첩 가상화를 지원하는 모든 인스턴스 패밀리 나열하기

processor-info.supported-features 필터를 nested-virtualization 값으로 설정한 describe-instance-types 명령을 사용합니다.

aws ec2 describe-instance-types --region us-east-1 \
  --filters "Name=processor-info.supported-features,Values=nested-virtualization" \
  --query "InstanceTypes[].InstanceType" --output text \
  | tr '\t' '\n' | cut -d. -f1 | sort -u

특정 인스턴스 유형이 중첩 가상화를 지원하는지 확인하기

지정된 인스턴스 유형의 ProcessorInfo.SupportedFeatures 필드를 쿼리하는 describe-instance-types 명령을 사용합니다.

aws ec2 describe-instance-types \
  --instance-types m8i.2xlarge \
  --query "InstanceTypes[].ProcessorInfo.SupportedFeatures"

인스턴스 유형이 중첩 가상화를 지원하면 출력에 nested-virtualization이 포함돼요. 지원하지 않으면 명령은 빈 배열([])을 반환합니다.

PowerShell

리전에서 중첩 가상화를 지원하는 모든 인스턴스 패밀리 나열하기

processor-info.supported-features 필터를 nested-virtualization 값으로 설정한 Get-EC2InstanceType 명령을 사용합니다.

Get-EC2InstanceType -Region us-east-1 -Filter @{ Name='processor-info.supported-features'; Values='nested-virtualization' } |
  ForEach-Object { ($_.InstanceType -split '\.')[0] } |
  Sort-Object -Unique

특정 인스턴스 유형이 중첩 가상화를 지원하는지 확인하기

지정된 인스턴스 유형의 ProcessorInfo.SupportedFeatures 속성을 쿼리하는 Get-EC2InstanceType 명령을 사용합니다.

(Get-EC2InstanceType -InstanceType m8i.2xlarge).ProcessorInfo.SupportedFeatures

인스턴스 유형이 중첩 가상화를 지원하면 출력에 nested-virtualization이 포함되고, 지원하지 않으면 출력이 반환되지 않습니다.

더 알아보기 (Learn more)