使用Python从qcow2图像文件创建自定义EC2 AMI
我正在编写一个服务,它需要基于qcow2映像文件在每个EC2区域注册自定义AMI 我一直在探索apachelibcloud和boto库,但是似乎构建AMI注册函数是为了基于运行的实例创建一个AMI,我想基于我的qcow2映像文件创建AMI使用Python从qcow2图像文件创建自定义EC2 AMI,python,amazon-ec2,cloud,amazon-ami,Python,Amazon Ec2,Cloud,Amazon Ami,我正在编写一个服务,它需要基于qcow2映像文件在每个EC2区域注册自定义AMI 我一直在探索apachelibcloud和boto库,但是似乎构建AMI注册函数是为了基于运行的实例创建一个AMI,我想基于我的qcow2映像文件创建AMI 如果这个问题没有简单的解决办法,我就选一个复杂的。如果由于某种原因,qcow2图像文件无法实现这一点,我还可以访问原始图像文件。我已经成功地通过编程实现了这一点。我的解决方案使用原始图像文件,因为它们可以直接写入磁盘。如果需要从qcow2图像文件进行转换,可以
如果这个问题没有简单的解决办法,我就选一个复杂的。如果由于某种原因,qcow2图像文件无法实现这一点,我还可以访问原始图像文件。我已经成功地通过编程实现了这一点。我的解决方案使用原始图像文件,因为它们可以直接写入磁盘。如果需要从qcow2图像文件进行转换,可以使用
qemu img
手动进行转换,或参见转换步骤
基于原始图像文件的AMI注册过程概述:
/etc/sudoers
中启用了requirety
,则需要确保在尝试SSH到节点时请求伪终端,例如使用Paramiko的通道。get_pty()
方法m1.大型
size实例与EBS配合良好),并且应该连接一个辅助EBS卷,该卷的大小足以容纳要注册的整个未压缩映像。我使用/dev/sdb
作为这个设备名.raw.xz
文件,这就是我想要编写的图像,因此我的实用程序命令是sudo sh-c'curl raw\u xz\u 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,而不是hd00apachelibcloud
和paramiko
Python库,这两个库都是可安装的。一个很好的例子是这个库,它实现了这个精确的方法,以便在Fedora云映像构建完成时在所有EC2区域自动注册新的AMI
在实际实现这个过程时,会涉及很多时间、异常处理和其他“陷阱”。这只是通过我的方法解决挑战所必须采取的步骤的概要。我从这篇描述中得到的是,无法将图像直接上传到S3存储桶,必须通过EC2实例插入。