EC2のWindows Server 2022でWSL 2を使うのは一筋縄ではいかないのでWSL 1で我慢してみた

通常のEC2がNested Virtualizationをサポートしてくれたら我慢する必要はないんです...
2022.06.24

しばたです。

弊社のんピが記事を書いてくれた様に最新の更新が適用されたWindows Server 2022ではWindows Subsystem for Linux 2 (WSL 2)が利用できる様になっています。

ただ、WSL 2はその実行基盤がWindowsサブシステムから軽量VMに変っているため、実行可能な環境が

  • (所定の仮想化機能が有効な) 物理サーバー
  • Nested Virtualization(入れ子の仮想化)をサポートするハイパーバイザー上の仮想サーバー

のどちらかである必要があります。

残念ながら通常のEC2は入れ子の仮想化をサポートしておらず、AWS上でWSL 2を利用したい場合はベアメタルインスタンスを使うしかありません。

WSL 2のためにベアメタルインスタンスを選ぶのは残念ながらコストに見合わないでしょう。
このため本記事ではWSL 2ではなく以前のWSL 1を選ぶことでEC2のWindows Server 2022上で現実的にWSLを使う方法を模索します。

Windows Server 上でのWSL 1サポート

ご存じの方もいるとは思いますが、実はWSL 1であれば既にWindows Server 2019から利用可能です。
以前にWindows Server 2019イメージのWorkSpacesでWSL 1を導入する手順を紹介したりもしています。

ただし従来の方法では導入手順がちょっと面倒でした。
Windows Server 2022ではWSLの導入方法がより簡易になっているためWSL 1の利用が簡単に行えます。

やってみた

それでは早速試していきます。

今回は私の検証用AWSアカウントの東京リージョンに用意したVPC環境内でWindow Server 2022インスタンスを構築します。
利用するのはWSL 1なので通常のインスタンスでOKです。
今回はテスト用にt3.mediumのインスタンスを作成しています。

AMIは本日時点で最新の(ami-04a0b66e543847ad1 : Windows_Server-2022-Japanese-Full-Base-2022.06.15)であれば必要な更新は適用済みです。

作成したEC2にログインし、管理者権限でPowerShellコンソールを起動し以下のコマンドを実行すればWSLをインストールできます。

# 要管理者権限
# ※ wsl --install コマンドが使えるのはWindows Server 2022から
wsl --install

# OS再起動
Restart-Computer

再起動後に再ログインするとインストールの続きが行われ、ディストリビューション(Ubuntu)のインストールと初期設定が行われます。
ここでUbuntuの初期設定でエラーが発生しますが、想定内の動作なので気にせずにウィンドウを閉じてください。

エラーはデフォルトで使用されるWSLのバージョンがWSL 2のため起きています。
なのでwsl --set-default-versionコマンドを使いデフォルトで使われるWSLのバージョンをWSL 1に変更してやります。

# 要管理者権限
# ※ 通常のEC2インスタンスではWSL 2を使えないので、あえてWSL 1を使う様にする
wsl --set-default-version 1

# 変更結果を確認
wsl --status

変更を確認したあとでスタートメニューあるインストール途中の「Ubuntu」をクリックして実行すると、今度はWSL 1でインストールし直されます。

今度はエラーにならずユーザー入力などの初期設定が続行され、

ユーザー名とパスワードを設定すれば無事WSL 1のUbuntuが利用可能になりました。

wsl -l -vコマンドで詳細を確認するとちゃんとWSL 1であることがわかります。

以上で完了です。

補足

1. Ubuntu以外のディストリビューションを使いたい場合

Ubuntu以外のディストリビューションを使いたい場合はwsl --installコマンドでディストリビューション名を指定してください。

# デフォルトのUbuntuでなくDebianをインストールする場合
wsl --install -d Debian

2. Windows Terminalを使いたい場合

のんピの記事ではWindows Terminalのインストールに失敗していましたが、以前書いたPowerShell関数が最新バージョンに対応できてなかったのが原因だったので関数を修正し記事も更新しておきました。

現在は問題なく関数で一発インストールできるはずです。

ただし、インストールは問題なくできたのですがUbuntuの開始ディレクトリが~だと起動エラーになる事象が発生しました。
同様の事象が出た場合は設定から開始ディレクトリを/等の絶対パスに変えてみてください。

最後に

簡単ですが以上となります。

EC2でWSL 2が簡単に使えないのは残念ですが、ただちにどうにかできる問題でもないので割り切りは大事です。
WSL 1でも活用できる点はあると思いますので積極的に試してみると良いと思います。