我已經部署了一個在消費定價計劃上運行的 .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 網關路由。
uj5u.com熱心網友回復:
在消費定價計劃上運行
在消費計劃上運行的函式報告的出站 IP 地址不可靠。
根據Azure 檔案:
縮放在消費計劃或高級計劃上運行的函式應用時,可能會分配新的出站 IP 地址范圍。在執行這些計劃中的任何一個時,您都不能依賴報告的出站 IP 地址來創建明確的許可名單。為了能夠包含在動態擴展期間使用的所有潛在出站地址,您需要將整個資料中心添加到您的許可名單中。
相反,請向您的托管服務提供商提供托管您的 Azure 函式的 Azure 區域(/資料中心)的出站 IP 地址,以涵蓋您的 Azure 函式可能分配的所有可能 IP。
所有區域的官方 Azure IP 范圍都在一個 JSON 檔案中,可在此處下載。
首先,下載這個檔案。
其次,搜索AzureCloud.[region name]例如AzureCloud.uknorth或AzureCloud.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 作為未來專案的潛在選擇:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/468441.html
