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

如何通过Terraform实现VPC内EC2与AWS RDS的连接?

实现EC2与RDS的Terraform配置连接

要在VPC内让EC2实例连接到RDS数据库,核心是通过安全组配置打通网络访问,再传递必要的连接信息,以下是具体的Terraform配置方案:

1. 配置RDS安全组允许EC2访问

通过aws_security_group_rule资源,给RDS的安全组添加入站规则,允许EC2所在安全组的流量访问数据库端口(比如MySQL用3306,PostgreSQL用5432):

resource "aws_security_group_rule" "rds_allow_ec2" {
  type                      = "ingress"
  from_port                 = 3306 # 替换为你的数据库端口
  to_port                   = 3306
  protocol                  = "tcp"
  security_group_id         = aws_security_group.rds_sg.id # 你的RDS安全组ID
  source_security_group_id  = aws_security_group.ec2_sg.id # 你的EC2安全组ID
}

2. 给EC2注入RDS连接信息

可以通过EC2的user_data字段,把RDS的端点、用户名等信息写入实例环境变量,方便应用直接调用:

resource "aws_instance" "app_server" {
  # 此处填写EC2的实例类型、AMI、安全组等基础配置
  ami           = "ami-xxxxxx" # 替换为你的EC2 AMI ID
  instance_type = "t2.micro"
  vpc_security_group_ids = [aws_security_group.ec2_sg.id]

  user_data = <<-EOF
              #!/bin/bash
              echo "DB_HOST=${aws_db_instance.mydb.endpoint}" >> /etc/environment
              echo "DB_USER=${aws_db_instance.mydb.username}" >> /etc/environment
              EOF
}

3. 输出RDS连接参数(可选)

通过Terraform输出变量,快速获取RDS的关键连接信息,方便手动测试:

output "rds_endpoint" {
  value = aws_db_instance.mydb.endpoint
}

output "rds_username" {
  value = aws_db_instance.mydb.username
}

验证连接

在EC2实例上登录后,用数据库客户端测试连通性,比如MySQL:

mysql -h <RDS_ENDPOINT> -u <DB_USER> -p

注意事项

  • 确保EC2和RDS处于同一个VPC(或通过VPC peering连通)
  • RDS的publicly_accessible建议设为false,仅通过内网访问更安全
  • 检查EC2所在子网的路由表,确保有VPC内网路由(默认VPC路由表已包含)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:27:23