如何通过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
相关产品推荐
相关产品推荐

