CI部 佐竹です。
本日は東京リージョンで利用可能となった m6i インスタンスへとインスタンスタイプを変更する作業を実際に検証します。
はじめに
上記ブログでご紹介しています通り、東京リージョンで m6i インスタンスが利用可能になりました。m5 と比較して利用料が据え置きなものの、コストパフォーマンスが高いため積極的にインスタンスタイプを変更して行きたいと考えています。
今回は本インスタンスタイプへの変更シーンにおいて、注意すべき点とその回避策の実行方法を記載します。
第6世代全般の注意事項
第6世代の利用には、注意点として ENA ドライバーのバージョンが v3 以上という条件があります。もし古い ENA ドライバーバージョンでインスタンスを起動する場、最適ではないパフォーマンス、もしくは ENI のアタッチメントが失敗する原因になり得ます。
上記の記事によると、Windows Server の場合 v2.2.3
以降である必要があり、また v2.0.0
よりも古いバージョンの ENA ドライバーを利用したインスタンスでは、起動時に ENI (Elastic Network Interface) のアタッチが成功しないとのことです。
実際に試してみたところ 1/2 checks passed
のエラーとなり、インスタンスが正常に起動できませんでした。
補足:今回、ENA ドライバーのバージョン 1.5.0 の場合では上記のエラーとなりました。バージョンが v2.0.0 ~ v2.2.2 の場合、インスタンスは起動するものの「最適なパフォーマンスにならない」と想定されます
この対応として、今回は Systems Manager(SSM)を活用してドライバーのアップデートを行いながら、m6i へと変更する検証ブログとなります。
変更対象のインスタンスは 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つの処理を連続で実行するもので、ドライバーをまとめて最新化できるメリットがあります。
- installAwsEnaNetworkDriverOnInstance:ENA ドライバーの最新化
- installAWSNVMeOnInstance:NVMe ドライバーの最新化
- installAWSPVDriverOnInstance:PVドライバーの最新化
各ドライバインストール時に OS が都度再起動される場合がありますのでご留意ください。
ワークロード上、日中帯に再起動が許容されないインスタンスでは本 Automation ドキュメントの実行を夜間や土日に計画することを推奨いたします。
手順
まずは SSM の「マネジメントコンソール」から Execute automation
を押下して進めていきます。
AWSSupport-UpgradeWindowsAWSDrivers
を検索し、ラジオボタンを選択します。その後、右下の「Next」を押下して進めます。
「Input parameters」における「InstanceId」に i-001a4fd7ae75266c0
を入力します。
もしくは「Show interactive instance picker」を活用して一覧から選択も可能です。
インスタンスを選択できたら、「Execute」を押下して実行します。
実行が正常に行われたことを確認し、処理が終わるのを待ちます。
AMI が Automation で自動的に取得される
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 ドキュメントのメインの処理です。
ステップの詳細を確認すると、本ステップでは Run Command が実行されていることがわかります。このコマンドの実行状態を見ることでもう少し詳細な状況が把握できる場合があります。
Command description
を確認すると AWS-RunPowerShellScript
が実行されていることがわかります。これは、Windows に対して SSM を通して PowerShell の Script を実行させるものになります。コマンドの詳細が知りたい場合は、最下部のパラメータペインから確認ください。
完了を確認
無事に 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 等を利用して夜間に実行するのも良いでしょう。
冒頭に記載していたように、 1/2 checks passed
のエラーとなりインスタンスが起動できませんでしたが、ENA ドライバーのアップデートにより無事に m6i.large
で起動することができました。
AWS 公式ドキュメント
上記ドキュメントに記載のある通り、本 SSM Automation ドキュメントは、パート 1 からパート 3 までの自動化です。より適切に最新化を行う場合は、上記ドキュメントにあるパート 4 以降を実施することが推奨されます。
特に Xen から Nitro へと移行するような場合には パート 6: 電源管理設定の更新
の実行は重要ですので合わせて確認ください。
AWSSupport-UpgradeWindowsAWSDrivers
Automation ドキュメントに関する資料です。
まとめ
本日は東京リージョンで利用可能となった 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) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。