如何使用Terraform连接不同VPC下的Postgres RDS副本与其源实例
错误根因
你当前在执行跨VPC创建RDS只读副本操作,AWS默认会将副本实例创建在源RDS归属的生产VPC下,你为副本关联了开发VPC的安全组,二者所属VPC不匹配,因此触发报错。
修复步骤
- 新增开发VPC对应的RDS子网组资源,RDS实例必须绑定归属VPC下的子网组才能部署到对应VPC:
resource "aws_db_subnet_group" "dev_rds_subnet_group" { name = "dev-rds-subnet-group" subnet_ids = [aws_subnet.dev-subnet-priv.id] # 若需要多AZ部署,可在subnet_ids中添加更多可用区的私有子网ID tags = { Name = "dev-rds-subnet-group" Environment = "dev" } }
- 调整
aws_db_instance资源配置:移除vpc_security_group_ids参数中生产VPC的安全组ID,新增RDS子网组配置,指定副本创建在开发VPC下:
resource "aws_db_instance" "dev-replica" { name = "dev-replica" identifier = "dev-replica" replicate_source_db = "arn:aws:rds:us-west-2:9999999999:db:tf-xxxxxxxx" instance_class = "db.t3.small" apply_immediately = false publicly_accessible = false skip_final_snapshot = true # 仅保留开发VPC内的私有子网安全组 vpc_security_group_ids = [aws_security_group.dev-sg-priv.id] # 绑定开发VPC的RDS子网组,指定副本部署在开发VPC db_subnet_group_name = aws_db_subnet_group.dev_rds_subnet_group.name depends_on = [aws_vpc_peering_connection.dev-peer-conn] }
- 完成前置校验,确保跨VPC复制正常运行:
- 生产VPC需已开启
enable_dns_hostnames和enable_dns_support配置 - 生产VPC中源RDS实例的安全组已放通开发VPC CIDR段(192.168.0.0/16)的5432端口入站规则
- VPC对等连接已正常激活,双方路由表均已配置对端CIDR的路由规则
- 生产VPC需已开启
内容的提问来源于stack exchange,提问作者d8aninja
相关产品推荐
相关产品推荐

