我创建了一个带有 Autoinstall 和用户数据的自定义 Ubuntu ISO,以在我们的 VMware 设置中设置虚拟机 (VM)。然后将此 VM 转换为 OVA 格式,上传到 AWS S3,并转换为 Amazon 机器映像 (AMI)。我们使用此 AMI 创建 EC2 实例,在其中运行一些初始设置命令以准备生成 AMI。
我们的目标是制作一个可以运行用户数据脚本的可靠 AMI。但是,我们面临一个主要问题:从此 AMI 创建的 EC2 实例不处理用户数据。我认为这可能与用户数据在原始 VM 中的执行方式有关。有人能帮忙找出原因吗用户数据在这些 EC2 实例中不起作用以及如何修复它?
答案1
如果你想使用云初始化 Ec2
数据源,那么用于创建虚拟机的自动安装文件应该包含类似这样的内容
#cloud-config
autoinstall:
late-commands:
- |
rm /target/etc/netplan/00-installer-config.yaml
rm /target/etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
rm /target/etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg
rm /target/etc/cloud/cloud.cfg.d/99-installer.cfg
true
总体思路是通过删除安装程序创建的文件,将“安装映像”转换为“云映像”。下位性,配置云初始化。
文件创建者下位性包括
/etc/netplan/00-installer-config.yaml
提供准备好的网络配置。如果将镜像移动到 AWS,则此网络配置可能不受欢迎。/target/etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
阻止云初始化再次配置网络。如果您将图像移动到 AWS,则可能需要配置网络。/etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg
阻止云初始化再次配置 apt。如果您将图像移动到 AWS,则可能需要配置 apt。/etc/cloud/cloud.cfg.d/99-installer.cfg
包含基于所选安装选项的安装程序配置。这包括首次启动配置,如创建第一个用户和配置 OpenSSH。此安装程序配置将作为None
数据源添加。
该文件/etc/cloud/cloud.cfg.d/99-installer.cfg
还包括配置
datasource_list:
- None
我相信这是导致云初始化跳过您的 AWS 用户数据,因为它不会查找Ec2
数据源。默认数据源列表在 中配置/etc/cloud/cloud.cfg.d/90_dpkg.cfg
,但会被 覆盖99-installer.cfg
。
陷阱
- 首次启动配置
/etc/cloud/cloud.cfg.d/99-installer.cfg
将不是运行。必须在Ec2
数据源中重新创建此配置。如果图像需要在 VMware 和 AWS 中工作,则需要进行额外的配置,因此云初始化在两种环境中均按预期运行。 - 如果你在转换为 AMI 之前启动已安装映像的 VM,则云初始化行为发生更大变化。
笔记
- 我的经验是使用 Ubuntu 22.04 (
subiquity 22.04.2
) 进行测试的。 - 您可以从下载https://cloud-images.ubuntu.com/将“云图像”与创建的安装图像进行比较。