平台與維運 2026 年 9 月 23 日

2026-09-23 — GCP LB 預設值改為 EXTERNAL_MANAGED

primary=https://www.hashicorp.com/blog/terraform-provider-for-google-cloud-8-0-now-generally-available primary=https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/version_8_upgrade

GCP LB 預設值改為 EXTERNAL_MANAGED

來源:HashiCorp 官方部落格與 Terraform Registry「google provider v8 升級指南」

Terraform 的 google provider 8.0 版,把 google_compute_backend_service 與 google_compute_global_forwarding_rule 這兩個資源的 load_balancing_scheme 預設值,從 EXTERNAL 改成 EXTERNAL_MANAGED。HashiCorp 同時公布了完整的 v7.x 升級到 v8.0 官方指南,列出每一項會讓既有設定檔壞掉的變動。

背景

在 v7.x 裡,google_compute_backend_service 與 google_compute_global_forwarding_rule 如果沒有寫 load_balancing_scheme,provider 就會沿用早期 API 的預設值 EXTERNAL,也就是傳統的外部負載平衡器。但 Google Cloud 自己在主控台與 gcloud 早就把新建的外部應用程式負載平衡器導向以 Envoy 為基礎的 EXTERNAL_MANAGED 架構,兩邊預設值長期不一致。

這種落差在 v7.x 拖了好幾個大版號都沒修正,直到 8.0 才把 provider 的預設值追上 Google Cloud 官方建議的架構。同一版也順手清掉一批早就進入 deprecated 狀態的資源,例如 google_beyondcorp_app_connection、google_notebooks_instance 與 google_iap_client,這些都是 API 端已經下架或走到 EOL,provider 卻還留著介面的技術債。

核心改動

8.0 的破壞性變動集中在少數幾個資源,但影響面都不小。

  • load_balancing_scheme:google_compute_backend_service 與 google_compute_global_forwarding_rule 的預設值從 EXTERNAL 改為 EXTERNAL_MANAGED,沒有明寫這個欄位的設定檔,升級後建立出來的資源型態會變。
  • source_contents:google_workflows_workflow 的 source_contents 欄位從 Optional 變成必填,少了這個欄位會直接在 terraform plan 階段就報錯。
  • secret_data_wo_version:google_secret_manager_secret_version 的 secret_data_wo 現在強制要求同時指定 secret_data_wo_version,而且這個欄位型別從 Integer 改成 String,原本只填 secret_data_wo、讓 version 沿用預設值 0 的寫法會失效。

同一版也移除了 google_ml_engine_model、google_vertex_ai_schedule 等一批早已 deprecated 的資源,官方文件建議分別改用對應 API 或 google_colab_schedule。

影響範圍

受影響的是所有用 google provider 管理 GCP 資源的 Terraform 使用者,尤其是長期沒有明寫 load_balancing_scheme 的團隊。升級前建議先鎖定新版 provider,在非正式環境跑一次 terraform plan,比對哪些 backend_service 或 forwarding_rule 會被判定為需要變更。

接著逐一檢查 workflows_workflow 區塊是否補齊 source_contents,以及 secret_manager_secret_version 是否已經改用 secret_data_wo_version。官方文件未列出細節的部分,是資源在 EXTERNAL 與 EXTERNAL_MANAGED 之間切換時,實際流量是否會中斷,這需要各團隊自行在測試環境驗證。

# v7.x:沒寫 load_balancing_scheme,預設是 EXTERNAL
resource "google_compute_backend_service" "default" {
  name        = "my-backend-service"
  protocol    = "HTTP"
  timeout_sec = 10
  health_checks = [google_compute_health_check.default.id]
}

# v8.0:同一段設定,預設值已經變成 EXTERNAL_MANAGED
# 若要維持原本行為,必須明寫:
resource "google_compute_backend_service" "default" {
  name                  = "my-backend-service"
  protocol              = "HTTP"
  timeout_sec           = 10
  load_balancing_scheme = "EXTERNAL"
  health_checks         = [google_compute_health_check.default.id]
}

原始來源:Terraform provider for Google Cloud 8.0 now generally availablegoogle provider v7.x to v8.0 升級指南


End of article
0
Would love your thoughts, please comment.x
()
x