

# ネストされた仮想化を使用して Amazon EC2 インスタンスでハイパーバイザーを実行する
<a name="amazon-ec2-nested-virtualization"></a>

ネストされた仮想化は、仮想 Amazon EC2 インスタンス内での Hyper-V や KVM などのハイパーバイザーの実行を可能にします。仮想 EC2 インスタンスはベアメタル以外のインスタンスです。この機能は、仮想 EC2 インスタンスにプロセッサレベルの仮想化サポートを追加することで仮想化の柔軟性を高めるため、インスタンス内で実行されているハイパーバイザーが仮想マシンを作成して管理できるようになります。

ネストされた仮想化は、特定のパフォーマンス要件と料金要件を満たす幅広い標準的な仮想 Amazon EC2 インスタンスタイプから選択できるため、開発ワークフローでの Docker Desktop、Windows Subsystem for Linux 2 (WSL2)、Android Studio エミュレータ、または QEMU などの開発ツールの実行時に役立ちます。

ネストされた仮想化の使用に追加料金はかかりません。

**Topics**
+ [仕組み](#nested-virtualization-how-it-works)
+ [考慮事項](#nested-virtualization-considerations)
+ [ネストされた仮想化を有効にした新規インスタンスを起動する](#nested-virtualization-launch-new-instance)
+ [ネストされた仮想化を使用するように既存のインスタンスを設定する](#nested-virtualization-configure-existing-instance)

## 仕組み
<a name="nested-virtualization-how-it-works"></a>

仮想 EC2 インスタンスは、Nitro Hypervisor を使用する物理ホストで実行されます。ネストされた仮想化をサポートするため、Nitro System はプロセッサ拡張機能 (Intel VT-x など) をインスタンスに渡して、ネストされた仮想マシンの実行を円滑化します。ネストされた仮想化のアーキテクチャは、物理的な AWS インフラストラクチャと Nitro Hypervisor (L0)、ハイパーバイザーを実行する EC2 インスタンス (L1)、そのインスタンス内で作成された 1 つ、または複数の仮想マシン (L2) の 3 つのレイヤーで構成されています。

## 考慮事項
<a name="nested-virtualization-considerations"></a>

ネストされた仮想化の使用を開始する前に、以下の点を考慮してください。
+ **サポートされるインスタンスタイプ** – 現在、ネストされた仮想化は C8i、M8i、R8i インスタンスでサポートされています。
+ **サポートされるハイパーバイザー** – 現在サポートされている L1 ハイパーバイザーは、KVM と Hyper-V です。
+ **Windows インスタンス** – Windows インスタンスでネストされた仮想化が有効化されている場合:
  + **[Credential Guard](credential-guard.md)** – Virtual Secure Mode (VSM) は自動的に無効化されます。
  + **ハイバネーション** – インスタンスの休止と再開はサポートされません。
  + **CPU 制限** – CPU 数が 192 個を超える Windows インスタンス (`m8i.96xl` など) ではサポートされません。
+ **セキュリティ上の責任** – EC2 インスタンスでネストされた仮想化を使用する場合は、AWS が「クラウド*の*セキュリティ」に対する責任を担うことで基盤となるインフラストラクチャを保護し、AWS Nitro System が提供する EC2 インスタンス間の強固な分離境界を維持します。お客様は「クラウド*内の*セキュリティ」に対する責任を担います。これには、EC2 インスタンス内のオペレーティングシステム、ハイパーバイザー、ネストされた仮想マシン、ゲストオペレーティングシステム、アプリケーション、およびデータのセキュア化が含まれます。
+ **パフォーマンス** – ハードウェア仮想化拡張機能へのアクセスを必要とし、パフォーマンス依存型、または厳しいレイテンシー要件を持つワークロードの実行を希望するお客様の場合、AWS ではベアメタルインスタンスを評価することをお勧めしています。

## ネストされた仮想化を有効にした新規インスタンスを起動する
<a name="nested-virtualization-launch-new-instance"></a>

新しいインスタンスを起動するときは、インスタンスでハイパーバイザーと仮想マシンを実行するためにネストされた仮想化を有効にできます。

**前提条件**  
Amazon EC2 インスタンスを起動するために必要な IAM 許可が必要です。

------
#### [ Console ]

**インスタンスの起動時にネストされた仮想化を有効にする**

1. [コンソールのインスタンス起動ウィザードを使用して EC2 インスタンスを起動する](ec2-launch-instance-wizard.md) の手順に従い、必要に応じてインスタンスを設定します。

1. サポートされているインスタンスタイプが選択されていることを確認します。

1. **[高度な詳細]** を開き、**[ネストされた仮想化]** で **[有効]** を選択します。

1. **[Summary]** (概要) パネルでインスタンスの設定を確認し、**[Launch instance]** (インスタンスを起動) を選択してください。

------
#### [ AWS CLI ]

**ネストされた仮想化を有効にしたインスタンスを起動する**  
[run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。

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

------
#### [ PowerShell ]

**ネストされた仮想化を有効にしたインスタンスを起動する**  
[New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドを使用します。

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

------

## ネストされた仮想化を使用するように既存のインスタンスを設定する
<a name="nested-virtualization-configure-existing-instance"></a>

既存の Amazon EC2 インスタンスでネストされた仮想化を有効にできます。

**前提条件**
+ インスタンスは `stopped` の状態である必要があります。
+ インスタンスタイプがネストされた仮想化をサポートしている必要があります。

------
#### [ Console ]

**既存のインスタンスでネストされた仮想化を有効にする**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンステーブルから変更するインスタンスを選択します。

1. **[アクション]**、**[インスタンスの設定]**、**[CPU オプションの変更]** を選択します。

1. **[CPU オプションの変更]** ページの **[ネストされた仮想化]** で、次のオプションのいずれかを選択します。
   + **[有効]** – インスタンスでネストされた仮想化を有効にします
   + **[無効]** – インスタンスでネストされた仮想化を無効にします

1. 変更を確認したら、**[変更]** を選択して新しい CPU オプションを適用します。

------
#### [ AWS CLI ]

**既存のインスタンスでネストされた仮想化を有効にする**  
インスタンスを停止してから、[modify-instance-cpu-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-cpu-options.html) コマンドを使用します。

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

------
#### [ PowerShell ]

**既存のインスタンスでネストされた仮想化を有効にする**  
インスタンスを停止してから、[Edit-EC2InstanceCpuOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceCpuOption.html) コマンドを使用します。

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

------