AWS最新アップデート(2026年2月12日) EC2でNested Virtualizationが利用可能に

AWS EC2でNested Virtualizationが利用可能に

こんにちは、樋口です。

先週、JANOG57が我々のお膝元、大阪で開催されましたね。今回はグランフロント大阪・グラングリーン大阪で開催され、茶屋町のMBS本社から徒歩10分程度で行けることもあり、業務の合間を縫って何度も足を運びました。まさに今回のテーマである「フラッとJANOG」を体現できたと思っています。

さらに今回はデジタルストラテジー局の先輩が本会議で登壇することもあり、MBSからも多くのメンバーが応援に駆けつけました。アーカイブもぜひご覧いただければ幸いです。

そんなJANOGでは様々なお話がありましたが、ContainerLabを若手のトレーニングに活用しているという話をよく聞きました。そんなContainerLabでは、様々なベンダーの機器を仮想環境で動かすことができますが、コンテナイメージとして提供しているベンダーだけではなく、仮想マシンイメージとして提供しているベンダーもあります。仮想マシンイメージの機器を使用しようと思うと、vrnetlabが必要になります。詳細は割愛しますが、このvrnetlabでは機器の仮想マシンイメージをコンテナ化するための仕組みを提供するもので、Linuxカーネルの仮想化機能である KVM (Kernel-based Virtual Machine) を利用します。つまりホストOSで、このKVMが利用可能でなければなりません。

AWSやGoogle CloudでのNested Virtualization

これをAWSのEC2上で実現しようとすると、これまではベアメタルのインスタンスでしかNested Virtualizationには対応していなかったようです。

一方でGoogle Cloudでは、以下のページの通り、一部のマシンタイプで従来から利用可能でした。

フラっとJANOGの帰りにMBS内で触れる環境を作ってみようと、早速Google Cloud上に構築したのが先週の木曜日でした。
(上記を全て調べたうえで、Google Cloud上で構築していたらカッコよかったのですが、実際にはAWS上でkvmが動かせないことに気付いて、一度諦めてからGoogle Cloudに移りました)

上記の制約を除くと、構築自体はスムーズに進み、まずは簡単なネットワーク環境を作ってみることができました。

AWSでも特定のインスタンスタイプでNested Virtualizationが可能に

さて、このNested Virtualizationの制約についてあまり詳しく把握していなかったので、週末にいろいろ調べていると、どうやら2026年2月12日にひっそりとEC2のAPIにリリースされているようなXのポストをいくつか発見しました。
以下がそのAWSのリリースです。

また、EC2のUser GuideにもNested Virtualizationに関する項目が追加されていました。内容としては

Before you begin using nested virtualization, consider the following:

  • Supported instance types – Nested virtualization is currently supported on C8i, M8i, and R8i instances.
  • Supported hypervisors – Currently, KVM and Hyper-V are the supported L1 hypervisors.

参考: Use nested virtualization to run hypervisors in Amazon EC2 instances | docs.aws.amazon.com

カスタム Intel Xeon 6プロセッサを搭載した新しいインスタンスタイプで使用可能で、KVMやHyper-Vなどのハイパーバイザーをサポートするようです。

Google Cloudによると現時点ではHyper-Vはサポートされていないようです。今回はKVMが使いたかったのですが、Hyper-Vを使いたい場合はこのあたりの制限事項をケアする必要があります。

制限事項
L1 VM には次の制限事項があります。

  • L1 VM でサポートされているハイパーバイザは Linux KVM のみです。Microsoft Hyper-V はサポートされていません。

参考: ネストされた仮想化について | docs.cloud.google.com

それにしても…

2月12日ってJANOGの2日目やん。私がAWSでの構築を諦めてGoogle Cloudに移そうとした日やん。

厳密には日本時間ではない気がするので、私が手を動かしていたタイミングでは本当にまだだったのかもしれません。本当に引きが強い男だと思います。

早速使ってみる

早速Nested Virtualizationに対応したEC2インスタンスを作成してみます。ドキュメント(Launch a new instance with nested virtualization enabled | docs.aws.amazon.com)にはwebコンソールでの設定方法も書かれていましたが、私の環境では英語でも日本語でもまだ設定項目が現れていませんでした。ここはカッコよくCLIで作成してみます。

最新のリリースなので、CLIもアップデートしておきましょう。

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip -q awscliv2.zip
$ sudo ./aws/install --update
$ /usr/local/bin/aws --version

再度シェルを読み込み直すなりして…

  $ aws --version
aws-cli/2.33.6 Python/3.13.11 Linux/6.1.159-182.297.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

ひとまずこれでOKでしょう。

今回はUbuntu 22.04で作成します。

$ AMI_ID=$(aws ec2 describe-images 
	--owners amazon
	--filters “Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*” 
	--query ‘sort_by(Images, &CreationDate)[-1].ImageId’ 
	--output text)
$ aws ec2 run-instances \
	--image-id $AMI_ID \
	--count 1 \
	--instance-type r8i.xlarge \
	--key-name <キーペア名> \
	--subnet-id <サブネットID> \
	--security-group-ids <セキュリティグループID> \
	--cpu-options “NestedVirtualization=enabled” \
	--block-device-mappings ‘[{“DeviceName”:"/dev/sda1",“Ebs”:{“VolumeSize”:60,“VolumeType”:“gp3”}}]’ \
	--tag-specifications ‘ResourceType=instance,Tags=[{Key=Name,Value=ContainerLab}]’ \
	--associate-public-ip-address

重要なのはもちろん

–cpu-options “NestedVirtualization=enabled”

です。これでインスタンスの作成が開始されます。

なお、対応していないインスタンスタイプで作成した場合は、以下のようなエラーが出ます。

$ aws ec2 run-instances 
	--image-id $AMI_ID 
	--count 1 
	--instance-type r7i.xlarge 
	(以下省略)
An error occurred (InvalidParameterCombination) when calling the RunInstances operation: The specified instance type does not support Nested Virtualization. Specify a supported instance type and try again.

実際にやってみる

早速KVMが使えるようになっているか確認してみます。まずは従来のNested Virtualization非対応のインスタンスでテストをしてみます。以下はr7i.xlargeでの実行結果です。

$ sudo apt-get install cpu-checker
$ kvm-ok
INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root
HINT:   sudo /usr/sbin/kvm-ok

続いて、r8i.xlargeでNestedVirtualization=enabledのCPUオプションが有効になっているインスタンスで試します。

$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

見事、/dev/kvmがexistsしているようです。

これにて仮想マシンイメージで提供される機器も含めて、ContainerLabで動かすことができました。

まとめ

まさか自分が試行錯誤している間に、パブリッククラウドが対応してくれるとは思ってもいませんでしたが、様々な環境でContainerLabを動かせるようになりました。様々なクラウド環境でNested Virtualizationが使えることで、動かせるアプリケーションの幅はますます広がることになりそうです。

Previous Post