SSM を活用し m5 から m6i へ Windows Server 2019 のインスタンスタイプを変更する

記事タイトルとURLをコピーする

CI部 佐竹です。
本日は東京リージョンで利用可能となった m6i インスタンスへとインスタンスタイプを変更する作業を実際に検証します。

はじめに

blog.serverworks.co.jp

上記ブログでご紹介しています通り、東京リージョンで m6i インスタンスが利用可能になりました。m5 と比較して利用料が据え置きなものの、コストパフォーマンスが高いため積極的にインスタンスタイプを変更して行きたいと考えています。

今回は本インスタンスタイプへの変更シーンにおいて、注意すべき点とその回避策の実行方法を記載します。

第6世代全般の注意事項

第6世代の利用には、注意点として ENA ドライバーのバージョンが v3 以上という条件があります。もし古い ENA ドライバーバージョンでインスタンスを起動する場、最適ではないパフォーマンス、もしくは ENI のアタッチメントが失敗する原因になり得ます。

aws.amazon.com

上記の記事によると、Windows Server の場合 v2.2.3 以降である必要があり、また v2.0.0 よりも古いバージョンの ENA ドライバーを利用したインスタンスでは、起動時に ENI (Elastic Network Interface) のアタッチが成功しないとのことです。

f:id:swx-satake:20210824153906p:plain

実際に試してみたところ 1/2 checks passed のエラーとなり、インスタンスが正常に起動できませんでした。

補足:今回、ENA ドライバーのバージョン 1.5.0 の場合では上記のエラーとなりました。バージョンが v2.0.0 ~ v2.2.2 の場合、インスタンスは起動するものの「最適なパフォーマンスにならない」と想定されます

この対応として、今回は Systems Manager(SSM)を活用してドライバーのアップデートを行いながら、m6i へと変更する検証ブログとなります。

f:id:swx-satake:20210824160917p:plain

変更対象のインスタンスは i-001a4fd7ae75266c0 を活用します。

Systems Manager で ENA ドライバーをアップグレードする

事前に ENA ドライバーのバージョンを確認する(任意)

  • Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver | Where-Object { $_.Name -eq 'ena' } | Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }

上記コマンドを PowerShell で実行し、結果を確認しました。

Name Caption                               Version
---- -------                               -------
ena  Amazon Elastic Network Adapter Driver 1.5.0.0

対象のインスタンスのバージョンは 1.5.0.0 となっており、2.0.0 未満の古い状態です。

Windows Server 2012 R2以前のOSでは以下のコマンドを代用ください。

  • Windows Server 2012 R2以前
 Get-WmiObject -ClassName Win32_SystemDriver | Where-Object { $_.Name -eq 'ena' } | Select-Object Name, Caption, @{Name = 'Version'; Expression = { GetFileVersionString (Get-Item $_.PathName) } }

SSM の Automation を実行する

SSM の Automation にある AWSSupport-UpgradeWindowsAWSDrivers を実行します。

本ドキュメントは、以下の3つの処理を連続で実行するもので、ドライバーをまとめて最新化できるメリットがあります。

  1. installAwsEnaNetworkDriverOnInstance:ENA ドライバーの最新化
  2. installAWSNVMeOnInstance:NVMe ドライバーの最新化
  3. installAWSPVDriverOnInstance:PVドライバーの最新化

各ドライバインストール時に OS が都度再起動される場合がありますのでご留意ください。

ワークロード上、日中帯に再起動が許容されないインスタンスでは本 Automation ドキュメントの実行を夜間や土日に計画することを推奨いたします。

手順

f:id:swx-satake:20210824160322p:plain

まずは SSM の「マネジメントコンソール」から Execute automation を押下して進めていきます。

f:id:swx-satake:20210824160610p:plain

AWSSupport-UpgradeWindowsAWSDrivers を検索し、ラジオボタンを選択します。その後、右下の「Next」を押下して進めます。

f:id:swx-satake:20210824161148p:plain

「Input parameters」における「InstanceId」に i-001a4fd7ae75266c0 を入力します。

f:id:swx-satake:20210824161305p:plain

もしくは「Show interactive instance picker」を活用して一覧から選択も可能です。

インスタンスを選択できたら、「Execute」を押下して実行します。

f:id:swx-satake:20210824161512p:plain

実行が正常に行われたことを確認し、処理が終わるのを待ちます。

AMI が Automation で自動的に取得される

f:id:swx-satake:20210824161819p:plain

Automation ドキュメント内、Step 6: assertpreUpgradeBackup で自動的にバックアップ AMI が取得されるため、本処理の前に手動で AMI を取得する必要はありません。

また、本 Automation ではこのバックアップ処理に時間がかかることがあります。AMI は差分取得になりますので、長い間 AMI を取得していなかった EC2 インスタンスではその傾向が顕著です。今回はこのステップに9分程度時間がかかりました。

注意点としては assertpreUpgradeBackup では AMI 取得時に Windows Server が再起動されます

CloudTrail の履歴を確認したところ、以下の通り "noReboot": false となっています。

    "eventTime": "2021-08-24T07:14:27Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "CreateImage",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "ssm.amazonaws.com",
    "userAgent": "ssm.amazonaws.com",
    "requestParameters": {
        "instanceId": "i-001a4fd7ae75266c0",
        "name": "AWSSupport-Pre-Upgrade-Backup_i-001a4fd7ae75266c0_2021-08-24_07.14.26",
        "description": "Pre-Upgrade Backup AMI Generated by Automation on 2021-08-24_07.14.26 from i-001a4fd7ae75266c0.",
        "noReboot": false
    },

これ以降のステップでも複数回再起動が行われます点、改めてご認識ください。

AWSSupport-UpgradeWindowsAWSDrivers

step7: installAwsEnaNetworkDriverOnInstance から先の3つのステップがこの Automation ドキュメントのメインの処理です。

f:id:swx-satake:20210824164817p:plain

ステップの詳細を確認すると、本ステップでは Run Command が実行されていることがわかります。このコマンドの実行状態を見ることでもう少し詳細な状況が把握できる場合があります。

f:id:swx-satake:20210824165027p:plain

Command description を確認すると AWS-RunPowerShellScript が実行されていることがわかります。これは、Windows に対して SSM を通して PowerShell の Script を実行させるものになります。コマンドの詳細が知りたい場合は、最下部のパラメータペインから確認ください。

完了を確認

f:id:swx-satake:20210824180742p:plain

無事に SSM Automation の全処理が完了しました。

なお、1度目は謎のエラーで installAwsEnaNetworkDriverOnInstance だけ失敗しました。Automation を再度実行して、2回目で成功したので問題はなかったようですが、原因は不明でした。

参考までログを置いておきます。本ログに関連して SSM Agent 側のログも見てみたのですが、原因が追いきれませんでした。

{
  "Status": "Failed",
  "ResponseCode": 1,
  "Output": "document process failed unexpectedly: document worker timed out , check [ssm-document-worker]/[ssm-session-worker] log for crash reason",
  "CommandId": "dd51cfa7-a5b9-42de-8ad0-5bd6d1643191"
}

SSM の完了後ドライバーのバージョンを確認する(任意)

Automation ドキュメント完了後、Windows Server に RDP して再度バージョンを確認します。ついでにドライバー3つともバージョンを確認したいと思います。

ENA ドライバーのバージョン確認

Get-CimInstance -ClassName Win32_SystemDriver | Where-Object { $_.Name -eq 'ena' } | Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }
  • 結果
Name Caption                               Version
---- -------                               -------
ena  Amazon Elastic Network Adapter Driver 2.2.3.0

NVMe ドライバーのバージョン確認

Get-CimInstance -ClassName Win32_SystemDriver | Where-Object { $_.Name -eq 'awsnvme'} | Select-Object Name, Caption, @{Name='Version'; Expression={(Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString()}}
  • 結果
Name    Caption Version
----    ------- -------
AWSNVMe AWSNVMe 1.3.2.53

PV ドライバーのバージョン確認

Get-ItemProperty HKLM:\SOFTWARE\Amazon\PVDriver
  • 結果
Version      : 8.4.0
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Amazon\PVDriver
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Amazon
PSChildName  : PVDriver
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

無事に ENA ドライバーが最新化され、他のドライバーも最新になりました。

インスタンスタイプを変更する

最後に EC2 インスタンスを Stop し、インスタンスタイプを変更後、Start します。タイプの変更は Cloud Automator 等を利用して夜間に実行するのも良いでしょう。

f:id:swx-satake:20210824181626p:plain

冒頭に記載していたように、 1/2 checks passed のエラーとなりインスタンスが起動できませんでしたが、ENA ドライバーのアップデートにより無事に m6i.large で起動することができました。

AWS 公式ドキュメント

docs.aws.amazon.com

上記ドキュメントに記載のある通り、本 SSM Automation ドキュメントは、パート 1 からパート 3 までの自動化です。より適切に最新化を行う場合は、上記ドキュメントにあるパート 4 以降を実施することが推奨されます。

特に Xen から Nitro へと移行するような場合には パート 6: 電源管理設定の更新 の実行は重要ですので合わせて確認ください。

AWSSupport-UpgradeWindowsAWSDrivers

Automation ドキュメントに関する資料です。

docs.aws.amazon.com

まとめ

本日は東京リージョンで利用可能となった m6i インスタンスへとインスタンスタイプを変更する作業を実際に検証してみました。

第6世代の利用には ENA のドライバーバージョンが v3 以上の必要があるという制限から、SSM Automation ドキュメントである AWSSupport-UpgradeWindowsAWSDrivers を活用して ENA を含めた各種ドライバーの最新化を行いました。

既存の EC2 インスタンスを m6i ファミリーへと移行されたい方に本ブログが参考になれば幸いです。

補足として、先に紹介したブログに記載していたように、8月24日現在、東京リージョンにおいて m6i は AZ-1c (apne1-az1) で利用ができない点もインスタンスタイプ変更時にはご留意ください。AZ-1a, AZ-1d でのみ提供されているため、AZ-1c ではドライバーをアップデートしても m6i へとインスタンスタイプが変更できないという残念な結果になってしまいます。早く AZ-1c (apne1-az1) にも対応してほしいですね。

総括すると、以下の通りになります。

  • m6i のインスタンスタイプ変更には ENAv3 へのドライバーアップグレードが必要
  • 現時点で AZ-1c (apne1-az1) では m6i の提供がないためドライバーをアップグレードしたとしても変更ができない

ではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE3課所属。2010年1月からAWSを利用してきました。
2021 Japan APN Ambassador /2020-2021 APN ALL AWS Certifications Engineer。AWSのコスト削減、最適化を得意としています。