从自定义AMI启动AWS EC2实例时cloud-init未执行user-data脚本
Ubuntu 20.04 AWS EC2自定义AMI cloud-init不执行user-data的完整清理方案
必须清理的额外残留项及操作步骤
你之前执行的清理操作未覆盖所有cloud-init首次启动判断标识,按以下步骤执行全量清理即可解决问题:
- 正确重置机器ID,注意不要删除
/etc/machine-id文件,否则systemd不会自动生成新ID,导致cloud-init识别为已启动过的实例:sudo truncate -s 0 /etc/machine-id sudo rm -f /var/lib/dbus/machine-id sudo ln -s /etc/machine-id /var/lib/dbus/machine-id - 带全量参数执行cloud-init清理,默认
cloud-init clean不会清理所有配置缓存:sudo cloud-init clean --logs --seed --configs all - 删除cloud-init遗留的实例状态缓存目录,避免旧实例ID被识别为非首次启动:
sudo rm -rf /var/lib/cloud/* sudo rm -rf /run/cloud-init/* - 检查并删除cloud-init的禁用配置,部分预装环境会在
/etc/cloud/cloud.cfg.d/下生成自定义配置文件阻止cloud-init运行:sudo ls /etc/cloud/cloud.cfg.d/ # 若存在命名类似99_disable_cloud_init.cfg的禁用规则,直接删除对应文件即可 - 确认cloud-init相关服务处于开机自启状态,避免服务被手动禁用:
sudo systemctl enable cloud-init cloud-init-local cloud-config cloud-final - 可选操作:清理shell历史避免敏感信息残留
history -c && sudo rm -f /root/.bash_history /home/ubuntu/.bash_history
AMI制作注意事项
- 执行完所有清理命令后,直接执行
sudo shutdown -h now关机,不要执行任何其他操作,更不要重启实例,否则cloud-init会重新生成状态缓存导致清理失效 - 从关机实例创建AMI时,不要勾选「重启实例」选项,确保实例全程处于关机状态完成镜像制作
效果验证
使用新制作的AMI启动实例后,执行sudo cat /var/log/cloud-init-output.log即可查看user-data的执行日志,确认脚本运行状态。
内容的提问来源于stack exchange,提问作者Vinod Suthar
相关产品推荐
相关产品推荐

