Terraform调用GCP Provider创建VM执行apply时报错
报错原因
这个报错和你给服务账号授予的Compute Admin角色、可用区配置、VM资源定义都没有关系,核心是Terraform使用服务账号凭证换取OAuth2令牌时请求异常中断,属于认证环节故障。
排查解决步骤
- 优先检查本地
credentials.json文件有效性
90%以上的同类报错都是服务账号密钥文件损坏导致的:要么是从GCP控制台下载时网络不佳文件被截断,要么是手动编辑过文件破坏了JSON格式,要么是文件传输过程不完整。
直接到GCP控制台对应服务账号的详情页,重新生成一份JSON格式的密钥,覆盖本地旧的credentials.json,不要手动修改文件内的任何内容。覆盖前可以先打开本地旧文件检查,如果内容缺结尾大括号、或者明显只有半截内容,直接替换即可。 - 确认文件路径和读取权限正常
你的配置中写的是读取当前执行目录下的credentials.json,先在执行terraform apply的目录运行ls -l credentials.json,确认文件存在、文件名没有写错(比如不要是隐藏后缀的credentials.json.txt),同时当前执行命令的用户对文件有读权限。也可以直接运行cat credentials.json,能正常输出完整JSON内容即可排除这部分问题。 - 排查网络拦截问题
如果凭证文件没有问题,检查本地网络是否开启了代理、防火墙规则是否拦截了到GCP OAuth端点的请求,令牌请求被中途截断就会返回unexpected EOF。可以临时关闭系统代理、调整防火墙规则后重试,确认到GCP公共API端点的连通性正常。 - 升级Google Provider版本
如果你本地使用的是多年前的旧版Google Terraform Provider,可能存在认证逻辑的兼容bug,执行terraform init -upgrade将Provider升级到稳定版后再重试。
额外说明:你贴的报错日志里显示正在创建的资源是
google_compute_instance.vm_creation,但代码中定义的资源名是vm_instance,说明你修改代码后没有重新执行terraform plan刷新状态,解决认证问题后记得重新运行plan确认配置和状态一致,避免后续出现其他问题。
内容的提问来源于stack exchange,提问作者sidharth vijayakumar
相关产品推荐
相关产品推荐

