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

Terraform部署RDS关联EKS安全组报InvalidParameterValue错误求助

问题诊断与修复方案

核心问题

你遇到的错误是因为将安全组规则(sgrule-xxx格式)的ID传给了RDS实例的vpc_security_group_ids参数,但该参数要求传入的是安全组(sg-xxx格式)的ID,而非安全组规则ID。

从Terraform计划输出能看到,vpc_security_group_ids被设置为一组sgrule-开头的ID,这不符合AWS RDS的参数要求,导致创建失败。


修复步骤

1. 修正EKS模块的输出值

修改modules/eks/output.tf,输出EKS安全组的ID,而非安全组规则ID:

# modules/eks/output.tf
output "eks-sg" {
  value = aws_security_group.main.id
}

2. 优化RDS安全组配置(可选但推荐)

为了严格实现“仅对EKS集群开放”的需求,建议给RDS单独创建安全组,精准控制访问流量:

步骤2.1 在RDS模块中添加安全组资源

修改modules/rds/security.tf,新增RDS专属安全组:

# modules/rds/security.tf
# 创建RDS子网组(原有代码保留)
resource "aws_db_subnet_group" "rdssubnet" {
  name       = "database-subnet"
  subnet_ids = var.private_subnet_ids
}

# 新增RDS安全组
resource "aws_security_group" "rds_sg" {
  name   = "rds-sg-${var.env}"
  vpc_id = var.vpc_id

  # 仅允许来自EKS安全组的MySQL端口(3306)访问
  ingress {
    from_port       = 3306
    to_port         = 3306
    protocol        = "tcp"
    security_groups = [var.eks-sg]
  }

  # 允许必要的出站流量(按需调整)
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "RDS-Security-Group-${var.env}"
  }
}

步骤2.2 关联RDS实例到新安全组

修改modules/rds/rds.tf,将vpc_security_group_ids指向新创建的RDS安全组:

# modules/rds/rds.tf
resource "aws_db_instance" "rds_instance" {
  allocated_storage      = 50
  identifier             = "rds-vaya"
  storage_type           = "gp2"
  engine                 = "mysql"
  engine_version         = "8.0.23"
  instance_class         = "db.t2.micro"
  db_name                = "vaya"
  username               = "admin"
  password               = aws_secretsmanager_secret_version.password.secret_string
  publicly_accessible    = false
  multi_az               = true
  db_subnet_group_name   = aws_db_subnet_group.rdssubnet.id
  # 修改为RDS专属安全组
  vpc_security_group_ids = [aws_security_group.rds_sg.id]
  tags = {
    Name = "OpsyRDSServerInstance"
  }
}

3. 重新执行Terraform命令

terraform init
terraform plan
terraform apply

说明

  • AWS资源的安全组关联逻辑:vpc_security_group_ids仅接受安全组ID,安全组规则是安全组的内部配置,不能直接作为资源关联的参数。
  • 单独配置RDS安全组能更清晰地管理访问权限,避免与EKS安全组的规则互相影响,符合最小权限原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:35:18