跨区域PostgreSQL只读副本指定参数组Terraform报错咨询
创建PostgreSQL RDS只读副本时指定自定义参数组触发InvalidParameterCombination错误
我尝试用Terraform在不同区域基于现有RDS实例创建PostgreSQL只读副本作为容灾方案,配置代码如下:
只读副本资源配置
resource "aws_db_instance" "read_replica" { identifier = "my-read-replica" engine = data.aws_db_instance.existing.engine instance_class = "db.t3.medium" publicly_accessible = true db_subnet_group_name = data.aws_db_instance.existing.db_subnet_group availability_zone = data.aws_db_instance.existing.availability_zone db_parameter_group_name = aws_db_parameter_group.custom.name multi_az = false storage_type = "gp2" replicate_source_db = data.aws_db_instance.existing.identifier }
自定义参数组配置
resource "aws_db_parameter_group" "custom" { name = var.custom_parameter_group family = "postgres12" # 对应PostgreSQL版本的参数组家族 description = "Custom parameter group for PostgreSQL RDS instance" parameter { name = "max_connections" value = "200" } parameter { name = "log_statement" value = "all" } }
执行terraform apply时触发错误:
Error: creating RDS DB Instance (read replica) (my-read-replica): InvalidParameterCombination: A parameter group can't be specified during Read Replica creation for the following DB engine: postgres
想确认:是不是跨区域只读副本不能指定db_parameter_group_name参数?
回答
是的,不管是同区域还是跨区域的PostgreSQL RDS只读副本,创建阶段都不允许指定自定义参数组。这是AWS RDS的原生限制,PostgreSQL只读副本会自动继承源实例的参数组配置,创建时无法覆盖指定。
修正后的Terraform配置
移除db_parameter_group_name字段即可正常创建只读副本:
resource "aws_db_instance" "read_replica" { identifier = "my-read-replica" engine = data.aws_db_instance.existing.engine instance_class = "db.t3.medium" publicly_accessible = true db_subnet_group_name = data.aws_db_instance.existing.db_subnet_group availability_zone = data.aws_db_instance.existing.availability_zone multi_az = false storage_type = "gp2" replicate_source_db = data.aws_db_instance.existing.identifier }
如果需要修改只读副本的参数
等只读副本创建完成后,你可以通过Terraform将自定义参数组关联到副本实例,步骤如下:
- 保留原有的
aws_db_parameter_group.custom资源配置 - 更新只读副本的Terraform配置,移除
replicate_source_db字段(创建完成后该字段不再需要),添加参数组关联:
resource "aws_db_instance" "read_replica" { identifier = "my-read-replica" engine = data.aws_db_instance.existing.engine instance_class = "db.t3.medium" publicly_accessible = true db_subnet_group_name = data.aws_db_instance.existing.db_subnet_group availability_zone = data.aws_db_instance.existing.availability_zone multi_az = false storage_type = "gp2" db_parameter_group_name = aws_db_parameter_group.custom.name }
注意:部分PostgreSQL参数修改后需要重启只读副本才能生效,操作前请评估业务影响。
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

