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

使用Terraform在GCP部署实例时startup_script无法正常执行求助

问题排查点
  • 元数据键名错误:这是最核心的问题,metadata_startup_script是google_compute_instance资源的顶层独立参数,如果你把它放在metadata块内部,对应的GCP元数据键名应该是startup-script,键名写错会导致GCP的实例初始化服务识别不到要执行的启动脚本。
  • 系统镜像不匹配:你脚本里用的是yum包管理器,仅适用于RHEL、CentOS、Rocky Linux等红帽系镜像,如果你的实例用的是Debian、Ubuntu等Debian系镜像,yum命令不存在会直接导致脚本执行中断。
  • 符号格式错误:echo语句中使用了中文全角引号“”,部分shell环境会解析失败,导致后续写入文件的操作报错终止,需要替换为英文半角引号""。
  • 目录不存在问题:如果镜像默认没有创建/var/www/html目录,写入操作会直接失败,建议在写入前先执行mkdir -p /var/www/html确保目录存在。
调试方法

你可以登录到实例中查看启动脚本的执行日志定位具体问题:

  • 红帽系系统日志路径:/var/log/messages
  • Debian系系统日志路径:/var/log/syslog
    搜索startup-script关键词即可看到完整的执行报错信息。
修正后的配置示例

两种正确写法二选一即可:

写法1:使用顶层metadata_startup_script参数

resource "google_compute_instance" "vm1" {
  # 其他实例配置(镜像、机型、网络等,你原来的配置要保留)
  metadata = {
    ssh-keys = "${var.user}:${file(var.publickeypath)}"
  }
  metadata_startup_script = <<SCRIPT
yum install -y httpd
systemctl start httpd.service
systemctl enable httpd.service
mkdir -p /var/www/html
echo "Hello World from $(hostname -f)" > /var/www/html/index.html
SCRIPT
}

写法2:在metadata块内使用正确的键名

resource "google_compute_instance" "vm1" {
  # 其他实例配置(镜像、机型、网络等,你原来的配置要保留)
  metadata = {
    ssh-keys = "${var.user}:${file(var.publickeypath)}"
    startup-script = <<SCRIPT
yum install -y httpd
systemctl start httpd.service
systemctl enable httpd.service
mkdir -p /var/www/html
echo "Hello World from $(hostname -f)" > /var/www/html/index.html
SCRIPT
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:09:01