本地可连AWS RDS但部署到EC2后无法连接问题求助
问题:EC2部署的Spring Boot应用无法连接AWS RDS MySQL
我是一名学生,正在使用AWS免费套餐的EC2和RDS进行探索。我的Spring Boot应用application.properties配置如下:
server.port=8080 spring.datasource.url=jdbc:mysql://tiktok.cdo6k4mey5el.us-east-1.rds.amazonaws.com:3306/tiktok spring.datasource.username=admin spring.datasource.password=********** spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.hibernate.ddl-auto=update spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
本地运行该应用时,我可以连接到RDS数据库并执行CRUD操作,但将应用部署到EC2后,却无法连接到RDS上的MySQL。
相关配置信息
- EC2安全组:入站规则允许8080、22端口访问;出站规则全开放
- RDS安全组:入站规则仅允许本地IP访问3306端口;出站规则全开放
排查解决方案
1. 修正RDS安全组入站规则
目前你的RDS只开放了本地IP的3306访问权限,EC2实例不在允许范围内,这是最可能的核心原因。
- 操作:进入AWS控制台的RDS安全组设置,添加一条**MySQL/Aurora(3306)**的入站规则,来源选择你的EC2实例所属的安全组ID(格式如
sg-xxxxxx)。用安全组作为来源比指定单个IP更灵活,后续EC2实例更换IP也无需重新配置。
2. 测试EC2到RDS的网络连通性
登录EC2实例,用以下命令验证网络是否通畅:
# 使用telnet测试连接 telnet tiktok.cdo6k4mey5el.us-east-1.rds.amazonaws.com 3306 # 或用nc命令更直观查看结果 nc -zv tiktok.cdo6k4mey5el.us-east-1.rds.amazonaws.com 3306
- 如果显示连接失败,回到安全组/VPC配置检查;如果能连通,再排查应用层面问题。
3. 确认EC2与RDS的VPC一致性
确保EC2和RDS处于同一个VPC中。如果是不同VPC,必须配置VPC对等连接,否则即使安全组规则正确,网络也无法打通。
4. 检查RDS公有可访问性设置
在RDS实例详情页查看公有可访问性选项:
- 如果设置为
否:仅VPC内资源可访问,需确保EC2和RDS在同一VPC,且RDS所在子网的路由表配置正确; - 如果设置为
是:公网可访问,但仍需安全组放行EC2的访问请求。
5. 查看应用日志定位具体错误
在EC2上查看Spring Boot应用的启动日志,根据错误信息精准排查:
Connection refused:网络层面不通,回到安全组/VPC配置检查;Access denied for user 'admin'@'xxx.xxx.xxx.xxx':确认用户名密码正确,或给RDS的admin用户添加EC2 IP的访问权限;Unknown database 'tiktok':登录RDS确认tiktok数据库已创建。
6. 检查EC2本地防火墙
部分EC2实例可能启用了iptables等本地防火墙,检查是否阻止了3306端口的出站请求:
sudo iptables -L
若存在阻止规则,添加允许出站到3306端口的规则即可。
内容的提问来源于stack exchange,提问作者Leo Tran
相关产品推荐
相关产品推荐

