ネストされた仮想化を使用して Amazon EC2 インスタンスでハイパーバイザーを実行する
ネストされた仮想化は、仮想 Amazon EC2 インスタンス内での Hyper-V や KVM などのハイパーバイザーの実行を可能にします。仮想 EC2 インスタンスはベアメタル以外のインスタンスです。この機能は、仮想 EC2 インスタンスにプロセッサレベルの仮想化サポートを追加することで仮想化の柔軟性を高めるため、インスタンス内で実行されているハイパーバイザーが仮想マシンを作成して管理できるようになります。
ネストされた仮想化は、特定のパフォーマンス要件と料金要件を満たす幅広い標準的な仮想 Amazon EC2 インスタンスタイプから選択できるため、開発ワークフローでの Docker Desktop、Windows Subsystem for Linux 2 (WSL2)、Android Studio エミュレータ、または QEMU などの開発ツールの実行時に役立ちます。
ネストされた仮想化の使用に追加料金はかかりません。
仕組み
仮想 EC2 インスタンスは、Nitro Hypervisor を使用する物理ホストで実行されます。ネストされた仮想化をサポートするため、Nitro System はプロセッサ拡張機能 (Intel VT-x など) をインスタンスに渡して、ネストされた仮想マシンの実行を円滑化します。ネストされた仮想化のアーキテクチャは、物理的な AWS インフラストラクチャと Nitro Hypervisor (L0)、ハイパーバイザーを実行する EC2 インスタンス (L1)、そのインスタンス内で作成された 1 つ、または複数の仮想マシン (L2) の 3 つのレイヤーで構成されています。
考慮事項
ネストされた仮想化の使用を開始する前に、以下の点を考慮してください。
-
サポートされるインスタンスタイプ – 現在、ネストされた仮想化は以下のインスタンスタイプでサポートされています。
汎用: M7i | M7i-flex | M8i | M8id | M8i-flex
コンピューティング最適化: C7i | C7i-flex | C8i | C8id | C8i-flex
メモリ最適化: R7i | R7iz | R8i | R8id | R8i-flex | X8i
ストレージ最適化: I7i | I7ie
-
サポートされるハイパーバイザー – 現在サポートされている L1 ハイパーバイザーは、KVM と Hyper-V です。
-
Windows インスタンス – Windows インスタンスでネストされた仮想化が有効化されている場合:
-
Credential Guard – Virtual Secure Mode (VSM) は自動的に無効化されます。
-
ハイバネーション – インスタンスの休止と再開はサポートされません。
-
CPU 制限 – CPU 数が 192 個を超える Windows インスタンス (m8i.96xl など) ではサポートされません。
-
セキュリティ上の責任 – EC2 インスタンスでネストされた仮想化を使用する場合は、AWS が「クラウドのセキュリティ」に対する責任を担うことで基盤となるインフラストラクチャを保護し、AWS Nitro System が提供する EC2 インスタンス間の強固な分離境界を維持します。お客様は「クラウド内のセキュリティ」に対する責任を担います。これには、EC2 インスタンス内のオペレーティングシステム、ハイパーバイザー、ネストされた仮想マシン、ゲストオペレーティングシステム、アプリケーション、およびデータのセキュア化が含まれます。
-
パフォーマンス – ハードウェア仮想化拡張機能へのアクセスを必要とし、パフォーマンス依存型、または厳しいレイテンシー要件を持つワークロードの実行を希望するお客様の場合、AWS ではベアメタルインスタンスを評価することをお勧めしています。
ネストされた仮想化を有効にした新規インスタンスを起動する
新しいインスタンスを起動するときは、インスタンスでハイパーバイザーと仮想マシンを実行するためにネストされた仮想化を有効にできます。
- Console
-
インスタンスの起動時にネストされた仮想化を有効にする
-
コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する の手順に従い、必要に応じてインスタンスを設定します。
-
サポートされているインスタンスタイプが選択されていることを確認します。
-
[高度な詳細] を開き、[ネストされた仮想化] で [有効] を選択します。
-
[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
既存の Amazon EC2 インスタンスでネストされた仮想化を有効にできます。
- Console
-
既存のインスタンスでネストされた仮想化を有効にする
-
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
インスタンステーブルから変更するインスタンスを選択します。
-
[アクション]、[インスタンスの設定]、[CPU オプションの変更] を選択します。
-
[CPU オプションの変更] ページの [ネストされた仮想化] で、次のオプションのいずれかを選択します。
-
変更を確認したら、[変更] を選択して新しい 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
ネストされた仮想化をサポートするインスタンスタイプを検索する
ネストされた仮想化をサポートする Amazon EC2 インスタンスタイプを検索できます。AWS リージョン 全体でクエリを実行したり、特定のインスタンスタイプを確認したりすることが可能です。
- AWS CLI
-
リージョン内でネストされた仮想化をサポートするすべてのインスタンスファミリーを一覧表示する
describe-instance-types コマンドを、値を nested-virtualization に設定した processor-info.supported-features フィルターと共に使用します。
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
特定のインスタンスタイプがネストされた仮想化をサポートするかどうかを確認する
describe-instance-types コマンドを使用して、指定されたインスタンスタイプの ProcessorInfo.SupportedFeatures フィールドをクエリします。
aws ec2 describe-instance-types \
--instance-types m8i.2xlarge \
--query "InstanceTypes[].ProcessorInfo.SupportedFeatures"
インスタンスタイプがネストされた仮想化をサポートする場合は、出力に nested-virtualization が含まれます。サポートしない場合は、コマンドが空の配列 ([]) を返します。
- PowerShell
-
リージョン内でネストされた仮想化をサポートするすべてのインスタンスファミリーを一覧表示する
Get-EC2InstanceType コマンドを、nested-virtualization の値に設定された processor-info.supported-features フィルターと共に使用します。
Get-EC2InstanceType -Region us-east-1 -Filter @{ Name='processor-info.supported-features'; Values='nested-virtualization' } |
ForEach-Object { ($_.InstanceType -split '\.')[0] } |
Sort-Object -Unique
特定のインスタンスタイプがネストされた仮想化をサポートするかどうかを確認する
Get-EC2InstanceType コマンドを使用して、指定されたインスタンスタイプの ProcessorInfo.SupportedFeatures プロパティをクエリします。
(Get-EC2InstanceType -InstanceType m8i.2xlarge).ProcessorInfo.SupportedFeatures
インスタンスタイプがネストされた仮想化をサポートする場合は、出力に nested-virtualization が含まれます。サポートしない場合、コマンドは出力を返しません。