本文說明 Azure Functions 的各項裝載選項可用的網路功能。 下列網路選項可分類為輸入和輸出網路功能。 輸入功能可讓您限制對應用程式的存取,輸出功能則可讓您將應用程式連線到虛擬網路所保護的資源,並控制輸出流量的路由方式。
裝載模型有不同層級的網路隔離可用。 選擇正確的層級可協助您符合網路隔離需求。
| 功能 | 彈性使用量方案 | 使用量方案 | 進階方案 | 專用方案/ASE | 容器應用程式1 (部分機器翻譯) |
|---|---|---|---|---|---|
| 輸入 IP 限制 | ✔ | ✔ | ✔ | ✔ | ✔ |
| 輸入私人端點 | ✔ | ✔ | ✔ | ||
| 虛擬網路整合 | ✔ | ✔2 | ✔3 | ✔ | |
| 輸出 IP 限制 | ✔ | ✔ | ✔ | ✔ |
- 如需詳細資訊,請參閱 Azure 容器應用程式環境中的網路功能。
- 使用虛擬網路觸發程序時有特殊考量。
- 只有專用/ASE 方案支援需要閘道的虛擬網路整合。
快速入門資源
使用下列資源快速以開始使用 Azure Functions 網路案例。 本文中會參考這些資源。
- ARM 範本、Bicep 檔案和 Terraform 範本:
- 僅限 ARM 範本:
- 教學課程:
輸入網路功能
下列功能可讓您篩選對函式應用程式的輸入要求。
輸入存取限制
您可使用存取限制,針對允許或拒絕存取應用程式的 IP 位址,定義依優先順序排列的清單。 此清單可以包含 IPv4 和 IPv6 位址,或使用服務端點的特定虛擬網路子網路。 有一個或多個項目時,清單結尾會有隱含的「全部拒絕」語句。 IP 限制適用所有函式裝載選項。
存取限制可在 Flex 使用量方案、彈性進階、使用量和 App Service 中使用。
附註
使用網路限制時,您只能從虛擬網路內部署,或當您將您用來存取 Azure 入口網站的 IP 位址放在 [安全收件者 ] 清單上時。 不過您仍可使用入口網站來管理函式。
若要深入了解,請參閱 Azure App Service 靜態存取限制。
私人端點
Azure 私人端點 (部分機器翻譯) 是一種網路介面,可讓您以私人且安全的方式連線至由 Azure Private Link 提供的服務。 私人端點會使用您虛擬網路中的私人 IP 位址,有效地將服務帶入到您的虛擬網路。
您可以將私人端點用於託管到彈性使用量 (部分機器翻譯)、彈性進階 (部分機器翻譯) 和專用 (App Service) (部分機器翻譯) 方案的函式。
如果您想要對私人端點進行呼叫,必須確定您的 DNS 查閱會解析為私人端點。 您可以透過下列其中一種方法強制執行此行為:
- 與 Azure DNS 私人區域整合。 當您的虛擬網路沒有自訂 DNS 伺服器時,這會自動完成。
- 管理應用程式所使用 DNS 伺服器中的私人端點。 若要管理私人端點,您必須知道端點位址,並使用 A 記錄來參考您嘗試連線到的端點。
- 將您自己的 DNS 伺服器設定為轉送至 Azure DNS 私人區域。
若要深入了解,請參閱將私人端點用於 Web 應用程式。
若要呼叫具有私人端點連線的其他服務,例如儲存體或服務匯流排,請務必將您的應用程式設定為對私人端點發出輸出呼叫。 如需使用私人端點搭配您的函式應用程式的儲存體帳戶的詳細資料,請瀏覽將您的儲存體帳戶限制在虛擬網路。
服務端點
使用服務端點,您可以將許多 Azure 服務限制於選取的虛擬網路子網路,以提供較高層級的安全性。 區域虛擬網路整合可讓您的函式應用程式連線至透過服務端點保護的 Azure 服務。 支援虛擬網路整合的所有方案都支援此設定。 請遵循下列步驟來存取受保護的服務端點:
- 設定區域虛擬網路與函式應用程式的整合,以連線到特定子網路。
- 前往目的地服務,並針對整合子網路設定服務端點。
若要深入了解,請參閱虛擬網路服務端點。
使用服務端點
若要限制特定子網路的存取權,請建立具有虛擬網路類型的限制規則。 接著可以選取您想允許或拒絕存取的訂用帳戶、虛擬網路和子網路。
如果尚未針對您所選取的子網路以 Microsoft.Web 來啟用服務終端點,則它們會自動啟用 (除非您選取了 [忽略缺少的 Microsoft.Web 服務端點] 核取方塊)。 若想在應用程式上啟用服務端點,但不在子網路上啟用,主要取決於您是否有在子網路上啟用端點的權限。
如需讓其他人在子網路上啟用服務端點,請勾選 [忽略缺少的 Microsoft.Web 服務端點] 核取方塊。 系統便會針對服務端點為您的應用程式進行設定,您稍後可在子網路上啟用這些端點。
您無法使用服務端點來限制存取在 App Service 環境中執行的應用程式。 若應用程式位於 App Service 環境,您可套用 IP 存取規則來控制存取權。
若要了解如何設定服務端點,請參閱建立 Azure Functions 私人站台存取。
輸出網路功能
您可以使用本節中的功能來管理應用程式所建立的輸出連線。
虛擬網路整合
本節詳述 Functions 所支援的功能,這些功能可用來控制應用程式所輸出的資料。
虛擬網路整合可讓函式應用程式存取虛擬網路中的資源。 經過整合後,應用程式會透過虛擬網路路由傳送輸出流量。 這可讓應用程式存取某些私人端點或資源,這些私人端點或資源的規則只允許來自所選子網路的流量。 當目的地是虛擬網路外部的 IP 位址時,除非您已設定 NAT 閘道,否則系統仍會從應用程式屬性中所列出的其中一個位址傳送來源 IP。
Azure Functions 支援兩種虛擬網路整合:
- 區域性虛擬網路整合,適用於在彈性使用量 (部分機器翻譯)、彈性進階 (部分機器翻譯)、專用 (App Service) (部分機器翻譯) 和容器應用程式 (部分機器翻譯) 主控方案上執行的應用程式 (建議)
- 需要閘道的虛擬網路整合 (部分機器翻譯),適用於在專用 (App Service) (部分機器翻譯) 主控方案上執行的應用程式
若要了解如何設定虛擬網路整合,請參閱啟用虛擬網路整合。
區域性虛擬網路整合
使用區域虛擬網路整合可讓您的應用程式存取:
- 位於與您的應用程式相同的虛擬網路中的資源。
- 與您應用程式所整合虛擬網路對等互連的虛擬網路中的資源。
- 服務端點保護的服務。
- 跨 Azure ExpressRoute 連線的資源。
- 跨對等互連連線的資源,包括 Azure ExpressRoute 連線。
- 私人端點
當您使用區域虛擬網路整合時,可以使用下列 Azure 網路功能:
- 網路安全性群組 (NSG):您可以使用放置在整合子網路上的 NSG 來封鎖輸出流量。 因為您無法使用虛擬網路整合來提供應用程式的輸入存取權,所以不適用輸入規則。
- 路由表 (UDR):您可以在整合子網路上放置路由表,以將輸出流量傳送至您想要的位置。
附註
將所有輸出流量路由至您的虛擬網路時,必須遵守套用至整合子網路的 NSG 和 UDR。 整合虛擬網路後,除非您提供將流量導向至其他位置的路由,否則傳至公用 IP 位址的函式應用程式輸出流量,仍會從應用程式屬性中所列的位址傳送。
區域虛擬網路整合無法使用連接埠 25。
彈性使用量 (部分機器翻譯) 方案的考量:
- 應用程式和虛擬網路必須位於相同的區域。
- 請遵循
Microsoft.App,確定訂用帳戶已啟用 Azure 資源提供者。 需要有此項目才能進行子網路委派。 - 若在彈性使用量方案中執行,所需的子網路委派為
Microsoft.App/environments。 這與彈性進階和專用 (App Service) 方案不同,這兩個方案有不同的委派需求。 - 您可以規劃將 40 個 IP 位址最多用於一個函數應用程式,即使應用程式調整超過 40 個也一樣。 例如,如果您有 15 個整合到相同子網路的彈性使用量函式應用程式,則必須規劃最多會使用 15x40 = 600 個 IP 位址。 此限制可能會變更,而且不會強制執行。
- 子網路無法用於其他用途 (例如私人或服務端點,或委派給任何其他主控方案或服務)。 雖然您可以與多個彈性使用量應用程式共用相同的子網路,但這些函式應用程式會共用網路資源,這可能會導致某個應用程式影響相同子網路上其他應用程式的效能。
- 您無法在 Container Apps 環境與 Flex 取用應用程式之間共用相同的子網。
- 彈性取用方案目前不支援名稱包含底線 (
_) 字元的子網路。
彈性進階 (部分機器翻譯)、專用 (App Service) (部分機器翻譯) 和容器應用程式 (部分機器翻譯) 方案的考量:
- 此功能適用於彈性進階和 App Service 進階 V2 與進階 V3。 同時適用於標準方案,但只能從較新的 App Service 部署取得。 如果您使用較舊的部署,則只能使用進階 V2 App Service 方案的功能。 如果您想要確保自己可使用標準 App Service 方案的功能,請使用進階 V3 App Service 方案來建立應用程式。 只有最新的部署支援這些方案。 之後您可以視需要縮小規模。
- App Service 環境中的隔離式方案應用程式無法使用此功能。
- 應用程式和虛擬網路必須位於相同的區域。
- 此功能需要 Azure Resource Manager 虛擬網路中 /28 或更大的未使用子網路。
- 整合子網路只能供一個 App Service 方案使用。
- 一個 App Service 方案最多可以有兩個區域虛擬網路整合。 相同 App Service 方案中的多個應用程式可以使用相同的整合子網路。
- 子網路不能已經用於其他用途 (例如私人或服務端點,或委派 (部分機器翻譯) 給彈性使用量方案或任何其他服務)。 雖然您可以在相同的 App Service 方案中與多個應用程式共用相同的子網,但網路資源會跨這些函式應用程式共用,這可能會導致一個應用程式影響其他應用程式在同一個子網上的效能。
- 您無法刪除具有整合式應用程式的虛擬網路。 請先移除整合,再刪除虛擬網路。
- 如果有應用程式正在使用區域虛擬網路整合,則您無法變更應用程式或方案的訂用帳戶。
啟用虛擬網路整合
在 Azure 入口網站上您的函式應用程式中,選取 [網路],然後在 [ VNet 整合] 底下選取 [按一下這裡以設定]。
選取 [新增 VNet]。
下拉式清單包含您訂用帳戶中相同區域內的所有 Azure Resource Manager 虛擬網路。 選取您想要與其整合的虛擬網路。
彈性使用量和彈性進階主控方案僅支援區域性虛擬網路整合。 如果虛擬網路位於相同的區域,請建立新的子網,或選取空的預先存在的子網。
若要選取另一個區域中的虛擬網路,您必須佈建虛擬網路閘道,並啟用點對站功能。 僅專用方案才支援跨區域的虛擬網路整合,但全域對等互連可搭配區域虛擬網路整合使用。
整合期間,會重新啟動您的應用程式。 當整合完成時,您將會看到與其整合的虛擬網路詳細資訊。 根據預設,會啟用 [全部路由],並將所有流量路由傳送至您的虛擬網路。
如果您只想要路由傳送私人流量 (RFC1918 (英文) 流量),請遵循此 App Service 文章 (部分機器翻譯) 中的步驟。
子網路
虛擬網路整合取決於專用子網路。 當您佈建子網路時,Azure 會保留前五個 IP 位址供內部使用。 剩餘 IP 位址的使用方式取決於您的託管計劃。 由於指派之後就無法變更子網路大小,因此請使用足以容納應用程式可能連線的任何子網路規模。
彈性進階和專用方案
在彈性進階與專用 (App Service) 方案中,函數應用程式的每個執行中執行個體都會從子網路取用一個 IP 位址。 當您進行規模擴展或縮減時,所需的位址空間可能會暫時加倍以容納過渡。 如果多個應用程式共用相同的子網路,則 IP 地址使用總量是這些應用程式中所有執行個體的總和,加上擴展事件期間的暫時加倍。
IP 使用情境
| Scenario | IP 位址消費 |
|---|---|
| 1 個應用程式、1 個執行個體 | 1 個 IP 位址 |
| 1 個應用程式、5 個執行個體 | 5 個 IP 位址 |
| 1 個應用程式,從 5 個實例擴展至 10 個實例 | 最多 20 個 IP 位址 (暫時,在擴展作業期間) |
| 3 個應用程式,每個應用程式 5 個實例 | 15 個 IP 位址 |
CIDR 範圍建議
| CIDR 區塊大小 | 可用位址上限 | 最大水平擴展(實例)1 |
|---|---|---|
| /28 | 11 | 5 |
| /27 | 二十七 | 13 |
| /26 | 59 | 二十九 |
| /25 | 123 | 612 |
| /24 | 251 | 1253 |
1假設您需在某個時間點擴大或縮小規模或 SKU。
2 雖然 IP 地址數目支援 61 個執行個體,但專用方案中的個別應用程式 最多有 30 個執行個體。
2 雖然 IP 地址數目支援 125 個執行個體,但彈性進階方案上的個別應用程式 最多有 100 個執行個體。
其他考量事項
針對在彈性進階或專用方案上的函數應用程式:
- 為了避免 Functions 彈性進階方案的子網路容量發生任何問題,您應針對 Windows 使用提供 256 個位址的 /24,以及針對 Linux 使用提供 64 個位址的 /26。 在 Azure 入口網站上建立子網作為與虛擬網路整合的一部分時,子網大小的最低要求為 Windows 是 /24 和 Linux 是 /26。
- 每個 App Service 方案最多可以支援兩個可用於 VNet 整合的子網路。 來自單一 App Service 方案的多個應用程式可以加入相同的子網路,但來自不同方案的應用程式無法使用該相同的子網路。
彈性使用量方案 (部分機器翻譯)
在彈性使用量方案中,來自函數應用程式執行個體的輸出網路流量會透過子網路專用的共用閘道路由傳送。 每個共用閘道會從子網路取用 1 個 IP 位址。 無論與單一子網路整合多少個應用程式,最多都會使用 27 個共用閘道 (27 個 IP 位址) 來支援所有執行個體。 選取子網路大小時,重要的是與子網路整合之所有應用程式的執行個體總數。 當子網路由過多執行個體使用或由執行 I/O 密集型工作負載的應用程式使用時,可能會發生網路容量問題,例如平均延遲與逾時增加。 應用程式的橫向擴展不會受到影響。
建議使用 /27 子網路大小 (27 個可用的 IP 位址) 來支援單一函式應用程式,最多可向外延展至 1,000 個執行個體。
如果您預期單一功能應用程式會擴展超過 1,000 個執行個體,或預期多個功能應用程式的執行個體總數超過 1,000 個執行個體,請使用 /26 子網路,並聯絡產品群組,以要求增加執行個體數量上限。
重要事項
整合子網路大小小於 /27 的彈性取用函式應用程式,或將多個應用程式與 /27 大小的子網路整合,會減少其可用的輸出網路容量。 如果您打算這樣做,請使用生產規模的工作負載對應用程式進行負載測試,以確保不會觀察到網路容量限制。
IP 使用情境
| Scenario | IP 位址使用量上限 |
|---|---|
| 1 個應用程式 | 最多 27 個 IP 位址 (/27 子網路大小) |
| 2 個應用程式 | 最多 27 個 IP 位址 (/27 子網路大小) |
| 10 個應用程式 | 最多 27 個 IP 位址 (/27 子網路大小) |
網路安全性群組
您可以使用網路安全性群組 (部分機器翻譯) 來控制虛擬網路中的資源之間的流量。 例如,您可以建立安全性規則,阻止應用程式的輸出流量到達虛擬網路中的某個資源,或阻止其離開網路。 這些安全性規則會套用至已設定虛擬網路整合的應用程式。 若要阻止流量到達公用位址,您必須啟用虛擬網路整合和 [全部路由]。 NSG 中的輸入規則不適用於您的應用程式,因為虛擬網路整合只會影響來自應用程式的輸出流量。
若要控制應用程式的輸入流量,請使用「存取限制」功能。 無論套用至整合子網路的路由為何,套用至整合子網路的 NSG 都會生效。 如果函式應用程式已與虛擬網路整合且啟用了全部路由 (部分機器翻譯),而且您沒有任何會影響整合子網路上之公用位址流量的路由,則所有輸出流量都仍須遵守指派給整合子網路的 NSG。 若未啟用 [全部路由],則 NSG 只會套用至 RFC1918 流量。
路由
您可以使用路由表,將來自您應用程式的輸出流量路由傳送到您想要的任何位置。 根據預設,路由表只會影響 RFC1918 目的地流量。 全部路由 (部分機器翻譯) 啟用時,您的所有輸出呼叫都會受到影響。 「全部路由」停用時,只有私人流量 (RFC1918) 會受到路由表的影響。 在整合子網路上設定的路由不會影響對輸入應用程式要求的回覆。 常見的目的地可能包括防火牆裝置或閘道。
如果您想要將所有輸出流量路由傳送至內部部署,您可以使用路由表將所有輸出流量傳送至 ExpressRoute 閘道。 如果您將流量路由至閘道,請務必在外部網路中設定路由以傳回任何回覆。
邊界閘道協定 (BGP) 路由也會影響應用程式流量。 如果您有來自 ExpressRoute 閘道之類項目的 BGP 路由,則應用程式的輸出流量會受到影響。 根據預設,BGP 路由只會影響 RFC1918 目的地流量。 當您的函式應用程式整合到已啟用路由全部的虛擬網路時,所有的輸出流量均會受到您的 BGP 路由影響。
輸出 IP 限制
輸出 IP 限制適用於 Flex 使用量方案、彈性進階方案、App Service 方案或 App Service 環境。 您可以為部署 App Service 環境的虛擬網路設定輸出限制。
當您將彈性進階方案或 App Service 方案中的函數應用程式與虛擬網路整合時,應用程式預設仍可對網際網路進行輸出呼叫。 藉由將函式應用程式與已啟用 [完整路由] 的虛擬網路整合,您可以將所有輸出流量強制傳送至虛擬網路,如此一來就可以使用網路安全性群組規則來限制流量。 若為彈性使用量,則所有流量都已透過虛擬網路進行路由傳送,並不需要全部路由。
若要了解如何使用虛擬網路控制輸出 IP,請參閱教學課程:使用 Azure 虛擬網路 NAT 閘道控制 Azure Functions 輸出 IP。
Azure DNS 私人區域
您的應用程式與虛擬網路整合之後,它會使用與虛擬網路設定使用的相同 DNS 伺服器,並將可與連結至虛擬網路的 Azure DNS 私人區域搭配使用。
Automation
下列 API 可讓您以程式設計方式管理區域虛擬網路整合項目:
-
Azure CLI:使用
az functionapp vnet-integration命令來新增、列出或移除區域虛擬網路整合項目。 - ARM 範本:可以使用 Azure Resource Manager 範本來啟用區域虛擬網路整合。 如需完整範例,請參閱這個 Functions 快速入門範本。
混合式連線
混合式連線是 Azure 轉送的功能,您可用來存取其他網路中的應用程式資源。 它可讓您從應用程式存取應用程式端點。 您可將其用於存取應用程式。 混合式連線適用於所有在 Windows 上執行的函式 (但取用方案除外)。
如同在 Azure Functions 中使用,每個混合式連線都會與單一 TCP 主機和連接埠組合相互關聯。 這意謂著混合式連線的端點可位於任何作業系統和任何應用程式上,只要您正在存取 TCP 接聽連接埠即可。 混合式連線不知道 (或不在意) 應用程式通訊協定為何,或您要存取什麼資源。 其只會提供網路存取。
若要深入了解,請參閱混合式連線的 App Service 文件。 這些相同的設定步驟支援 Azure Functions。
重要事項
只有在函式應用程式在 Windows 上執行時,才支援混合式連線。 不支援 Linux 應用程式。
透過虛擬網路連線到 Azure 服務
虛擬網路整合可讓函式應用程式存取虛擬網路中的資源。 本節會概述您在嘗試將應用程式連線到特定服務時應考量的事項。
將儲存體帳戶限定於虛擬網路
附註
若要在記憶體帳戶上快速部署已啟用私人端點的函式應用程式,請參閱下列範本: 使用 Azure 記憶體私人端點的函式應用程式。
建立函式應用程式時,您必須建立或連結至支援 Blob、佇列及資料表儲存體的一般用途 Azure 儲存體帳戶。 您可以將此儲存體帳戶取代為受到服務端點或私人端點保護的儲存體帳戶。
您可以在彈性使用量、彈性進階和專用 (App Service) 方案上,搭配使用網路受限的儲存體帳戶與函式應用程式;使用量方案則不受支援。 若為彈性進階和專用方案,您必須確定您已設定私人的內容共用路由 (部分機器翻譯)。 若要了解如何使用以虛擬網路保護的儲存體帳戶來設定函式應用程式,請參閱將儲存體帳戶限定於虛擬網路 (部分機器翻譯)。
使用 Key Vault 參考
您可使用 Azure Key Vault 參考在 Azure Functions 應用程式中使用來自 Azure Key Vault 的祕密,而不需進行任何程式碼變更。 Azure Key Vault 是提供集中式祕密管理的服務,可完整控制存取原則和稽核歷程記錄。
如果為應用程式設定虛擬網路整合,金鑰保存庫參考可用來從受網路限制的保存庫擷取機密資訊。
虛擬網路觸發程序 (非 HTTP)
您的工作負載可能需要從虛擬網路所保護的事件來源觸發您的應用程式。 如果您想要讓應用程式根據接收自非 HTTP 觸發程序來源的事件數目進行動態縮放,則有兩個選項:
在專用 (App Service) (部分機器翻譯) 方案上執行的函式應用程式不會根據事件進行動態縮放。 相反地,會由您定義的自動縮放 (部分機器翻譯) 規則決定是否擴增。
具有虛擬網路觸發程序的彈性進階方案
彈性進階方案 (部分機器翻譯) 可讓您建立由虛擬網路保護的服務所觸發的函式。 這些非 HTTP 觸發程序稱為虛擬網路觸發程序。
根據預設,虛擬網路觸發程序不會導致函式應用程式縮放超出其預熱執行個體計數。 不過,某些延伸模組支援會導致您的函式應用程式動態調整的虛擬網路觸發程序。 您可以透過下列其中一種方式在您的函式應用程式中為支援的延伸模組啟用此動態調整監視:
在 Azure 入口網站中,瀏覽至您的函式應用程式。
在 [設定] 下,選取 [組態],然後在 [函式執行階段設定] 索引標籤中將 [執行階段調整監視] 設為 [開啟]。
選取 [儲存] 以更新函式應用程式組態,然後重新啟動應用程式。
秘訣
啟用虛擬網路觸發程式的監視可能會影響應用程式的效能,不過影響可能很小。
在 Functions 執行階段 1.x 版中,不支援對虛擬網路觸發程序的動態調整監視。
下表中的延伸模組支援虛擬網路觸發程序的動態調整監視。 為了獲得最佳的調整效能,您應該升級為也支援目標型調整的版本。
| 延伸模組 (最低版本) | 僅限執行階段調整監視 | 透過目標型調整 |
|---|---|---|
| Microsoft.Azure.WebJobs.Extensions.CosmosDB | > 3.0.5 | > 4.1.0 |
| Microsoft.Azure.WebJobs.Extensions.DurableTask | > 2.0.0 | 不適用 |
| Microsoft.Azure.WebJobs.Extensions.EventHubs | > 4.1.0 | > 5.2.0 |
| Microsoft.Azure.WebJobs.Extensions.ServiceBus | > 3.2.0 | > 5.9.0 |
| Microsoft.Azure.WebJobs.Extensions.Storage | > 3.0.10 | > 5.1.0* |
* 僅限佇列儲存體。
重要事項
當您啟用虛擬網路觸發程序監視時,只有這些延伸模組的觸發程序可能會導致您的應用程式動態調整。 您仍然可以使用不在此表中的延伸模組中的觸發程序,但其不會導致縮放超出其預熱執行個體計數。 如需所有觸發程序和繫結延伸模組的完整清單,請參閱觸發程序和繫結。
具有虛擬網路觸發程序的 App Service 方案和 App Service 環境
當函式應用程式在 App Service 方案或 App Service 環境中執行時,您可以撰寫由虛擬網路保護的資源所觸發的函式。 為了讓函式能正確地觸發,應用程式必須連線到可存取觸發程序連線中所定義資源的虛擬網路。
例如,假設您想要將 Azure Cosmos DB 設定為只接受來自虛擬網路的流量。 在此情況下,您必須在提供與該虛擬網路整合的 App Service 方案中部署函式應用程式。 整合可讓該 Azure Cosmos DB 資源觸發函式。
測試考量
使用私人端點在函式應用程式中測試函式時,您必須在相同的虛擬網路內執行測試,例如在該網路中的虛擬機器 (VM) 上。 若要在入口網站上從該 VM 中使用的 [程式碼 + 測試] 選項,您必須將下列 CORS 來源新增至您的函式應用程式:
https://functions-next.azure.comhttps://functions-staging.azure.comhttps://functions.azure.comhttps://portal.azure.com
當您使用私人端點或任何其他存取限制來限制對函式應用程式的存取時,您也必須將服務標籤 AzureCloud 新增至允許的清單。 若要更新允許清單:
瀏覽至您的函數應用程式,然後選取 [設定]>[網路],然後選取 [輸入存取組態]>[公用網络存取]。
請確定 [公用網络存取] 已設定為 [已從選取的虛擬網路和 IP 位址啟用]。
在 [網站存取和規則] 底下 [新增規則]:
選取
Service Tag做為來源設定 [類型],以及選取AzureCloud做為 [服務標籤]。請確定動作為 [允許],並設定您所需的名稱和優先順序。
疑難排解
這項功能很容易設定,但不表示您在使用過程中不會遇到問題。 如果您在存取所需端點時遇到問題,可利用一些公用程式從應用程式主控台測試連線能力。 有兩個您可以使用的主控台。 一個是 Kudu 主控台,另一個則是 Azure 入口網站中的主控台。 若要從您的應用程式前往 Kudu 主控台,請按 [工具] > [Kudu]。 您也可以輸入 [站台名稱].scm.azurewebsites.net 前往 Kudo 主控台。 網站載入之後,請移至 [偵錯主控台] 索引標籤。若要從您的應用程式前往已裝載 Azure 入口網站的主控台,請移至 [工具] > [主控台]。
工具
在原生 Windows 應用程式中,由於安全性限制,無法透過主控台使用 ping、nslookup 和 tracert 工具 (它們在自訂 Windows 容器中運作)。 為了彌補這個空隙,已加入兩個不同的工具。 為了測試 DNS 功能,我們新增了名為 nameresolver.exe 的工具。 語法為:
nameresolver.exe hostname [optional: DNS Server]
您可以使用 nameresolver 來檢查應用程式依賴的主機名稱。 如此一來您可以測試是否有任何項目未正確設定而無法與 DNS 搭配,或可能沒有 DNS 伺服器的存取權。 您可以檢查環境變數 WEBSITE_DNS_SERVER 和 WEBSITE_DNS_ALT_SERVER,以查看應用程式在主控台中使用的 DNS 伺服器。
附註
nameresolver.exe 工具目前無法在自訂 Windows 容器中運作。
您可以使用下一個工具來測試主機與連接埠組合的 TCP 連線。 此工具稱為 tcpping,語法如下:
tcpping.exe hostname [optional: port]
tcpping 公用程式會讓您知道是否可以連接特定主機和連接埠。 只有在下列情況才會顯示成功:有一個應用程式正在接聽主機與連接埠組合,且您的應用程式可透過網路存取指定的主機和連接埠。
對虛擬網路裝載資源的存取進行偵錯
有幾種情況可能會導致應用程式無法連線至特定的主機和連接埠。 大部分的情況下,會是下列三個情況的其中一種:
- 路線中有防火牆。 如果路線中有防火牆,則會達到 TCP 逾時。 此案例中 TCP 逾時值就是 21 秒。 使用 tcpping 工具來測試連線能力。 TCP 逾時可能是許多項目越過防火牆並啟動所造成。
- DNS 無法存取。 DNS 逾時值為 3 秒 (每部 DNS 伺服器)。 如果您有兩部 DNS 伺服器,逾時為 6 秒。 使用 nameresolver 來檢查 DNS 是否運作。 您不能使用 nslookup,因為它不會使用您的虛擬網路所設定的 DNS。 如果無法存取,則防火牆或 NSG 可能會封鎖 DNS 的存取,或可能會中斷連線。
如果這些項目無法解決您的問題,請先確認幾件事,例如:
區域性虛擬網路整合
- 您的目的地是否為非 RFC1918 位址,且您並未啟用 [完整路由]?
- 是否有 NSG 封鎖來自整合子網路的輸出?
- 如果您要通過 Azure ExpressRoute 或 VPN,您的內部部署閘道是否已設為將流量路由回 Azure? 如果您可以連線至虛擬網路中的端點,但無法連線至內部部署,則請檢查您的路由。
- 您是否有足夠的權限可設定整合子網路上的委派? 在區域虛擬網路整合設定期間,您的整合子網路會委派給 Microsoft.Web/serverFarms。 VNet 整合 UI 會自動將子網路委派給 Microsoft.Web/serverFarms。 如果您的帳戶沒有足夠的網路權限可設定委派,則您需要可以在整合子網路上設定屬性的人員來委派子網路。 若要手動委派整合子網路,請前往 Azure 虛擬網路子網路 UI,並設定 Microsoft.Web/serverFarms 的委派。
需要閘道的虛擬網路整合
- 是 RFC 1918 範圍 (10.0.0.0-10.255.255.255 / 172.16.0.0-172.31.255.255 / 192.168.0.0-192.168.255.255) 中的點對站位址範圍嗎?
- 閘道是否顯示為正在入口網站中啟動? 如果您的閘道已關閉,請重新啟動。
- 憑證是否顯示為同步,或您懷疑網路設定已變更? 如果您的憑證停止同步,或您懷疑虛擬網路設定的變更未與 ASP 同步,則請選取 [同步網路]。
- 如果您要通過 VPN,內部部署閘道是否已設為將流量路由回 Azure? 如果您可以連線至虛擬網路中的端點,但無法連線至內部部署,則請檢查您的路由。
- 您是否正嘗試使用同時支援點對站和 ExpressRoute 的共存閘道? 虛擬網路整合不支援共存閘道。
對網路問題進行偵錯是一項挑戰,因為您看不到是什麼封鎖了特定主機與連接埠組合的存取。 可能的原因包括:
- 您已在主機上啟動防火牆,阻止從點對站 IP 範圍存取應用程式連接埠。 跨越子網路通常需要公用存取權。
- 目標主機已關閉。
- 應用程式已關閉。
- IP 或主機名稱錯誤。
- 應用程式不是接聽您預期的連接埠。 您可以在端點主機上使用 "netstat -aon",將處理序識別碼與接聽連接埠進行比對。
- 您將網路安全性群組設定為阻止從點對站 IP 範圍存取應用程式主機和連接埠。
您不知道應用程式實際使用的位址。 這可能是整合子網路或點對站位址範圍中的任何位址,因此您必須允許從整個位址範圍存取。
其他偵錯步驟包括:
- 連線至虛擬網路中的 VM,並嘗試從該處連接資源的主機與連接埠組合。 若要測試 TCP 存取,請使用 PowerShell 命令 Test-NetConnection。 語法為:
Test-NetConnection hostname [optional: -Port]
- 啟動 VM 上的應用程式,並使用 tcpping,測試是否可透過應用程式從主控台存取該主機和連接埠。
內部部署資源
如果您的應用程式無法連線至內部部署資源,則請檢查您是否可以從虛擬網路連線至該資源。 使用 Test-NetConnection PowerShell 命令來檢查是否有 TCP 存取權。 如果您的 VM 無法連線到您的內部部署資源,表示 VPN 或 ExpressRoute 連線可能沒有正確設定。
如果虛擬網路裝載 VM 可以連線至您的內部部署系統,但您的應用程式無法連線至此系統,則很可能是下列其中一個原因所造成:
- 您的路由未設定子網路或內部部署閘道中的點對站位址範圍。
- 您的網路安全性群組正在封鎖點對站 IP 範圍的存取。
- 您的內部部署防火牆正在封鎖來自點對站 IP 範圍的流量。
- 您正在嘗試使用區域虛擬網路整合功能來連線至非 RFC 1918 位址。
先刪除 App Service 方案或 Web 應用程式,再中斷 VNet 整合的連線
如果您已刪除 Web 應用程式或 App Service 方案,但未先中斷 VNet 整合的連線,則無法在用於與已刪除資源整合的虛擬網路或子網路上執行任何更新/刪除作業。 子網路委派「Microsoft.Web/serverFarms」仍會指派給您的子網路,且會阻止更新/刪除作業。
若要再次更新/刪除子網路或虛擬網路,您需要重新建立 VNet 整合,然後將其中斷連線:
- 重新建立 App Service 方案和 Web 應用程式 (必須使用與之前完全相同的 Web 應用程式名稱)。
- 導覽至 Web 應用程式上的 [網路] 刀鋒視窗,並設定 VNet 整合。
- 設定完 VNet 整合後,選取 [中斷連線] 按鈕。
- 刪除 App Service 方案或 Web 應用程式。
- 更新/刪除子網路或虛擬網路。
如果您依照上述步驟操作後仍發生 VNet 整合相關問題,請聯絡 Microsoft 支援服務。
網路疑難排解員
您也可以使用網路疑難排解員來解決連線問題。 若要開啟網路疑難排解員,請移至 Azure 入口網站中的應用程式。 選取 [診斷並解決問題],然後搜尋網路疑難排解員。
連線問題 - 它會檢查虛擬網路整合的狀態,包括檢查是否已將私人 IP 指派給方案的所有執行個體和 DNS 設定。 如果未設定自訂 DNS,則會套用預設的 Azure DNS。 疑難排解員也會檢查常見的函式應用程式相依性,包括 Azure 儲存體的連線能力和其他繫結相依性。
設定問題 - 此疑難解答員會檢查您的子網是否適用於虛擬網路整合。
子網路/VNet 刪除問題 - 此疑難排解員會檢查您的子網路是否有任何鎖定,以及是否有任何可能阻止刪除 VNet/子網路的未使用的服務關聯連結。
後續步驟
若要深入了解網路和 Azure Functions: