Terraform修改GCP Cloud SQL Server root密码引发实例重建异常
解决Terraform修改GCP Cloud SQL Server root密码触发实例重建的问题
问题原因
你当前应该是在google_sql_database_instance资源中直接定义了settings.root_password字段来设置root密码。对于GCP Cloud SQL Server实例,这个字段属于实例创建时的一次性属性,Terraform会将其视为实例的核心创建参数,一旦修改该字段,Terraform会判定需要销毁原实例并创建新实例来应用变更——这和GCP控制台/gcloud API的行为不同,后者是直接修改现有用户的密码,而非重建实例。
解决方案
改用google_sql_user资源单独管理root用户的密码,而非在实例资源中定义初始密码。这样修改密码时,Terraform只会更新用户资源,不会触发实例重建。
示例代码
- 创建Cloud SQL Server实例(不指定root密码):
resource "google_sql_database_instance" "sql_server_instance" { name = "my-sql-server-instance" database_version = "SQLSERVER_2019_STANDARD" region = "us-central1" settings { tier = "db-custom-2-8192" # 不要在这里定义root_password } }
- 单独创建root用户并设置密码:
resource "google_sql_user" "sql_root_user" { name = "root" instance = google_sql_database_instance.sql_server_instance.name host = "%" # 允许任意主机访问,可根据实际需求调整 password = var.sql_root_password # 从变量读取密码,方便后续修改 }
操作说明
- 修改密码时,只需更新
var.sql_root_password的值,运行terraform apply即可,Terraform会调用GCP API直接更新现有用户的密码,不会对SQL Server实例进行销毁重建。 - 若你之前已经通过实例资源创建了带root密码的实例,需要先将
settings.root_password从实例资源中移除,运行一次terraform apply(这一步不会重建实例,只是移除Terraform状态中对该字段的跟踪),再添加google_sql_user资源接管密码管理。
内容的提问来源于stack exchange,提问作者Sahil Kandroo
相关产品推荐
相关产品推荐

