We use terraform to manage our AWS RDS PostgreSQL cluster. When trying to upgrade the RDS PostgreSQL from 12.11 to 13.6 it's failing due to InvalidParameterCombination error (Please check below for more details). I have tried to remove the existing parameter group from the cluster before initiating the upgradation, but no luck.
Terraform code:
resource "aws_rds_cluster_parameter_group" "enable_replication" {
name = "aurora-pg13-cluster-repl"
family = "aurora-postgresql13"
description = "RDS cluster parameter group replication"
parameter {
name = "rds.logical_replication"
value = "1"
apply_method = "pending-reboot"
}
parameter {
name = "max_worker_processes"
value = "50"
apply_method = "pending-reboot"
}
parameter {
name = "max_replication_slots"
value = "50"
apply_method = "pending-reboot"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_db_parameter_group" "enable_pglogical" {
name = "aurora-pg13-pglogical"
family = "aurora-postgresql13"
parameter {
name = "shared_preload_libraries"
value = "pglogical,pg_stat_statements"
apply_method = "pending-reboot"
}
parameter {
name = "log_connections"
value = "1"
apply_method = "immediate"
}
lifecycle {
create_before_destroy = true
}
}
module "psqldb" {
source = "terraform-aws-modules/rds-aurora/aws"
version = "6.2.0"
name = "psqldb"
engine = "aurora-postgresql"
engine_version = "13.6"
vpc_id = data.terraform_remote_state.aws_core_metadata.outputs.vpc_id
subnets = data.terraform_remote_state.aws_core_metadata.outputs.private_subnets
instance_class = var.rds_cluster_instance_class
instances = {
1 = {}
2 = {}
}
allowed_security_groups = [
data.terraform_remote_state.aws_core_metadata.outputs.eks_worker_security_group_id,
data.terraform_remote_state.aws_core_metadata.outputs.bastion_security_group_id
]
allowed_cidr_blocks = local.rds_cidrs
security_group_egress_rules = {
to_cidrs = {
cidr_blocks = local.rds_cidrs
description = "From allowed_cidr_blocks"
from_port = "5432"
to_port = "5432"
}
}
deletion_protection = true
security_group_description = "Managed by Terraform"
storage_encrypted = true
apply_immediately = true
monitoring_interval = 10
publicly_accessible = false
skip_final_snapshot = local.rds_skip_final_snapshot
allow_major_version_upgrade = true
db_parameter_group_name = aws_db_parameter_group.enable_pglogical.name
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.enable_replication.name
enabled_cloudwatch_logs_exports = ["postgresql"]
iam_database_authentication_enabled = true
tags = local.tags
autoscaling_enabled = true
autoscaling_min_capacity = 2
autoscaling_max_capacity = 3
}
Terraform Apply output:
# aws_db_parameter_group.enable_pglogical must be replaced
+/- resource "aws_db_parameter_group" "enable_pglogical" {
~ arn = "arn:aws:rds:us-east-1:681496624581:pg:aurora-pg12-pglogical" -> (known after apply)
description = "Managed by Terraform"
~ family = "aurora-postgresql12" -> "aurora-postgresql13" # forces replacement
~ id = "aurora-pg12-pglogical" -> (known after apply)
~ name = "aurora-pg12-pglogical" -> "aurora-pg13-pglogical" # forces replacement
+ name_prefix = (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
parameter {
apply_method = "immediate"
name = "log_connections"
value = "1"
}
parameter {
apply_method = "pending-reboot"
name = "shared_preload_libraries"
value = "pglogical,pg_stat_statements"
}
}
# aws_rds_cluster_parameter_group.enable_replication must be replaced
+/- resource "aws_rds_cluster_parameter_group" "enable_replication" {
~ arn = "arn:aws:rds:us-east-1:681496624581:cluster-pg:aurora-pg12-cluster-repl" -> (known after apply)
description = "RDS cluster parameter group replication"
~ family = "aurora-postgresql12" -> "aurora-postgresql13" # forces replacement
~ id = "aurora-pg12-cluster-repl" -> (known after apply)
~ name = "aurora-pg12-cluster-repl" -> "aurora-pg13-cluster-repl" # forces replacement
+ name_prefix = (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
parameter {
apply_method = "pending-reboot"
name = "max_replication_slots"
value = "50"
}
parameter {
apply_method = "pending-reboot"
name = "max_worker_processes"
value = "50"
}
parameter {
apply_method = "pending-reboot"
name = "rds.logical_replication"
value = "1"
}
}
# module.psqldb.aws_rds_cluster.this[0] will be updated in-place
~ resource "aws_rds_cluster" "this" {
allow_major_version_upgrade = true
apply_immediately = true
arn = "arn:aws:rds:us-east-1:681496624581:cluster:psqldb"
availability_zones = [
"us-east-1a",
"us-east-1b",
"us-east-1d",
]
backtrack_window = 0
backup_retention_period = 7
cluster_identifier = "psqldb"
cluster_members = [
"psqldb-1",
"psqldb-2",
]
cluster_resource_id = "cluster-AGN3JQUSROTLPAX6L6NL3FSYKM"
copy_tags_to_snapshot = false
~ db_cluster_parameter_group_name = "aurora-pg12-cluster-repl" -> "aurora-pg13-cluster-repl"
db_subnet_group_name = "psqldb"
deletion_protection = true
enable_global_write_forwarding = false
enable_http_endpoint = false
enabled_cloudwatch_logs_exports = [
"postgresql",
]
endpoint = "psqldb.cluster-cmt6phsh6krf.us-east-1.rds.amazonaws.com"
engine = "aurora-postgresql"
engine_mode = "provisioned"
~ engine_version = "12.11" -> "13.6"
engine_version_actual = "12.11"
final_snapshot_identifier = "final-psqldb-7bf0383d"
hosted_zone_id = "Z2R2ITUGPM61AM"
iam_database_authentication_enabled = true
iam_roles = []
id = "psqldb"
kms_key_id = "arn:aws:kms:us-east-1:681496624581:key/f581b6ba-0295-408c-a3cf-ae1a916f5b9e"
master_password = (sensitive value)
master_username = "root"
port = 5432
preferred_backup_window = "02:00-03:00"
preferred_maintenance_window = "sun:05:00-sun:06:00"
reader_endpoint = "psqldb.cluster-ro-cmt6phsh6krf.us-east-1.rds.amazonaws.com"
skip_final_snapshot = true
storage_encrypted = true
tags = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
tags_all = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
vpc_security_group_ids = [
"sg-054df949da5864e56",
]
timeouts {}
}
# module.psqldb.aws_rds_cluster_instance.this["1"] will be updated in-place
~ resource "aws_rds_cluster_instance" "this" {
apply_immediately = true
arn = "arn:aws:rds:us-east-1:681496624581:db:psqldb-1"
auto_minor_version_upgrade = true
availability_zone = "us-east-1b"
ca_cert_identifier = "rds-ca-2019"
cluster_identifier = "psqldb"
copy_tags_to_snapshot = false
~ db_parameter_group_name = "aurora-pg12-pglogical" -> "aurora-pg13-pglogical"
db_subnet_group_name = "psqldb"
dbi_resource_id = "db-U5CPJMUW6VRXIVHFLHISWWM4VQ"
endpoint = "psqldb-1.cmt6phsh6krf.us-east-1.rds.amazonaws.com"
engine = "aurora-postgresql"
~ engine_version = "12.11" -> "13.6"
engine_version_actual = "12.11"
id = "psqldb-1"
identifier = "psqldb-1"
instance_class = "db.t3.medium"
kms_key_id = "arn:aws:kms:us-east-1:681496624581:key/f581b6ba-0295-408c-a3cf-ae1a916f5b9e"
monitoring_interval = 10
monitoring_role_arn = "arn:aws:iam::681496624581:role/rds-enhanced-monitoring-psqldb"
performance_insights_enabled = false
performance_insights_retention_period = 0
port = 5432
preferred_backup_window = "02:00-03:00"
preferred_maintenance_window = "sun:05:00-sun:06:00"
promotion_tier = 0
publicly_accessible = false
storage_encrypted = true
tags = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
tags_all = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
writer = true
timeouts {}
}
# module.psqldb.aws_rds_cluster_instance.this["2"] will be updated in-place
~ resource "aws_rds_cluster_instance" "this" {
apply_immediately = true
arn = "arn:aws:rds:us-east-1:681496624581:db:psqldb-2"
auto_minor_version_upgrade = true
availability_zone = "us-east-1b"
ca_cert_identifier = "rds-ca-2019"
cluster_identifier = "psqldb"
copy_tags_to_snapshot = false
~ db_parameter_group_name = "aurora-pg12-pglogical" -> "aurora-pg13-pglogical"
db_subnet_group_name = "psqldb"
dbi_resource_id = "db-5X7GWHG67Q6YPPVTGE76LXMV54"
endpoint = "psqldb-2.cmt6phsh6krf.us-east-1.rds.amazonaws.com"
engine = "aurora-postgresql"
~ engine_version = "12.11" -> "13.6"
engine_version_actual = "12.11"
id = "psqldb-2"
identifier = "psqldb-2"
instance_class = "db.t3.medium"
kms_key_id = "arn:aws:kms:us-east-1:681496624581:key/f581b6ba-0295-408c-a3cf-ae1a916f5b9e"
monitoring_interval = 10
monitoring_role_arn = "arn:aws:iam::681496624581:role/rds-enhanced-monitoring-psqldb"
performance_insights_enabled = false
performance_insights_retention_period = 0
port = 5432
preferred_backup_window = "02:00-03:00"
preferred_maintenance_window = "sun:05:00-sun:06:00"
promotion_tier = 0
publicly_accessible = false
storage_encrypted = true
tags = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
tags_all = {
"Account" = "dev"
"ApplicationName" = "psql-base"
"CiscoMailAlias" = "dcloud-devops@cisco.com"
"DataClassification" = "Cisco Confidential"
"DataTaxonomy" = "Cisco Operations Data"
"Environment" = "dev"
"ResourceOwner" = "dCloud"
"Terraform" = "true"
}
writer = false
timeouts {}
}
Plan: 2 to add, 3 to change, 2 to destroy.
Do you want to perform these actions in workspace "dev"?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_rds_cluster_parameter_group.enable_replication: Creating...
aws_db_parameter_group.enable_pglogical: Creating...
aws_rds_cluster_parameter_group.enable_replication: Still creating... [10s elapsed]
aws_db_parameter_group.enable_pglogical: Still creating... [10s elapsed]
aws_rds_cluster_parameter_group.enable_replication: Creation complete after 12s [id=aurora-pg13-cluster-repl]
module.psqldb.aws_rds_cluster.this[0]: Modifying... [id=psqldb]
aws_db_parameter_group.enable_pglogical: Still creating... [20s elapsed]
aws_db_parameter_group.enable_pglogical: Creation complete after 23s [id=aurora-pg13-pglogical]
Error: Failed to modify RDS Cluster (psqldb): InvalidParameterCombination: Cannot upgrade aurora-postgresql from 12.11 to 13.6
status code: 400, request id: c9ee2dd1-e8de-44d9-9757-671ecb969c89
on .terraform/modules/psqldb/main.tf line 47, in resource "aws_rds_cluster" "this":
47: resource "aws_rds_cluster" "this" {