Hashicorp Packer构建AWS AMI时EC2实例未执行重启命令的问题
解决Packer构建AWS AMI时重启步骤执行顺序异常的问题
看起来你在Packer构建AWS AMI时碰到了一个典型的provisioner执行顺序和SSH重连问题,我来帮你拆解分析并给出修复方案。
首先看你的配置片段:
{ "type": "shell", "script": "scripts/apt.sh" }, { "type": "shell", "inline": ["sudo reboot"], "inline_shebang": "/bin/bash -e", "expect_disconnect": true }, { "type": "shell", "script": "scripts/sysctl.sh", "pause_before": "10s" }
从日志能明显看出问题:本该在apt.sh之后执行的重启命令,被跳过直接跑了sysctl.sh,等到sysctl.sh执行完才触发重启,最后因为SSH连接断开无法恢复,Packer直接终止了EC2实例。
问题根源
pause_before的位置错误:你把暂停配置加在了sysctl.sh这个provisioner上,意味着Packer会在执行sysctl.sh之前暂停10秒,但重启步骤的优先级在sysctl.sh之前,这就导致重启命令还没执行,先等了10秒然后直接跑sysctl.sh了。- 缺少重启后的重连等待逻辑:重启会直接断开SSH连接,虽然你加了
expect_disconnect: true,但Packer需要足够的时间等待EC2实例重启完成、SSH服务重新就绪才能继续后续步骤,当前配置没有给这个过程留足时间。 - 可能存在JSON配置的隐性语法问题(比如逗号或括号缺失),导致Packer解析provisioner顺序时出错,可以先用
packer validate your-template.json验证配置合法性。
修复方案
1. 调整配置顺序与等待逻辑
把暂停逻辑移到重启后的provisioner,同时给Packer增加SSH重连的尝试次数和超时时间,确保实例重启后能重新建立连接:
{ "builders": [ { "type": "amazon-ebs", // 保留你原有的builder配置(AMI名称、实例类型等) "ssh_handshake_attempts": 30, // 最多尝试30次SSH连接,每次间隔默认1秒 "ssh_timeout": "5m", // 延长SSH超时到5分钟,给实例重启留足时间 "ssh_pty": true // 有些系统需要PTY才能执行sudo reboot } ], "provisioners": [ { "type": "shell", "script": "scripts/apt.sh" }, { "type": "shell", "inline": ["sudo reboot now"], "inline_shebang": "/bin/bash -e", "expect_disconnect": true }, { "type": "shell", "script": "scripts/sysctl.sh", "pause_before": "2m" // 重启后先等2分钟,确保实例完全启动、SSH可用 } ] }
2. 确保apt.sh脚本执行完全
如果apt.sh里有后台运行的任务(比如后台更新),Packer会等待所有子进程结束才会进入下一个provisioner,可能导致顺序混乱。建议在apt.sh末尾加上wait命令,确保所有进程执行完毕:
# 在apt.sh最后添加 wait
3. 给sysctl.sh添加前置检查
为了保险起见,可以在sysctl.sh开头添加一段逻辑,确保系统网络和SSH服务完全就绪后再执行配置:
#!/bin/bash # 等待本地网络就绪 until ping -c 1 127.0.0.1 > /dev/null 2>&1; do sleep 10 done # 等待SSH服务监听端口 until nc -z localhost 22; do sleep 10 done # 执行你的sysctl配置 sysctl -w net.ipv4.ip_forward=0 # ...其他配置
日志异常补充说明
从你提供的日志来看,sudo reboot now是在sysctl.sh的输出之后才出现的,这说明重启命令的执行时机完全错位了——大概率是配置解析顺序出了问题,先用packer validate检查配置文件,确保JSON语法完全正确,没有遗漏的逗号或括号,这是很多人容易忽略的细节。
内容的提问来源于stack exchange,提问作者Mazzy
相关产品推荐
相关产品推荐

