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_
相关产品推荐
相关产品推荐

