我正在编写一个服务,它需要根据一个EC2图像文件在每个qcow2区域注册自定义AMI。
我一直在探索apache-libcloud和boto库,但似乎构建AMI注册函数是为了基于正在运行的实例创建AMI,并且我希望将AMI建立在我的qcow2映像文件上。
如果这个问题没有一个简单的解决办法,我将采取一个复杂的解决办法。如果由于某种原因,这在qcow2图像文件中是不可能的,我也可以访问原始图像文件。
发布于 2014-07-15 14:13:08
我已经成功地以编程的方式做到了这一点。我的解决方案使用原始图像文件,因为它们可以直接写入磁盘。如果需要从qcow2图像文件进行转换,可以使用qemu-img手动完成,或者查看转换的一个简单的Python实现。
基于原始图像文件的AMI注册过程概述:
requiretty中启用了/etc/sudoers,则需要确保在尝试向节点进行SSH时请求伪终端,例如使用Paramiko的Channel.get_pty()方法。m1.large大小实例可以很好地与EBS一起工作),并且应该附加一个足够大的辅助EBS卷,以便您注册整个未压缩的图像。我使用/dev/sdb作为这个设备的名称。.raw.xz文件,这是我想要写的图像,所以我的实用程序命令是sudo sh -c 'curl RAW_XZ_URL | xzcat > /dev/xvdb。请注意,在我的所有经验中,/dev/sdX设备在实际实例中都是以/dev/xvdX的形式访问的,但并不是所有地方都是这样的。/dev/sdb卷不删除。如果没有,只需停止节点。如果以编程方式执行实用程序命令,则可以使用Paramiko的Channel.recv_exit_status()方法等待命令完成,然后检查指示成功的0退出状态。/dev/sdb卷进行快照。/dev/sda而不是/dev/sda1)。亚马逊建议你现在使用hd0 pv-grub AKIs,而不是hd00。实现这一切的一种方法是通过apache-libcloud和paramiko Python库,这两个库都是pip-installable。一个很好的例子是Fedimg库,它实现了这个精确的方法,以便在Fedora云映像构建完成时在所有EC2区域自动注册新的AMI。
在实际实现此过程时,涉及到相当多的时间、异常处理和其他“难点”。这只是一个简单的概述,一个人必须采取的步骤,以解决挑战通过我的方法。
https://stackoverflow.com/questions/24019770
复制相似问题