指定app.yaml路径后Terraform部署GAE .NET服务仍失败
问题详情
我有一个.NET 6应用,已完成GCP App Engine灵活环境的配置,Terraform部署配置中添加了:
cloud_build_options { app_yaml_path = "/app.yaml" }
但构建日志始终报错:
No valid .NET Core runtime version found for the app or it is not a supported app.
此前升级到.NET 6时因缺少app.yaml遇到过相同错误,本次已确保ZIP包根目录存在app.yaml,且尝试了/app.yaml、app.yaml、./app.yaml三种路径变体,均无效。使用版本:GCP Provider 4.74.0,Terraform 1.5.3。
排查与解决方向
校验app.yaml的运行时配置
确保app.yaml中明确指定了兼容的.NET 6运行时配置,示例如下:runtime: aspnetcore env: flex runtime_config: operating_system: "ubuntu22" dotnet_version: "6"需注意
dotnet_version必须精确指定为"6",runtime设为aspnetcore,且操作系统选择支持.NET 6的版本(如ubuntu22)。确认Terraform代码包路径配置
检查app_engine_flexible_app_version资源中的source_url或local_code参数,确保指向的代码包根目录就是app.yaml所在位置,避免ZIP包内存在嵌套目录导致路径识别失败。指定Cloud Build工作目录
在Terraform的cloud_build_options中添加dir参数,强制构建工作目录为代码根目录:cloud_build_options { app_yaml_path = "app.yaml" dir = "." }这可以避免Cloud Build因工作目录不匹配找不到app.yaml。
升级GCP Provider版本
当前使用的4.74.0版本可能存在.NET 6部署相关的兼容性问题,尝试升级至5.x及以上版本,新版本通常会修复路径解析或运行时识别的bug。手动验证Cloud Build流程
手动将ZIP包上传至Cloud Build,指定app.yaml路径进行构建。若手动构建成功,说明问题出在Terraform的配置传递环节,需检查其他资源参数是否存在冲突。
内容的提问来源于stack exchange,提问作者Ben Franklin

