はじめに
こんにちは、しのテックです。
Windows Server 2022 で動いているシステムを、いずれは Linux へ移したい。
そんなご相談をいただきました。
とはいえ、いきなり Linux サーバを立てて全面移行するのは大がかりです。Windows に依存した既存バッチもあり、一度に切り替えるのは現実的ではありません。
そこで最初の一歩として、「アプリが Linux 上の Tomcat で問題なく動くか」を確かめる PoC(概念実証)から始めることにしました。
その PoC の場として選んだのが WSL2 です。
WSL2 は本来、開発や検証向けの軽量な環境で、Web サーバを本番運用するためのものではありません。今回も WSL2 で本番稼働させるつもりはなく、最終的には Linux サーバを立てて移行する前提です。
それでも PoC に WSL2 を選んだのは、次の理由からです。
- サーバを追加せずに、今の Windows Server の中で Linux 版 Tomcat の動作を試せる
- Windows に依存したバッチはそのまま残し、Web 層(Tomcat)だけを切り分けて確認できる
- 現行環境は Jenkins でアプリをデプロイしているが、NixOS-WSL を使えば WAR のビルドも Linux 側で行えるため、ビルドからデプロイまでの流れを移行後に近い形で検証できる
ところが「EC2 で WSL2 を動かすにはベアメタルインスタンスが必要」という壁にぶつかり、コスト面で一度は諦めかけました。
結論から言うと、m7i.large で動きました。
1. PoCで確かめたいこと
お客様の現行環境は、Windows Server 2022 の1台構成です。Tomcat 上で Web アプリが動き、同じサーバで Windows に依存したバッチも動いています。アプリのデプロイは Jenkins で行っています。
最終的には Linux サーバへ移行する計画で、段階は次のように考えています。
- WSL2 上で、Linux 版 Tomcat の PoC を行う(今回)
- Linux サーバを構築し、Tomcat を移行する
- Windows に依存したバッチを Linux 化する
今回の PoC で確かめたいのは、次の3点です。
- アプリが Linux 版の Tomcat で動くか
- Jenkins で行っている WAR のビルドを、NixOS 上でも再現できるか
- WSL2 上の Tomcat に、Windows 側のブラウザからアクセスできるか
検証環境は、AWS の EC2 上に用意しました。
2. 立ちはだかった「ベアメタルのみ」
さっそく検証環境を作ろうとして、手が止まりました。
EC2のWindows ServerでWSL2を動かすには条件があります。「ネストされた仮想化」に対応したインスタンスであること。聞き慣れない言葉なので、少し整理します。
そもそもEC2インスタンス自体が、AWSの物理サーバ上で動く仮想マシンです。その中でWSL2(これも軽量な仮想マシン)を動かすと、仮想マシンの中で仮想マシンが動くことになります。この入れ子が「ネストされた仮想化」です。
Windows Subsystem for Linux 2(WSL 2)とは?
WSL 2 は、Linux ディストリビューションをインストールするときの既定のディストリビューションの種類です。 WSL 2 では、仮想化テクノロジを使用して、軽量ユーティリティ仮想マシン (VM) 内で Linux カーネルを実行します。 Linux ディストリビューションは、WSL 2 マネージド VM 内の分離コンテナーとして実行されます。 WSL 2 を介して実行される Linux ディストリビューションは、同じネットワーク名前空間、デバイス ツリー (
/dev/pts以外)、CPU/カーネル/メモリ/スワップ、/initバイナリを共有しますが、独自の PID 名前空間、マウント名前空間、ユーザー名前空間、Cgroup 名前空間、およびinitプロセスがあります
※https://learn.microsoft.com/ja-jp/windows/wsl/aboutより引用
そして当時の検証環境を作ろうと考えている段階では、この入れ子が許されるのは、物理サーバを丸ごと借りるベアメタルインスタンスだけでした。
3. 答えは公式ドキュメントにあった
EC2でWSL2を動かすためのベアメタルインスタンスの料金を確認して、また手が止まりました。m7i.metal-24xl(ベアメタルインスタンス)が1時間あたり約 $6.25かかります。Tomcatを1つ動かすためのランニングコストではありません。スモールスタートのつもりが、コストで頓挫しかけました。
諦める前に、AWSの公式ドキュメントをもう一度読み直しました。
すると対応インスタンスの一覧が更新されています。2026年6月18日のアップデートで、対応ファミリーが大幅に追加されていました。
その中にM7i がありました。
今回使おうとしていた m7i.large が、まさにこのファミリーです。m7i.largeインスタンスの料金が1時間あたり約 $0.13です。しかも、ネストされた仮想化の利用に追加料金はかかりません。
|
提供時期
|
ファミリー
|
|
2026年2月
|
C8i, M8i, R8i
|
|
2026年6月18日 追加
|
C7i, M7i, R7i / C7i-flex, M7i-flex / C8i-flex, M8i-flex, R8i-flex / C8id, M8id, R8id / I7i / X8i
|
4. 実際に構築してみた
①EC2を作成する
AWSコンソールからEC2を作成します。
※今回のWSL2を使用するため必要な項目のみピックアップして手順を書いています。
②WSL2本体をインストールする
PowerShellからWSL2本体をインストールします。
※インストールに必要な資材はEC2起動時のユーザーデータにてダウンロード済みです。
③NixOS-WSLを登録する
WindowsServer2022からNixOS-WSLを使えるようにする準備を行います。
④NixOSにTomcatを設定する
⑤FleetManager内のEdgeからテストサイトを確認する
NixOSにTomcatを登録したテストサイトを見に行きます。
⑥WARのビルドを確認する
Jenkins で行っている WAR のビルドを、NixOS 上でも実行できることを確認しました。
※ビルド手順の詳細は、今回は割愛しています。
5. 全部Linux化する前に、できること
わかったことは4つです。
- 2026年6月18日以降、m7i.large のような低コストインスタンスでもWSL2が動く
- Jenkins で行っている WAR のビルドも、NixOS 上で再現できた
- TomcatだけをLinuxへ移すスモールスタートが、現実的な選択肢になった
- ただしAWSは、パフォーマンス依存型や厳しいレイテンシー要件のワークロードにはベアメタルインスタンスの評価を推奨している
向いているのは、段階移行の第一歩、検証環境、そして今回のようにWindows既存のバッチをWindowsに残したままWEB層だけを移す構成です。

逆に高負荷・低レイテンシが求められる本番環境なら、素直にLinuxインスタンスを検討したほうが良さそうです。
「Linux化したいが、一気には無理」。その最初の一歩として、選択肢に入れてみてはいかがでしょうか。
おわりに
事例がない中で公式情報だけで構築などで進む時間は、以前ヨーロッパを旅行したときの感覚に少し似ていました。ガイドブックだけを信じて歩く。合っているはずなのに、本当にこの道でいいのか確信が持てない。
だからこそ、コンソールに「ネストされた仮想化」が現れた瞬間は、ちょっと感動しました。
初めて触ったNixOSも、設定ファイルに書いたことがそのまま環境になる感覚が新鮮で、単純に面白かったです。
次はWindows既存バッチのLinux化に取り組んでみたいです。
参考リンク
- Nested virtualization is now available on additional Intel platforms and AWS GovCloud (US) regions
- Amazon EC2 supports nested virtualization on virtual Amazon EC2 instances
- ネストされた仮想化を使用して Amazon EC2 インスタンスでハイパーバイザーを実行する
- EC2 Windows インスタンスに Windows Subsystem for Linux をインストールする
- WSL について(Microsoft Learn)






