You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:06:02