使用Terraform启停Cloud Run服务导致已部署服务被删除问题咨询
这是Cloud Run的预期设计行为,不是产品Bug,目前已有大量用户反馈过相同的现象。
- GCP不同服务的API禁用后资源处理逻辑并不统一:GCE、Cloud SQL、Pub/Sub这类资源本身具备独立持久化属性,禁用对应API只会阻断新的API请求,不会修改或删除已创建的资源;而Cloud Run、Cloud Functions这类托管运行时服务,API禁用操作会被判定为用户不再需要该服务的所有关联资源,会启动内置的资源清理流程,清理后的资源重新启用API也无法恢复。
- 你遇到的删除效果和Terraform的
google_project_service资源默认行为有关:该资源的disable_on_destroy参数默认值为true,当该资源被触发销毁逻辑时(比如配置变更触发资源重建、手动执行terraform destroy操作),Terraform会自动调用接口禁用对应的Cloud Run API,进而触发资源清理。
如果需要避免后续出现同类问题,可以参考以下配置调整:
- 不要通过禁用Cloud Run API的方式停用单个服务,如有停用需求,直接调整对应Cloud Run服务的流量配置为0即可。
- 针对生产环境的
google_project_service资源,添加disable_on_destroy = false参数,阻止Terraform意外触发API禁用,示例配置如下:
resource "google_project_service" "cloudrun" { project = var.project_id service = "run.googleapis.com" disable_on_destroy = false }
- 操作API禁用前,先确认对应服务的禁用规则,避免误删生产资源。
内容的提问来源于stack exchange,提问作者Sarma Pasumarthi
相关产品推荐
相关产品推荐

