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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:45:24