ランブックを活用したWindows Serverインプレースアップグレードのススメ
Tags: windows, ec2, japanese, inplaceupgrade
Published: 2024-04-24 10:53:02

みなさんWindows ServerのEOL対策はどのようにされていますか？
直近では[Windows Server 2012R2の延長サポートが2023/10/10に終了しました。](https://learn.microsoft.com/ja-jp/lifecycle/products/windows-server-2012-r2)

Windows Server 2012R2が動いているAmazon EC2も多いのではないでしょうか？これらのインスタンスを新しいOSに移行するためには、新しいOSバージョンのAMIを使って再度アプリケーションをインストールするという方法もありますが、オンプレミスと同様に[インプレースアップグレード](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/os-inplaceupgrade.html)をすることもできます。

インプレースアップグレードを行うことで、ドキュメントに残されていない手順によって新しくインストールしなおしても動作しないといった問題に悩まされることは少なくなります。

アップグレードが必要なEC2インスタンスがたくさんある場合には、[AWS Systems Managerのオートメーションランブック](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/automated-upgrades.html)のAWSEC2-CloneInstanceAndUpgradeWindows ランブックを活用することもできます。

# AWSEC2-CloneInstanceAndUpgradeWindows ランブック とは？

AWSEC2-CloneInstanceAndUpgradeWindows ランブックは、移行対象のEC2インスタンスのインスタンスID、移行先のOSバージョン、EC2にアタッチするロール、移行に利用するサブネットIDを指定することで実行でき、以下のような動きをします。そのため、一般的なインプレースアップグレードとは異なり、移行後のインスタンスで動作確認を行なった上で、既存のインスタンスと切り替えるということができます。なお、プライベートIPアドレスやグローバルIPアドレスを移行前と同じものを利用しなければならない場合でのIPアドレスの移行方法は別の後日記載する予定です。

1. 指定されたインスタンスIDのAMIを取得する。
2. そのAMIからインプレースアップグレードするためのEC2インスタンスを指定されたサブネットIDに生成する。
3. 生成したインスタンス内でインプレースアップグレードを実行する。
4. 移行先のOSバージョンにアップグレードされた状態のAMIを作成する。
5. インスタンスを終了する。

なお、2で生成されるインスタンスタイプは、指定されたインスタンスIDのインスタンスタイプと同じとなります。アップグレードするためにはt2.medium相当以上のインスタンス（インストール作業にてかなりのCPUリソースを使用し、smallインスタンスサイズ相当ではクレジットが枯渇するため）と30GB以上の空き容量が必要ですので、要件に満たない場合には、あらかじめインスタンスタイプやEBSの容量は要件を満たすように変更してください。

また、Windows Server 2012R2のインスタンスにてAWS PV ドライバーをアップグレードするとインスタンスのステータスチェックが失敗して起動しないということが起こることがありましたが、[8.3.5にアップグレード](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/Upgrading_PV_drivers.html#aws-pv-upgrade)することにより対応することができました。（AWSマネジメントコンソールより対象インスタンスのシステムログを参照することで現在インストールされているAWS PVドライバーを確認できます）

今回はAWSEC2-CloneInstanceAndUpgradeWindows ランブックを活用して実際にインプレースアップグレードを行ない、発生した問題とAWSサポートの協力を得て実施した対応策についてまとめてみました。

サポート切れになっているWindows Server 2012R2以前のOSを利用されている方は、ぜひ参考にしてみてください。

# AWSEC2-CloneInstanceAndUpgradeWindows　ランブックで発生した問題と対応策

## getOSVersion ステップでタイムアウトする

> SSM Agent on Instances: [i-xxxxxxx] are not functioning

SSM Agentのインストールを行ってください。

## runUpgradeFrom2012R2Or2016 ステップで失敗する

> Fail to start automation, errorMessage: Parameter "TargetWindowVersion" has value "2012R2" not found in [2016, 2019, 2022]. (Service: AmazonSSM; Status Code: 400; Error Code: InvalidAutomationExecutionParametersException; Request ID: xxxxxxxxxxxxx; Proxy: null)

ランブック指定時の TargetWindowVersion の指定が間違っているため、移行先のバージョンを正しく入力します。

## checkForSSMAgent でタイムアウトし、prepareServerInstanceForSSMInstall、getUpgradedImageDetailsで失敗する

runUpgradeFrom2012R2Or2016のステップが以下で失敗する場合に、内部的にAWSEC2-CloneInstanceAndUpgradeWindows2019のオートーションランブックが呼ばれていて、その中でcheckForSSMAgentのタイムアウトが発生する事象です。

> Failed to run automation with executionId: xxxxxxxxxxxxx TimedOut : 
{Status=[TimedOut], Output=[No output available yet because the step is not successfully executed, No output available yet because the step is not successfully executed], ExecutionId=[xxxxxxxxxxxxx]}

ランブック指定時の SubnetId にNAT Gatewayが有効になっているか「パブリック IPv4 アドレスの自動割り当て」になっているサブネットを指定します。もしくは[「パブリック IPv4 アドレスの自動割り当て」を有効に変更します](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/modify-subnets.html#subnet-public-ip )。

## checkAfterWindowsUpgrade2019 でタイムアウトする

> SSM Agent on Instances: [i-xxxxxxxxxxxxx] are not functioning

dism /online /get-intlコマンド実行時に表示されるインストールされている言語とフォールバック言語が異なる場合に発生するため、以下の設定を変更し、いったんフォールバック言語に変更したうえで、アップグレードを行い、そのあと再び元に戻す必要があります。（以下の例では英語版のAMIを使って日本語設定をしているEC2の手順となります）

1. 日本語のインストールと表示言語の変更でEnglish (United States)を選択
2. 地域の変更でUnited Statesを選択
3. タイムゾーンを(UTC) Coordinated Universal Timeに変更
4. Unicode 対応ではないプログラムの言語の変更でEnglish (United States)を選択
5. ようこそ画面と新しいユーザーアカウントの言語設定

なお、システムログからも言語が異なっているかどうかを判断することができます。
以下の例では英語版AMIを使っていて、言語が日本語になっていることがわかります。また、AWS PVドライバがv7.3.1.2となっているため、事前にv8.3.5へのバージョンアップが必要です。

```
2022/07/15 18:08:08Z: AMI Origin Version: 2015.06.10
2022/07/15 18:08:08Z: AMI Origin Name: Windows_Server-2012-R2_RTM-English-64Bit-Base
2022/07/15 18:08:08Z: OS: Microsoft Windows NT 6.3.9600
2022/07/15 18:08:08Z: OsVersion: 6.3
2022/07/15 18:08:08Z: OsProductName: Windows Server 2012 R2 Standard
2022/07/15 18:08:08Z: OsBuildLabEx: 9600.20475.amd64fre.winblue_ltsb_escrow.220622-1747
2022/07/15 18:08:08Z: Language: ja-JP
2022/07/15 18:08:08Z: EC2 Agent: Ec2Config service v3.6.269
2022/07/15 18:09:19Z: Message: Waiting for meta-data accessibility...
2022/07/15 18:09:20Z: Message: Meta-data is now available.
2022/07/15 18:09:20Z: AMI-ID: ami-xxxxxxx
2022/07/15 18:09:20Z: Instance-ID: i-xxxxxxxx
2022/07/15 18:09:24Z: Driver: AWS PV Network Device v7.3.1.2
2022/07/15 18:09:24Z: Driver: AWS PV Storage Host Adapter v7.3.1.2
```