You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform创建跨区域跨VPC的RDS只读副本时安全组VPC不匹配报错

报错根因

跨区域创建RDS只读副本时,你没有显式指定目标区域的DB子网组,AWS API会默认将副本创建到目标区域的默认VPC中,而你传入的安全组属于自定义VPC,两者VPC不一致导致报错。控制台操作时会引导选择目标VPC的子网组,因此不会触发该错误。

解决步骤

  1. 配置目标区域的Terraform AWS Provider(跨区域资源需要用别名Provider区分),示例如下:
provider "aws" {
  alias  = "replica_region"
  region = "ap-southeast-1" # 替换为你的副本目标区域
}
  1. 在目标VPC(即你所用的peering_sg所属的VPC)下创建目标区域专属的RDS子网组,要求至少包含2个可用区的子网,示例如下:
resource "aws_db_subnet_group" "replica_subnet_group" {
  provider = aws.replica_region
  name     = "rds-replica-subnet-group"
  subnet_ids = [aws_subnet.replica_sub1.id, aws_subnet.replica_sub2.id] # 替换为目标VPC下的子网ID列表
  tags = {
    Name = "RDS Replica Subnet Group"
  }
}
  1. 修改原有的RDS副本资源配置,新增provider指定目标区域、新增db_subnet_group_name绑定刚创建的目标子网组,同时确认replicate_source_db传入源数据库完整ARN,修正后的配置示例:
resource "aws_db_instance" "replica" {
   provider               = aws.replica_region # 指定资源创建在目标区域
   count                  = var.enable_peering_read_replica ? 1 : 0
   name                   = "db-replica"
   identifier             = "db-replica"
   replicate_source_db    = "arn:aws:rds:源区域:源账号ID:db:source-db" # 替换为源数据库的完整ARN
   instance_class         = "db.t3.small"
   apply_immediately      = true
   publicly_accessible    = false
   skip_final_snapshot    = true
   vpc_security_group_ids = [aws_security_group.peering_sg.id]
   db_subnet_group_name   = aws_db_subnet_group.replica_subnet_group.name # 绑定目标区域子网组
}

额外校验项

  • 确认aws_security_group.peering_sg是通过目标区域Provider创建,和上述子网组属于同一个VPC
  • 源RDS实例需要开启自动备份,保留周期至少1天,否则无法创建跨区域只读副本
  • 如果源RDS实例存储加密,需要在副本配置中新增kms_key_id参数,指定目标区域的KMS密钥用于加密副本存储

内容的提问来源于stack exchange,提问作者einonsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:24:02