简单的方法将自定义32位AMI转换为64位?

我已经定制了(EBS支持的)AMI来运行我们的应用程序的演示版本。 (AMI包含Ubuntu 11.04,为应用程序本身提供了Tomcat&MySQL设置,Jenkins则提供了简单的一次性演示更新)。

这是一个32位AMI,这意味着我有以下实例types选项 :

  • 微(t1.micro)
  • 小(m1.small)
  • 高CPU介质(c1.medium)

我们已经注意到,我们希望演示服务器的性能比c1.medium能够提供的更多。 (具体来说,我怀疑“I / O性能:中等”可能是一个瓶颈,虽然我不确定是否改进,这将有助于我们使用EBS的一切。)

无论如何,为了使用更强大的实例types(例如“m1.large”或“c1.xlarge”), 我需要一个64位的AMI

一种方法是从干净的64位Ubuntu AMI创build一个新的实例,然后在那里重新设置我的系统,最后保存为一个新的AMI。 我可以使用当前设置挂载一个卷,然后cp -a一些东西到新的实例的根磁盘,这将有所帮助。 但即便如此,这种方法可能会有点繁琐和耗时。

所以,我的问题是, 是否有更简单,自动的方式将32位AMI转换为64位?

不,没有自动化的方法。 你将不得不创build一个新的AMI从Ubuntu的普通开始。

有可能转换一个Unbuntu安装,但它真的很混乱。 你最好做一个新的AMI。

最佳做法:

  1. 每当你build立一个AMI(甚至build立一个实例)时,都要logging你安装和configuration软件的确切步骤,以及你在其上和在哪里放置的数据。 这具有很多好处,包括可以很容易地为不同的架构重build相同的AMI。

    更好的是,我推荐编写大部分或所有的安装脚本,configuration步骤,以便您可以自动构buildAMI。 这使得调整设置和testing新版本变得很容易。

    下面是我如何构build一个安装了Git和gitolite的Ubuntu AMI用于私有Git存储库服务器的示例:

    https://github.com/alestic/alestic-git/blob/master/bin/alestic-git-build-ami

  2. 上面的第一个build议是设置一般在根卷上的软件。 运行AMI后,您的数据应放置在附加到实例的单独EBS卷上。 这有很多好处,包括在实例间移动数据的能力,比如当你想切换到运行一个新的AMI时。 它还使您可以复制数据卷以附加到开发实例。

你可能认为这个build议对你来说太晚了,但你即将build立另一个AMI,所以…

您需要从一个新的AMI开始,我相信,但您可以使用dpkg在旧映像上生成软件包列表:

 dpkg --get-selections | awk '{print $1}' > pkgs.old 

然后在新映像上使用这个来确定你可能需要安装哪些软件包:

 dpkg --get-selections | awk '{print $1}' | fgrep -v -f - pkgs.old 

然后可能复制/ etc的文件应该让你大部分的方式。

用+1来编写脚本 – 你几乎没有把这些事情设置一次或两次 – 通常是很多次。 拥有所有这些自动化和源代码控制是至关重要的。

尝试使用蓝图逆向devise32位AMI:

https://github.com/devstructure/blueprint

将输出保存为bash脚本,并在启动64位版本时使用用户数据钩子。