Terraform新建App Engine标准应用版本未设置流量问题咨询
问题根因
- 执行
gcloud app deploy时,gcloud CLI默认会在版本部署完成后自动将100%流量切到新版本,因此手动部署时流量分配正常。 - Terraform的
google_app_engine_standard_app_version资源仅负责应用版本的创建与更新逻辑,默认不会为新版本分配任何流量,这是部署后新版本流量占比为0%的直接原因。流量分配属于独立的App Engine管理能力,不会放在版本资源的配置项中,因此你在版本资源文档中找不到相关配置是正常的。
配置方法
需要额外引入google_app_engine_service_traffic_split资源单独定义服务的流量拆分规则,操作如下:
- 在现有main.tf配置文件末尾追加以下流量配置代码:
resource "google_app_engine_service_traffic_split" "default" { service = google_app_engine_standard_app_version.default.service migrate_traffic_strategy = "DEFAULT" split { shard_by = "IP" allocations = { (google_app_engine_standard_app_version.default.version_id) = 1 } } }
- 配置逻辑说明:
- 上述配置会在新版本部署完成后,自动将对应服务100%的流量切到新版本,和
gcloud app deploy的默认行为完全一致。 - 如果需要灰度发布,可在
allocations块中为多个版本分配流量权重,权重总和为1即可,例如给新版本分配0.1、历史稳定版本分配0.9,即可实现10%流量灰度。 shard_by参数支持按IP、Cookie维度做流量哈希,满足灰度场景下的会话保持需求。- 该资源通过引用版本资源的属性自动建立依赖关系,执行部署时会严格按照「先部署版本、再切流量」的顺序执行,无需手动配置依赖项。
注意事项
- 你当前使用的Google Provider版本约束为
<= 3.49,如果执行terraform plan时提示google_app_engine_service_traffic_split资源不存在,请将Provider版本升级到4.x及以上稳定版本即可。 - 配置完成后先执行
terraform plan确认变更符合预期,再执行terraform apply完成部署。 - 若需要保留历史版本用于回滚,可移除版本资源中的
delete_service_on_destroy = true配置,避免销毁资源时误删整个服务。
内容的提问来源于stack exchange,提问作者Duc Nguyen Viet
相关产品推荐
相关产品推荐

