gpt4 book ai didi

python - 使用 Python 从 qcow2 图像文件创建自定义 EC2 AMI

转载 作者:行者123 更新时间:2023-11-28 17:41:08 25 4
gpt4 key购买 nike

我正在编写一项服务,需要根据 qcow2 图像文件在每个 EC2 区域中注册自定义 AMI。

我一直在探索 apache-libcloudboto 库,但 AMI 注册函数似乎是为创建基于正在运行的实例的 AMI 而构建的,我想将 AMI 基于我的 qcow2 图像文件。

如果这个问题没有简单的解决方案,我会采用复杂的解决方案。如果出于某种原因这对于 qcow2 图像文件是不可能的,我也可以访问 RAW 图像文件。

最佳答案

我已经成功地以编程方式完成了这项工作。我的解决方案使用原始图像文件,因为它们是可以直接写入磁盘的文件。如果您需要从 qcow2 图像文件转换,您可以使用 qemu-img 手动完成,或参见 a simple Python implementation的转换。

我基于原始图像文件注册 AMI 的过程概述:

  1. 选择一个 AMI 和相应的 AKI 用作“实用程序实例”。它不必与您尝试注册的图像使用相同的操作系统。如果 AMI 在 /etc/sudoers 中启用了 requiretty,您需要确保在尝试通过 SSH 进入节点时请求伪终端,例如 Paramiko 的Channel.get_pty() 方法。

  2. 根据所选的 AMI 和 AKI 启动实用程序实例。它必须经过 EBS 优化(m1.large 大小的实例可以很好地与 EBS 配合使用)并且应该附加一个辅助 EBS 卷,该卷的大小足以容纳您要注册的整个未压缩图像。我使用 /dev/sdb 作为此设备名称。

  3. 一旦可以通过 SSH 访问实用程序实例,让它将原始图像文件写入辅助卷。就我个人而言,我从互联网上拉取了一个 .raw.xz 文件,这是我要写入的图像,所以我的实用程序命令是 sudo sh -c 'curl RAW_XZ_URL | xzcat >/dev/xvdb.请注意,根据我的所有经验,/dev/sdX 设备在实际实例中作为 /dev/xvdX 访问,但可能并非所有情况都是如此。

  4. 实用程序命令完成后,您可以销毁实用程序节点,前提是您已使 /dev/sdb 卷在节点终止时不被删除。如果还没有,只需停止节点。如果以编程方式执行实用程序命令,您可以使用 Paramiko 的 Channel.recv_exit_status() 方法等待命令完成,然后检查是否有指示成功的 0 退出状态。

  5. 一旦实用程序实例不再运行,拍摄 /dev/sdb 卷的快照。

  6. 快照完成后,您可以将其注册为 AMI。确保使用您一直使用的相同 AKI,以及正确的根设备名称(我使用完整的磁盘镜像,所以我的根设备名称是 /dev/sda 而不是比 /dev/sda1)。 Amazon 现在建议您使用 hd0 pv-grub AKI,而不是 hd00。

实现这一切的一种方法是通过 apache-libcloudparamiko Python 库,它们都可以通过 pip 安装。一个很好的例子是 Fedimg库,它实现了这个确切的方法,以便在 Fedora 云镜像构建完成时自动在所有 EC2 区域中注册新的 AMI。

在实际实现这个过程时,涉及到相当多的时间安排、异常处理和其他“陷阱”。这只是通过我的方法解决挑战所必须采取的步骤的概述。

关于python - 使用 Python 从 qcow2 图像文件创建自定义 EC2 AMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com