Terraform Google Cloud 8.0 发布:告别“永久 Diff”,代价是破坏性升级
HashiCorp 宣布,Terraform Google Cloud Provider 8.0 现已正式可用。这个大版本更新了两种 Compute Engine 资源的默认负载均衡行为,移除了与已退役 Google Cloud 服务相关的资源,并将若干不考虑顺序的属性由列表改为集合,以避免持续出现计划差异。由于这是一个包含破坏性变更的版本,HashiCorp 建议用户先升级到最新的 7.x 版本,清除弃用警告后再升级至 8.0。
最明显的行为变化涉及 google_compute_backend_service 和 google_compute_global_forwarding_rule。它们的默认 load-balancing_scheme 已由 EXTERNAL 改为 EXTERNAL_MANAGED。这意味着,没有设置该字段的配置将使用新的外部应用负载均衡器,而非经典负载均衡器。依赖经典行为的团队必须显式设置 load_balancing_scheme = "EXTERNAL",否则 Terraform 计划可能会提议修改现有负载均衡器。
此次发布还移除了一些资源和数据源,因为它们所依赖的服务已经关闭或被替代。被移除的资源包括 google_iap_brand 和 google_iap_client(IAP OAuth Admin API 关闭后),三个 google_notebooks_* 资源(用户应迁移至 google_workbench_instance)、google_ml_engine_model,以及 BeyondCorp 的应用连接、连接器和网关资源;这些资源由 Security Gateway 资源替代。google_vertex_ai_schedule 则由 google_colab_schedule 替代。升级前,必须更新所有引用这些资源的配置。
在 Schema 行为方面,不具备顺序语义的属性已由列表改为集合,其中包括 Compute Service Attachments、GKE 日志和监控配置,以及 Cloud Security Compliance Frameworks 中的字段。HashiCorp 表示,这可以避免 API 返回值顺序与配置不同而产生永久性差异。部分 Google Cloud API 的验证规则也变得更加严格。例如,google_workflows_workflow 现在必须提供 source_contents;创建 Workforce Identity Pool Provider SCIM 租户时,也必须提供 claim_mapping。某些状态变化,例如部分整数到字符串的转换,会自动迁移,但其他变化则需要修改配置。
公告还总结了 8.0 建立其上的一些 7.x 时代功能。该 Provider 现在支持 Terraform 列表资源,这些资源可以配合 terraform query 工作流使用。用户能够搜索状态之外的现有基础设施,并选择生成资源配置和导入配置。目前覆盖 Compute Engine、IAM、BigQuery、Pub/Sub、Secret Manager、Migration Center 和 Network Services。Resource Identity 支持也有所扩展,为 Provider 提供了一种清晰表示远程对象的方式,可与传统 ID 一样用于导入。只写属性可以将敏感值发送给 API,而不将其保存下来,目前已覆盖证书私钥、AlloyDB 密码和 IAP 凭证。
该 Provider 由 Google Cloud 工程团队、HashiCorp 和 Terraform 社区共同开发,8.0 版本现已在 Terraform Registry 中提供。官方文章没有提供基准测试或采用数据,也没有列出所有被移除的资源,因此升级指南和 GitHub 变更日志才是权威参考。
一种可行的升级方案如下:
固定 Provider 版本,先升级到最新的 7.x 版本。解决所有弃用警告后,再在非生产环境中升级至 8.0。
在代码中搜索上述已移除资源,以及未设置
load_balancing_scheme的负载均衡器资源。显式设置该字段,避免意外迁移至EXTERNAL_MANAGED。仔细检查
terraform plan,重点关注被标记为销毁或替换的资源。尤其要留意列表到集合的转换,以及类型发生变化或改为必填的只写版本属性。
使用 OpenTofu 的团队可以采用该版本的大部分功能,但并非全部。该 Provider 的破坏性变更包括默认值改为 EXTERNAL_MANAGED、资源移除以及列表到集合的转换。这些变化都发生在 Provider 中,因此无论使用哪种 CLI 都会生效。只写属性需要 OpenTofu 1.11 或更高版本,因为该版本才引入了这项功能。
使用 Terraform 查询和列出资源的发现工作流在 OpenTofu 中尚无对应功能。关于 tofu query 的功能请求(issue #3787)仍处于待处理状态。因此,这些团队仍需使用 import 块和生成的配置来管理现有基础设施。
截至本文撰写时,OpenTofu 是否支持 Resource Identity 尚未得到确认,因此计划使用基于身份导入的团队应先查看 OpenTofu 变更日志。固定版本前,团队还应确认 OpenTofu Registry 中是否已经提供 8.0 Provider 构建版本。
原文链接:
https://www.infoq.com/news/2026/10/terraform-google-cloud-provider/