題名の通りですがEC2で稼働するWindowsのインプレースアップグレードを試してみたので手順を以下に記載します。

概要

Windowsのサポート切れに伴う対応で新規構築でのアプリケーション移行ではなく、既存のWindowsサーバをインプレースアップグレードしてWindowsバージョンを更新する手順をまとめます。
本来であればリスク回避のため新規構築をしたWindowsサーバへの移行が望ましいと思いますが工数、スケジュール的に新規構築での移行が出来ない、ファイルサーバとして利用しており大容量のため移行に時間がかかるからインプレースアップグレードで対応したいなど様々なご要望からインプレースアップグレードをせざるおえないケースを想定して検証をしてみました。

参考リンク[Microsoft社公式:Windows Server のインプレース アップグレードを実行する]
https://learn.microsoft.com/ja-jp/windows-server/get-started/perform-in-place-upgrade

参考リンク[Microsoft社公式:Windows Server のアップグレードの概要]
https://learn.microsoft.com/ja-jp/windows-server/get-started/upgrade-overview

参考リンク[AWS記事:EC2 Windows インスタンスのインプレースアップグレードを実行するにはどうすればよいですか?]
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-windows-in-place-upgrade/

アップグレード環境

  • EC2 Windows Server 2012 R2 日本語版(コミュニティAMIから稼働[Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2023.01.19])
  • t3.large(2vCPU/8GB MEM)で稼働
  • インターネット接続あり
  • Windows更新プログラムは最新状態にて実行
  • アプリケーション導入などはされていない素OSで実行

インプレースアップグレード手順[参考リンク]

前提としてインプレースアップグレードにはSSMを利用した自動アップグレードと手動アップグレードがございますが今回は手動アップグレードを試します。

事前準備

AMIの取得

ネットワーク通信不可、OSアクセス不可など不足の事態に備えてAMIを取得します。

ネットワークドライバの更新[参考リンク]

次にネットワークドライバを最新の状態にします。
以下のリンクからダウンロードしてサーバへアップロードします。
https://s3.amazonaws.com/ec2-windows-drivers-downloads/AWSPV/Latest/AWSPVDriver.zip

ダウンロードしたファイルを展開して「AWSPVDriverSetup.msi」を実行します。

※インストール後は自動的に再起動が行われます。最大で15分ほど接続できなくなります。

再起動完了後にログインをして以下のコマンドをPowerShellで実行します。

Get-ItemProperty HKLM:\SOFTWARE\Amazon\PVDriver

Readme.txtに記載のバージョンと同一になっていれば正常に更新が完了しております。

EC2configのアンインストール[参考リンク]

まずEC2configのサービスを停止します。


次にコントロールパネル内の「プログラムと機能」を開きEC2ConfigServiceをアンインストールします。


アンインストール後念の為にサーバの再起動を実行します。

EC2Launch v2のインストール[参考リンク]

続いてEC2Launch v2をインストールします。
以下のコマンドをPowerShellで実行してフォルダを作成します。

mkdir $env:USERPROFILE\Desktop\EC2Launchv2

続いて同様に以下のコマンドをPowerShellで実行してmsiファイルのダウンロード元を変数に入れます。

$Url = "https://s3.amazonaws.com/amazon-ec2launch-v2/windows/amd64/latest/AmazonEC2Launch.msi"

以下のコマンドをPowerShellで実行してEC2Launch v2をインストールします。

$DownloadFile = "$env:USERPROFILE\Desktop\EC2Launchv2\" + $(Split-Path -Path $Url -Leaf)
Invoke-WebRequest -Uri $Url -OutFile $DownloadFile
msiexec /i "$DownloadFile"

インストールウィザードが表示されますのでインストールしていきます。

隠しファイルを表示し、「C:\ProgramData\Amazon\EC2Launch」のフォルダが作成されておりましたらインストール成功です。

AWS Systems Manager SSM エージェントのインストール[参考リンク]

SSMエージェントがインストールされていない場合はインストールを行ってください。
本手順で使用するAMIにはすでにSSMエージェントがインストール済みのため割愛します。

Windowsインプレースアップグレード

Windowsイメージのマウント

AWSのマネージドコンソールから[EC2]→[スナップショット]を選択し、スナップショットの種別を「パブリックスナップショット」に変更します。
一覧でパブリックスナップショットが表示されますので検索窓に「Windows」と入力して検索を行ってください。
今回はWindows Server 2016にインプレースアップグレードするため「Windows 2016 Japanese Installation Media」を選択します。

[アクション]からボリュームを作成を選択します。
インスタンスが稼働するAZを指定してボリュームを作成してください。

作成されたボリュームをインスタンスにアタッチします。
アタッチされましたらOSからボリュームが見れていることを確認します。

Windowsのアップグレード

PowerShellを開きアタッチしたボリュームを開きます。

以下のコマンドを実行してアップグレードを開始します。

./setup.exe /auto upgrade /dynamicupdate disable

セットアップウィザードが表示されますので「Windows Server 2016 DataCenter(デスクトップエクスペリエンス)」を選択します。

警告が表示しますので「確認」を選択してください。

確認後、空き容量など条件的に問題がなければアップグレード処理が開始されます。

自動的に再起動などが実行され約30分ほどでリモートデスクトップ接続が可能になりました。

利用状況に応じて時間は左右すると思いますので目安としてください。

アップグレードパスは以下のリンクを参照してください。
基本的には1世代まで対応しておりますが2019は2世代対応しております。

まとめ

Windows Server 2012以降は比較的条件は少なく手順も確率しているためインプレースアップグレード自体は問題なく出来ると思います。
ただOSの利用状況(Windowsの更新プログラムの適用状態、機能の追加状況など)やアプリケーションの導入状況によってはインプレースアップグレードが出来ないケースがあると思いますので解消に時間がかかるケースはあると思います。
Microsoft有償サポートの利用などを視野に入れて検証をしっかりする必要があると思います。