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

通过Node.js SDK从制品镜像创建VM实例失败问题排查

问题解决:指定ServiceAccount后GCP VM创建即被删除

核心问题分析

通过GCP Compute SDK创建带容器的VM实例时,不指定ServiceAccount(SA)可正常运行,但指定SA后实例会在创建后立即被删除,返回结果看似成功。需要SA的原因是要访问私有容器镜像,且未使用GKE(成本更低、实例固定无需扩容)。

排查步骤

  • 登录GCP控制台,找到已删除的VM实例,查看串行端口输出或Cloud Logging中的系统日志,通常会发现容器启动失败(比如镜像拉取权限不足),这是导致实例被自动终止的核心原因。

解决方案

1. 给实例使用的SA添加镜像仓库读取权限

实例配置中指定的*********-compute@developer.gserviceaccount.com需要具备私有镜像仓库的读取权限:

  • 若使用Artifact Registry:授予roles/artifactregistry.reader角色
  • 若使用Container Registry:授予roles/storage.objectViewer角色(GCR依赖Cloud Storage存储镜像)

2. 确保创建VM的SA具备Service Account User权限

代码中初始化InstancesClient所用的service-account.json对应的SA,需要拥有roles/iam.serviceAccountUser角色,否则无法将指定的SA附加到新创建的VM实例上,会导致实例创建后因SA分配失败被终止。

3. 验证容器声明格式

对比控制台创建VM时的gce-container-declaration元数据内容,确保SDK中的格式(换行、缩进)完全一致,避免因格式错误导致容器启动失败。

4. 优化错误日志排查

修改代码中的catch块,打印错误的详细信息,便于定位问题:

catch (error) {
  console.error("Error creating VM:", JSON.stringify(error, null, 2));
  res.status(500).json({ error: "Failed to create VM", details: error.message });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:20:21