我已经定制了(EBS 支持的)AMI 来运行我们应用程序的演示版本。(AMI 包含 Ubuntu 11.04,其中为应用程序本身设置了 Tomcat 和 MySQL,以及 Jenkins,可轻松一键更新演示)。
这是一个 32 位 AMI,这意味着我有以下内容实例类型选项:
- 微(t1.micro)
- 小 (m1.small)
- 高 CPU 介质(c1.medium)
我们注意到,我们希望演示服务器的性能比 c1.medium 所能提供的更高一些。(具体来说,我怀疑“I/O 性能:中等”可能是一个瓶颈,尽管我不确定改进这一点是否有帮助,因为我们在所有事情上都使用 EBS。)
无论如何,为了使用更强大的实例类型(例如“m1.large”或“c1.xlarge”),我需要一个 64 位 AMI。
一种方法是从干净的 64 位创建一个新实例Ubuntu AMI,然后在那里重新设置我的系统,最后将其保存为新的 AMI。我可以使用当前设置安装一个卷,然后将cp -a
一些内容转移到新实例的根磁盘上,这会有所帮助。但即便如此,这种方法可能有点繁琐和耗时。
我的问题是,有没有更简单、自动化的方法将 32 位 AMI 转换为 64 位 AMI?
答案1
不,没有自动化的方法。您必须从 Ubuntu-plain 开始创建新的 AMI。
可以转换 Unbuntu 安装,但确实很麻烦。最好制作一个新的 AMI。
答案2
最佳做法:
每当构建 AMI(甚至设置实例)时,始终记录安装和配置软件的确切步骤以及在其中放置了哪些数据以及放置的位置。这样做有很多好处,包括可以轻松为不同的架构重建相同的 AMI。
更好的是,我建议编写大部分或所有安装、配置步骤的脚本,以便您可以自动构建 AMI。这样可以轻松调整设置并测试新版本。
下面是我为私有 Git 存储库服务器构建安装了 Git 和 gitolite 的 Ubuntu AMI 的示例:
https://github.com/alestic/alestic-git/blob/master/bin/alestic-git-build-ami
上述第一个建议是针对通常位于根卷上的软件进行设置。您的数据应放置在运行 AMI 后附加到实例的单独 EBS 卷上。这有很多好处,包括能够在实例之间移动数据,例如当您想要切换到运行新 AMI 时。它还允许您复制数据卷以附加到开发实例。
您可能认为这个建议对您来说太晚了,但您即将构建另一个 AMI,所以......
答案3
我相信您需要从一个新的 AMI 开始,但您可以使用 dpkg 在旧图像上生成软件包列表:
dpkg --get-selections | awk '{print $1}' > pkgs.old
然后在新图像上使用它来确定可能需要安装哪些软件包:
dpkg --get-selections | awk '{print $1}' | fgrep -v -f - pkgs.old
那么从 /etc 中复制文件可能就能够完成大部分工作了。
并且 +1 编写脚本 -- 您几乎不会设置这些内容一两次 -- 通常需要设置很多次。使所有这些自动化并进行源代码控制至关重要。
答案4
尝试使用蓝图对 32 位 AMI 进行逆向工程:
https://github.com/devstructure/blueprint
将输出保存为 bash 脚本,并在启动 64 位版本时使用用户数据挂钩。