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

Terraform AWS EC2模块中UserData未执行问题排查求助

AWS EC2 Terraform UserData 未执行排查方案
  • 修正脚本缩进问题
    你的UserData脚本里#!/bin/bash -x前面有多余空格,shebang必须是脚本第一行且开头不能有空格,否则系统无法识别解释器。修正后的写法:
    user_data = <<EOF
    

#!/bin/bash -x
echo "USER SCRIPT START====="
touch /tmp/somename
echo "USER SCRIPT END====="
EOF

要么去掉所有行的前置缩进,至少保证shebang行没有开头空格。

- **查看Cloud-Init执行日志**
登录实例后,通过以下日志定位问题:
- 执行 `cat /var/log/cloud-init.log`:查看cloud-init的初始化流程,包括UserData的获取、触发执行的细节
- 执行 `cat /var/log/cloud-init-output.log`:查看UserData脚本的输出内容,脚本执行失败的话这里会有具体错误信息

- **检查实例启动配置合法性**
- `subnet_id`字段:`join(",", var.subnet)`会把子网ID拼成逗号分隔的字符串,但EC2实例只能关联单个子网,这个配置会导致实例启动异常,进而无法执行UserData。改成引用单个子网,比如`var.subnet[0]`(如果`var.subnet`是列表类型)
- `associate_public_ip_address`:Terraform中这个参数应该用布尔值`true`,而非字符串`"true"`,虽然部分版本兼容字符串写法,但建议修正为`associate_public_ip_address = true`

- **确认实例正常初始化**
检查实例状态是否为`running`,且系统状态检查通过。如果实例启动时出现子网配置错误、安全组限制等问题,会导致cloud-init无法正常运行。

- **测试移除IAM实例配置(可选)**
虽然你的脚本没调用AWS API,但如果`iam_instance_profile`配置的角色有异常权限限制,可能影响cloud-init流程。可以暂时移除这个参数,测试UserData是否能正常执行。

内容的提问来源于stack exchange,提问作者rahuls_
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:15:31