是否有可能为Windows EC2实例创buildEBS AMI?

我们有一个运行在EC2中的Windows服务器(支持EBS)。 我们定期为数据备份创build快照。 我想从这些快照之一创build一个新的EC2实例。

是的,我意识到这与拔掉电源并打开机器是一样的,但我想testing快照中数据的可靠性,以便进行恢复。

我已经尝试过使用Web控制台,命令行工具和ruby sdk从我们的Windows启动驱动器(EBS)的快照创build一个AMI映像 – 它们都创build一个AMI,将平台显示为Linux,而不是Windows,而是使用半虚拟化的hvm。 从这个AMI创build的新EC2实例无法上线,我认为它崩溃,因为它运行在错误的虚拟化平台上。

在我所做的所有Googlesearch中,我只遇到过Linux指令,或者是从实例支持的EC2实例(而不是EBS支持的)或快照创buildWindows EBS的说明。

背景

从快照启动实例不适用于Windows AMI(正如您自己发现的那样 ):

重要

注册快照仅适用于Linux / UNIX AMI; 尽pipe您可以注册快照以创buildWindows AMI, 但AMI不可启动。 [强调我的]

替代

虽然未指定,但应该注意可以简单地克隆Amazon EBS支持的实例 ,如从运行实例创build映像中所述 – 当通过AWSpipe理控制台这样做时,EC2会尝试干净地closures实例在映像创build之前重新启动实例 。 这显然通常是可取的,但是,如果需要,可以通过命令行来避免:

如果您不想重新启动实例,则可以使用Amazon EC2命令行工具创build映像[…]。 ec2-create-image命令有一个–no-reboot选项。

上面提到的替代方法显然不能帮助指定的这些快照之一创build一个新的EC2实例 – 无论如何有用的解决scheme在移动到 Eric Hammond的文章移动一个运行的EBS启动 的新实例 实例到Amazon EC2上的新硬件 (具有不同的用例,但是无论如何都适用),归结为您的案例中的这些步骤:

  1. 使用与原始参数相同的启动参数创build一个新实例。
  2. 等到新实例运行,然后停止(不终止)它。
  3. 从新实例中分离EBS引导卷并删除这个分离的卷,因为它不再是必需的。
  4. 从快照创build一个新的卷,并将其附加到新的实例。
  5. 重新启动新的实例,该实例将使用从快照创build的卷进行引导。

Colin Percival曾经使用过这种技术,使得在EC2上运行FreeBSD也是顺理成章的。 (其中包括对虚拟化问题的一些提示):

另一方面,EC2 Windows实例是在HVM(硬件虚拟机)模式下启动的,而FreeBSD支持的模式非常好。 如果我们能以某种方式欺骗EC2以启动Windows的方式启动FreeBSD,我们可以在各种各样的实例types上运行FreeBSD。 我们如何欺骗EC2? 利用Elastic Block Store磁盘可以从EC2实例中分离并重新连接到不同的实例,并用包含FreeBSD的磁盘replace“Windows”实例的启动磁盘。

我发现只能从实例创buildAMI,而不能从现有快照创buildAMI。 从快照创buildAMI的命令只支持linux。

从Windows实例(运行或停止)创buildAMI的命令行命令是ec2-create-image 。 我已经成功完成了这个使用rubysdk。 该命令创build连接到实例的EBS卷的快照,然后使用这些快照构build正确的AMI。 如果您使用Web控制台,它将closuresWindows机器。 从命令行/ api中,您可以select不closures它,在这种情况下,您需要同样注意数据的一致性,就像创build快照一样。

所以,如果你已经终止你的实例,没有一个AMI,你是在小河。 或者,您可以启动一个新的Windows实例,然后将其closures,然后连接从您的快照创build的卷。 我还没有尝试过,但我希望你可以分开引导卷和附加一个新的。