Terraform执行apply无变更却销毁重建Aurora集群求助
问题根源与解决方案
你的问题核心是**availability_zones属性的差异触发了强制重建**,从执行计划里能明确看到标记:
~ availability_zones = [ # forces replacement - "ca-central-1d", # (2 unchanged elements hidden) ]
你在配置里指定了["ca-central-1a", "ca-central-1b"],但实际集群的可用区列表里多了ca-central-1d。原因在于:
- 你的
aws_db_subnet_group.db_sub_group大概率包含了三个可用区的子网(ca-central-1a、1b、1d),Aurora集群会自动使用子网组内所有可用区完成部署 availability_zones是Terraform中标记为ForceNew的属性——只要该属性值与实际状态不匹配,就必须销毁重建资源才能修正
其他参数的变化(比如backtrack_window = 0 -> null、deletion_protection = false -> null)只是Terraform默认值与AWS返回实际值的差异,属于可选参数的状态同步,不会触发销毁重建。
解决方法:
方法1:移除配置里的
availability_zones
让AWS根据子网组自动分配可用区,Terraform不会再强制校验可用区列表,避免因AZ数量不一致导致的重建。修改后配置:resource "aws_rds_cluster" "default" { db_subnet_group_name = aws_db_subnet_group.db_sub_group.name cluster_identifier = "aurora-cluster-demo" engine = "aurora-postgresql" engine_version = "13.6" # 移除availability_zones配置项 database_name = "mydb" master_username = "foo" master_password = "testpassword" backup_retention_period = 5 preferred_backup_window = "07:00-09:00" skip_final_snapshot = true }方法2:同步配置与实际状态的可用区
如果必须指定可用区,把实际存在的ca-central-1d加入配置,确保列表完全一致:availability_zones = ["ca-central-1a", "ca-central-1b", "ca-central-1d"]
执行terraform apply后,后续操作就不会再触发销毁重建了。
内容的提问来源于stack exchange,提问作者Djoby
相关产品推荐
相关产品推荐

