如何将AWS Elastic Beanstalk连接至Azure SQL?部署后连接失败求助
解决方案建议
确认Elastic Beanstalk出站IP的完整性
你添加了EC2公网EIP和NAT网关IP,但要注意:如果Elastic Beanstalk环境是多AZ部署,可能存在多个NAT网关,每个的公网IP都需要加入Azure SQL防火墙;若EC2实例是动态获取公网IP(未绑定固定EIP),重启后IP会变化,这种情况建议直接添加Elastic Beanstalk环境的出站IP范围(可通过AWS控制台的Elastic Beanstalk环境配置页查看,或用AWS CLI命令aws elasticbeanstalk describe-environment-resources --environment-name <你的环境名>获取),并以CIDR格式(比如x.x.x.x/32)添加到Azure SQL防火墙规则中。验证VPC网络配置细节
- 检查子网的路由表:确保目标为
0.0.0.0/0的路由指向NAT网关,保证应用实例的出站流量通过NAT网关转发; - 检查网络ACL:确认子网的入站规则允许来自Azure SQL(1433端口)的响应流量,出站规则允许访问1433端口;
- 确认VPC安全组:应用实例的安全组需允许出站访问1433端口,无需配置入站规则(除非有反向连接需求)。
- 检查子网的路由表:确保目标为
直接在EC2实例上测试网络连通性
登录到Elastic Beanstalk的EC2实例,执行以下命令测试Azure SQL端口是否可达:nc -zv <你的Azure SQL服务器名>.database.windows.net 1433或
telnet <你的Azure SQL服务器名>.database.windows.net 1433- 如果连接失败,说明网络层面仍有阻塞,回到防火墙、路由表配置排查;
- 如果连接成功,问题出在应用层面,继续下一步。
排查应用连接配置
- 确认连接字符串是否正确:检查服务器名称、用户名、密码,以及是否添加了
Encrypt=True参数(Azure SQL默认强制SSL连接,未开启会导致连接失败); - 检查应用环境变量:Elastic Beanstalk中配置的环境变量是否覆盖了本地连接字符串,确保生产环境用的是正确配置;
- 验证数据库权限:确认应用使用的SQL账号有足够权限访问目标数据库,且账号未被锁定。
- 确认连接字符串是否正确:检查服务器名称、用户名、密码,以及是否添加了
检查Azure SQL防火墙规则的有效性
- 确认规则优先级:Azure SQL防火墙规则按顺序匹配,若存在拒绝类规则(或范围更小的允许规则排在后面),可能导致流量被拦截;
- 检查规则IP范围:确保添加的IP没有写错,比如是否误将私网IP添加到公网防火墙规则中(Azure SQL公网服务仅识别公网IP)。
备选方案:私有网络连接
若公网连接始终不稳定,可考虑配置AWS与Azure的私有网络互联:- VPC对等连接:在AWS VPC和Azure虚拟网络之间建立对等连接,需双方配置路由表和防火墙规则;
- ExpressRoute/Direct Connect:通过专线实现私有网络连接,适用于对稳定性要求高的场景。
内容的提问来源于stack exchange,提问作者cyleeax
相关产品推荐
相关产品推荐

