我在 AWS 管理控制台中无法再选择我的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例使用的 Amazon 机器映像(AMI)。当我查看该 AMI 的“详细信息”选项卡时,看到“无法加载 ami-xxxxxx 的详细信息。你可能无权查看它。”的错误
如何获取不再公开可用的 AMI 的描述?
或者
我在 AWS CloudFormation 模板中引用了某个特定的 AMI ID。Amazon Web Services (AWS) 会在 Microsoft 补丁发布后的五个工作日内定期更新并提供完全修补的 Windows AMI。 这会导致旧模板堆栈中断或模板需要定期更新等问题。为什么会发生这种情况,我该如何防止此问题?
简短描述
您的 EC2 Windows 实例使用的 AMI 不再公有。
AWS 提供专为 Windows 平台配置的公有 AMI。每次发布的 AMI 都具有新的 AMI ID。在新 AMI 发布后十天内,三个月以前的 AMI 将被设为私有。
取消注册自定义 AMI 后也会出现这种情况。有关更多信息,请参阅补丁、安全更新和 AMI ID。
注意:如果您必须从同一 AMI 中启动实例,则必须从该 AMI 创建新的实例。
解决方法
检索不再公有的 AMI ID 的描述
首先,在注册表中找到该 AMI 的名称。然后,使用 PowerShell 找到具有相同名称的最新 AMI。请遵循以下步骤:
注意:这些步骤仅在您使用 Amazon 提供的 AMI 时适用。
1. 从 Amazon EC2 控制台的导航窗格中,选择 Instances(实例)。选择要使用不再可用的 AMI 启动的实例。
2. 连接到该实例。
3. 检查以下注册表位置以确认 AMI 名称:
$AMIName=(Get-Itemproperty HKLM:\SOFTWARE\Amazon\MachineImage).AMIName
$AMIName
注意:HKLM\SOFTWARE\Amazon\MachineImage 注册表位置含有实例启动时该 AMI 的名称和日期。
4. 运行 Get-SSMLatestEC2Image PowerShell 命令以按名称列出所有公有 AMI。要缩小结果范围,请运行以下命令。
Get-SSMLatestEC2Image -ImageName $AMIName -Path ami-windows-latest | %{ write-host $AMIName, $_}
注意:此示例列出了 AWS 区域的最新 AMI ID 和操作系统版本。
除包含了最新的 Microsoft 软件更新以及由 AWS 作出的任何性能改进外,此 AMI 与旧 AMI 相同。最佳做法是使用最新的 AMI 启动新实例。
要接收有关这些定期更改的通知,您可以订阅 Windows AMI 通知。
AMI ID 已经硬编码到 CloudFormation 模板或 IaaS 平台
最佳实践是编写按名称或描述查找最新 AWS Windows AMI 的脚本,而不是按 AMI ID 查找。每次发布后,AMI ID 都会发生变化。
有关更多信息,请参阅补丁、安全更新和 AMI ID。
为免您的构建管道发生中断,您可以通过编程方式来检索 AWS 发布到公有参数仓库并且与您的需求相符的最新 AMI。有关更多信息,请参阅使用公有参数。
您还可以创建自己的 AMI,从而更好地控制 AMI 的生命周期和更新。
要从该 AMI 使用的实例创建映像,请执行以下步骤:
1. 停止该实例。
2. 从 Amazon EC2 控制台的导航窗格中,选择 Instances(实例)。
3. 选择该实例。对于操作,请选择映像、创建映像。
对于映像名称,请输入一个名称。
(可选)对于映像描述,请输入描述。
选择创建映像。
4. 重要提示:第 3 步将为您的实例创建一个完全相同的映像,包括服务器名称和管理员密码。为防止冲突,请创建根据该新映像创建一个新实例。执行任何需要的自定义操作,然后再进行通用操作以创建运行正常的 AMI。有关说明,请参阅如何使用 Sysprep 创建和安装自定义可重用 Windows AMI?
5. 您现在可以使用在第 4 步中创建的映像来启动实例。
相关信息
AWS Windows AMI