AWS 用户数据无法在自定义 Ubuntu AMI 上运行

AWS 用户数据无法在自定义 Ubuntu AMI 上运行

我创建了一个带有 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/将“云图像”与创建的安装图像进行比较。

相关内容