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

Terraform user_data无法在EC2实例上执行bash脚本

排查Terraform user_data未执行bash脚本的问题

以下是针对性的排查和解决步骤:

  • 检查脚本shebang头
    bash脚本的第一行必须指定解释器,否则EC2的cloud-init无法识别执行方式。确保install.sh开头包含:

    #!/bin/bash
    

    或针对轻量环境用#!/bin/sh。

  • 验证user_data是否正确传递
    登录EC2实例后,查看/var/lib/cloud/instance/user-data.txt文件,确认文件内容与本地install.sh一致。如果为空,检查Terraform路径是否正确:

    • 确认install.sh确实在Terraform模块根目录(path.module指向的目录)
    • 可在Terraform配置中添加存在性检查,提前发现文件缺失:
      user_data = fileexists("${path.module}/install.sh") ? file("${path.module}/install.sh") : ""
      
  • 查看cloud-init执行日志
    EC2的user_data由cloud-init处理,执行日志存放在两个文件中:

    • /var/log/cloud-init.log:记录cloud-init的初始化流程
    • /var/log/cloud-init-output.log:记录user_data脚本的输出和错误信息
      查看这两个日志,可直接定位脚本执行失败的原因(如命令报错、权限问题、依赖缺失等)。
  • 检查脚本命令的非交互性
    脚本中如果包含需要人工确认的命令(如yum install未加-y),会导致执行卡住。确保所有安装类命令添加非交互参数:

    yum install -y httpd
    apt-get install -y nginx
    
  • 确认AMI支持cloud-init
    你使用的ami-069d73f3235b535bd是Amazon Linux 2 AMI,默认支持cloud-init;如果是自定义AMI,需确保已安装cloud-init包,否则无法处理user_data。

  • 验证Terraform执行过程
    执行terraform apply时,若出现"file not found"类错误,说明路径配置有误,需调整file()函数的路径参数。

示例可验证的install.sh:

#!/bin/bash
# 写入日志标记执行开始
echo "User_data started at $(date)" >> /tmp/user_data_exec.log
# 执行示例操作
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
# 写入日志标记执行完成
echo "User_data finished at $(date)" >> /tmp/user_data_exec.log

内容的提问来源于stack exchange,提问作者meallhour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:02