根据Microsoft官方的生命周期, Windows 2012 R2 将于2023.10.10结束延长后的支持(主线支持已于2018.10.9停止) :
https://docs.microsoft.com/en-us/lifecycle/products/windows-server-2012-r2
对于许多已经服役多年的EC2实例, 如果可以不改变原系统中已经安装配置好的业务环境直接就地升级到新的2016版本, 将可以节省大量的迁移成本, 本文将围绕这个目标进行实战演练.
参考AWS官方文档:
https://docs.amazonaws.cn/en_us/AWSEC2/latest/WindowsGuide/os-inplaceupgrade.html
注意事项
主要步骤
Instances
, 定位到要升级的实例, 记录下来它对应的instance ID
和Availability Zone
, 后面会用到Amazon System Manager SSM Agent
客户端, 参考: Working with SSM AgentElastic Block Store
- Snapshots
, 搜索条选择Public Snapshots
Owner alias: amazon
的过滤条件Description: Windows
的过滤条件Actions
- Create Volume
Create Volume
对话框中选择与当前实例相同的Availability Zone
, 然后点击Create Volume
Create Volume Request Successed
消息中点击创建好的卷Actions
- Attach Volume
instance ID
, 点击Attach
d:\setup.exe /auto upgrade
b. 选择适当的产品版本(主要区分是否包含桌面体验)
c. 安装类型选择"升级"
d. 完成安装向导
先用官方AMI创建了一台运行Windows Server 2012 R2
的t3.medium
实例, 下面就对它进行就地升级
如果是传统物理机进行就地系统升级, 只需要准备好新系统的安装盘, 用ISO挂载或解压或做成U盘, 然后在现有系统中执行setup.exe进行就地安装升级就行了. 而AWS中并没有像VMware或oVirt的虚拟化一样可以额外将ISO镜像文件当成光驱设备进行挂载, 而是官方提供了常用系统安装盘镜像的Snapshot, 我们可以找到要安装的新系统对应的Snapshot生成卷, 然后挂载到当前实例中实现类似ISO解压后的效果.
右键点击开始按钮 > 运行 > appwiz.cpl
, 在程序和功能中找到并卸载EC2ConfigService
在Windows PowerShell中运行下面命令下载并运行安装包
Invoke-WebRequest -Uri https://s3.cn-north-1.amazonaws.com.cn/amazon-ec2launch-v2/windows/amd64/latest/AmazonEC2Launch.msi -OutFile $home/Desktop/AmazonEC2Launch.msi msiexec /i $home/Desktop/AmazonEC2Launch.msi ADDLOCAL="Basic,Clean" /q
Invoke-WebRequest -Uri https://s3.cn-north-1.amazonaws.com.cn/amazon-ssm-cn-north-1/latest/windows_amd64/AmazonSSMAgentSetup.exe -OutFile $home/Desktop/SSMAgent_latest.exe Start-Process -FilePath $home/Desktop/SSMAgent_latest.exe -ArgumentList "/S"
打开EC2控制台, 从左侧功能菜单中进入Elastic Block Store
-Snapshots
, 顶部搜索框切换为Public snapshots
, 条件: Owner Alias: amazon
, 关键词Windows 2016 Chinese
, 结果筛选如下:
直接在相中的SnapshotWindows 2016 Chinese_simplified Installation Media
上面点击鼠标右键 - Create volume from snapshot
创建卷, 这里注意创建Volume settings的Availability Zone
务必保持与现有实例在相同的AZ, 同时别忘了打上标签, 后面好找:
控制台进入Elastic Block Store
- Volumes
, 根据Tag找到上面创建的卷, 右键点击 - Attach volume
选择挂载到2012的实例
挂载完成后即可在实例中查看到:
打开新挂载卷中的 千万不要这样做, 否则后面会卡在许可条款无法交互继续setup.exe
启动Windows安装程序
在PowerShell中运行下面命令启动安装程序(注意盘符换成挂载上以后的实际字符):
D:\setup.exe /auto upgrade
等待Windows Server 2016 安装程序启动完毕, 根据实际需要选择是否包含桌面体验
的映像, 其他基本上就是一路下一步
然后就是漫长的等待了, 中间实例会重启, 远程桌面也会断开无法查看桌面, 这时候在AWS控制台Get instance screenshot
查看实例屏幕截图来观察更新进度
在屏幕截图中刷出来升级完成后的登陆界面
尝试远程桌面访问, 密码正确的情况下出现报错:
查了下资料, 貌似是少了某个KB的更新, 可以直接用SSM中的Run Command
执行名为AWS-InstallWindowsUpdates
的Command Document
经过漫长的等待后, 执行完毕
再次远程桌面连接成功!
至此EC2中就地升级Windows Server 2012至2016就完成了, 当然上面的实验是基于纯系统没装任何第三方应用的状态下实现的, 实际情况中很有可能会由于第三方应用对2016不兼容或老系统驱动没有更新导致就地升级失败, 推荐的升级方式还是新建一个高版本的实例, 然后手动对数据和应用进行迁移.