从 Azure 函数应用程序连接到 SQL DB 时找不到 SqlException 服务器错误

d219

我已经部署了一个在消费定价计划上运行的 .NET Core Azure Function App,它通过 EF Core 连接到我的网站提供商托管的 MS SQL 数据库。

尝试数据库连接时,我看到 App Insights 报告以下错误:

Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP Provider,错误:0 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。) System.ComponentModel.Win32Exception(10060):连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。...错误号:10060,状态:0,类:20

我按照此处的说明获取函数应用程序outboundIpAddresses(使用Azure 资源资源管理器,我还使用 Azure CLI 进行了双重检查)。

我将 IP 列表传递给了我的托管服务提供商的支持团队,但仍然收到相同的错误。

我知道这与代码无关,因为当我在本地运行我的函数应用程序时,我可以正常连接(我的本地 IP 在 SQL Server 允许列表中)。

为什么 Azure 函数连接不上数据库?

这是一个小型家庭项目,所以我买不起虚拟网络 NAT 网关路由。

埃尔米亚·埃斯坎达里

消费定价计划上运行

在消费计划上运行的函数报告的出站 IP 地址不可靠。

根据Azure 文档

缩放在消费计划或高级计划上运行的函数应用时,可能会分配新的出站 IP 地址范围。在使用这些计划中的任何一个时,您都不能依赖报告的出站 IP 地址来创建明确的允许名单。为了能够包含在动态扩展期间使用的所有潜在出站地址,您需要将整个数据中心添加到您的许可名单中。

相反,请为您的托管服务提供商提供托管您的 Azure 函数的 Azure 区域(/数据中心)的出站 IP 地址,以涵盖您的 Azure 函数可能分配的所有可能 IP。

所有区域的官方 Azure IP 范围都在一个 JSON 文件中,可在此处下载。

首先,下载这个文件。

其次,搜索AzureCloud.[region name]例如AzureCloud.uknorthAzureCloud.centralfrance将在您的特定区域中显示 Azure 云的 IP 地址。

{
  "name": "AzureCloud.uknorth",
  "id": "AzureCloud.uknorth",
  "properties": {
    "changeNumber": 11,
    "region": "uknorth",
    "regionId": 29,
    "platform": "Azure",
    "systemService": "",
    "addressPrefixes": [
      "13.87.120.0/22",
      ...
      "2603:1027:1:1c0::/59"
    ],
    "networkFeatures": []
  }
}

最后,向您的托管服务提供商提供片段中列出的所有 IP 地址。

然后,您的 Azure 函数应该能够始终如一地连接到​​您的数据库。


注意 该列表可以并且会随着时间的推移而更新,尽管添加的内容多于更改的内容 - 目前,最后修改日期是 2022 年 4 月 26 日,如下载页面上的详细信息部分所述。

如果出现任何问题,请确保检查页面以获取更新或保证不会出现中断,请升级您的定价计划。


额外的想法...

正如您提到的,这是一个小型项目,我不确定 Azure 的定价是多少,但我会在 AWS 上托管相同的项目。

对于函数本身,AWS Lambda 的免费套餐包括每月 100 万次免费请求(如 Azure)和每月 400,000 GB 秒的计算时间,这应该足够了。

对于连接,您需要一个 VPC(免费)、一个 Internet 网关(免费 + 可忽略的数据传输成本)、一个弹性 IP 地址(免费)和一个托管 NAT 网关(大约每天 1 美元,具体取决于地区)。

哦 - 而且您将获得额外的好处,即只需向您的托管服务提供商提供 1 个弹性 IP 地址,无论您采用何种“定价计划”,该地址都将始终保持不变。

如果有的话,如果超出范围,我也会将 AWS 作为未来项目的潜在选择:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Azure-WebAPI无法连接到Azure DB,错误:系统找不到指定的文件[SqlException]

尝试连接到Azure SQL服务器时,我得到PDOException找不到驱动程序

java.sql.SQLException:找不到合适的驱动程序-报表服务器

将应用程序发布到远程服务器时,无法连接到SQL

从Azure逻辑应用连接到Azure SQL服务器时出错

在Azure SQL DB和Azure Cosmos DB之间创建链接服务器连接

如何将现有的 nodejs 服务器应用程序连接到 Azure SQL 数据库

我的Node.js本地应用程序无法连接到Azure SQL DB

SLIM 错误 :: 当 SLIM 应用程序托管在服务器上时找不到 AuthController

错误:服务器在关闭时返回错误:当前没有应用服务器连接到 Azure 服务“@aspnet/signalr”

将.net应用程序移动到新服务器时出现SQL Server连接错误

java.sql.SQLException:在ie8浏览器oracle 10g R2应用程序服务器中下载blob文件时,关闭了连接

尝试从 Azure 托管的 PHP 应用程序连接到 SQL Server,但出现错误 (ODBC)

Azure CLI 发布 python 应用程序函数错误找不到名称的应用程序

出现此错误:-“java.sql.SQLException:找不到合适的驱动程序”。当我使用 Hibernate Config 进行反向工程时。我的数据库

Scala错误:java.sql.SQLException:找不到适用于jdbc:calcite的驱动程序:

调用连接到 SQL 服务器的函数时出错

错误java.sql.SQLException:找不到列“ id”

将数据层应用程序导入到Azure SQL服务器时出现问题

如何从Azure函数应用程序连接到我的SQL Server?

java.sql.SQLException:找不到适合的驱动程序

从JS中的Azure函数连接到Azure SQL DB

无法使用psycopg连接到Azure postgres。找不到您尝试的服务器名称

SQL服务器错误(提供程序:SQL网络接口,错误:26-指定服务器/实例时出错)

Azure Pipeline使用服务主体连接到SQL DB

java.sql.SQLException:将DataFrame加载到Spark SQL中时找不到合适的驱动程序

断开连接后尝试连接到SignalR服务器时,应用程序崩溃

使用Azure CLI创建Cosmos DB容器时出现错误“找不到资源”

连接到SQL Server时出现“错误定位服务器/指定的实例”