EC2实例user_data脚本未执行问题求助
AWS EC2 User Data脚本未执行问题排查与修复
核心排查方向
1. 查看Cloud-Init执行日志
登录EC2实例后,直接查看这两个关键日志文件,能定位脚本执行的具体错误:
# 查看cloud-init的执行日志 cat /var/log/cloud-init.log # 查看脚本的输出日志(含错误信息) cat /var/log/cloud-init-output.log
脚本执行失败的原因(如网络不通、命令错误)都会在这里体现。
2. 检查私有子网网络连通性
你的实例部署在私有子网,如果没有配置NAT网关或VPC端点用于访问yum源,yum update和yum install命令会因无法连接外网而失败,导致脚本中断。
3. 验证User Data脚本的传递与格式
- 登录实例后,检查
/var/lib/cloud/instance/user-data.txt文件,确认内容和本地user_data.sh完全一致,没有格式错误(比如Windows换行符\r\n会导致脚本执行异常)。 - Terraform传递User Data时,可尝试用base64编码避免格式问题:
resource "aws_instance" "ec2_b" { # 其他配置保持不变 user_data = base64encode(file("./user_data.sh")) }
脚本优化建议
Cloud-Init默认以root用户执行User Data脚本,你的脚本中大量sudo是多余的,甚至可能引发环境变量问题。修改后的脚本如下:
#!/bin/bash # 写入测试文件并修正所有者 echo "test" > /home/ec2-user/test.txt chown ec2-user:ec2-user /home/ec2-user/test.txt # 更新系统并安装Apache yum update -y yum install httpd -y # 启动并设置Apache开机自启 systemctl start httpd systemctl enable httpd # 写入首页内容 echo "Hello, World" > /var/www/html/index.html
手动验证脚本逻辑
将脚本复制到实例中,以root身份手动执行,排查脚本本身的语法或逻辑问题:
sudo su - bash /path/to/user_data.sh
内容的提问来源于stack exchange,提问作者Zuxaw
相关产品推荐
相关产品推荐

