虛擬網路位址轉譯 (NAT) 可簡化虛擬網路的僅輸出網際網路連線。 在子網路上設定時,所有輸出連線都會使用您指定的靜態公用 IP 位址。 NAT 對於需要取用使用 IP 位址允許清單作為安全措施的第三方服務的應用程式非常有用。 若要深入了解,請參閱什麼是 Azure NAT 閘道? (英文)。
本教學課程說明如何使用 NAT 閘道來從 HTTP 觸發的函式中路由遞送輸出流量。 此函式可讓您檢查其本身的輸出 IP 位址。 在此教學課程期間,您將會:
- 建立虛擬網路
- 建立進階方案函數應用程式
- 建立公用 IP 位址
- 建立 NAT 閘道
- 設定函數應用程式以透過 NAT 閘道路由輸出流量
附註
你不能使用 NAT 閘道將外發流量路由到與你的函式應用程式位於同一區域的 Azure Storage 帳號。 部署在你儲存帳號同一區域的服務,使用私有的 Azure IP 位址進行通訊。 欲了解更多資訊,請參閱 NAT 閘道常見問題。
拓撲
下圖顯示要建立的解決方案架構:
在進階方案中執行的函式與 Azure App Service 中的 Web Apps 具有相同裝載功能,其中包括 VNet 整合功能。 若要深入了解 VNet 整合,包括疑難排解與進階設定,請參閱整合您的應用程式與 Azure 虛擬網路。
先決條件
在本教學課程中,您必須了解 IP 定址和子網路設定。 您可以從 本文開始,其內容涵蓋了定址和子網路設定的基本概念。 您也可以從線上取得更多文章和影片。
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶 。
若您已完成整合 Functions 與 Azure 虛擬網路教學課程,可以跳至建立 HTTP 觸發函式。
建立虛擬網路
從 Azure 入口網站功能表選取 [建立資源]。 從 Azure Marketplace 選取 [網路]>[虛擬網路]。
在 [建立虛擬網路] 中,輸入或選取指定的設定,如下表中所示:
設定 值 訂用帳戶 選取您的訂用帳戶。 資源群組 選取 [新建],輸入 myResourceGroup,然後選取 [確定]。 名稱 輸入 myResourceGroup-vnet。 地點 選取 [美國東部]。 選取 [Next: IP Addresses] \(下一步:IP 位址\),且針對 IPv4 位址空間輸入 10.10.0.0/16。
選取 [新增子網路],然後針對子網路名稱輸入 Tutorial-Net,針對子網路位址範圍輸入 10.10.1.0/24。
選取 [新增],然後選取 [檢閱 + 建立]。 將其他項目保留為預設值,然後選取 [建立]。
在 [建立虛擬網路] 中,選取 [建立]。
接下來,您會在進階方案中建立函數應用程式。 此方案提供無伺服器規模,同時支援虛擬網路整合。
在進階方案中建立函數應用程式
此教學課程示範如何在進階方案中建立函數應用程式。 同樣的功能在你將應用程式架設於 彈性消費方案 或 專用(App Service)方案時也能使用。
附註
如需此教學課程的最佳體驗,請針對執行階段堆疊選擇 .NET,針對作業系統選擇 Windows。 此外,請在與您虛擬網路相同的區域中建立您的函數應用程式。
從 Azure 入口網站功能表或[首頁] 頁面,選取 [建立資源]。
在 [新增] 頁面中,選取 [計算]>[函數應用程式]。
在 [選取裝載選項] 下,選取 [Functions Premium]>[選取],以在 Premium 方案中建立您的應用程式。 在此無伺服器裝載選項中,您只需支付函數執行的時間。 若要深入瞭解不同的主機方案,請參閱 方案概觀。
在 [基本] 頁面中,使用下表中指定的函式應用程式設定。
設定 建議的值 描述 訂用帳戶 您的訂用帳戶 將在其下建立這個新函式應用程式的訂用帳戶。 資源群組 myResourceGroup 要在其中建立函式應用程式的新資源群組名稱。 函式應用程式名稱 全域唯一的名稱 用以識別新函式應用程式的名稱。 有效字元為 a-z(區分大小寫)、0-9以及-。 若要保證唯一的應用程式名稱,您可以選擇性地啟用 [安全唯一預設主機名稱],目前仍處於預覽狀態。您要部署程式碼或容器映像嗎? Code 發佈程式碼檔案或 Docker 容器的選項。 作業系統 慣用的作業系統 選擇Linux或 Windows。 執行階段堆疊 慣用語言 選擇支援您慣用函式程式設計語言的執行階段。 版本 支援的語言版本 選擇函式程式設計語言的支援版本。 區域 慣用區域 選擇與您接近的區域,或選擇與函式將會存取之其他服務接近的區域。 在 [Windows 方案] 或 [Linux 方案的環境詳細數據] 底下,選取 [新建]、[為您的 App Service 方案命名],然後選取 [定價方案]。 默認定價方案為 EP1,其中 EP 代表 彈性進階。 若要深入了解,請參閱 Premium SKU 清單。 在 Premium 上執行 JavaScript 函式時,您應該選擇 vCPU 數目較少的執行個體。 如需詳細資訊,請參閱選擇單一核心 Premium 方案。
除非您想要啟用 區域備援,否則請保留預設值 [已停用]。
選取 [下一步:儲存空間]。 在 [ 記憶體 ] 頁面上,建立函式應用程式所需的預設主機 記憶體帳戶 。 儲存體帳戶名稱長度必須介於 3 到 24 個字元之間,而且只能包含數位和小寫字母。 您也可以使用現有帳戶,條件是必須符合儲存體帳戶需求。
除非您啟用虛擬網路整合,否則請選取 [ 下一步:監視 ] 以略過 [ 網络] 索引 標籤。在 [ 監視] 頁面上,輸入下列設定:
設定 建議的值 描述 啟用 Application Insights 是的 啟用內建的 Application Insight 整合功能,以監控您的函式碼。 應用程式深入解析 預設 在最近的支援區域中,建立相同應用程式名稱的 Application Insights 資源。 您可以展開此設定,變更 [新資源名稱],或在 Azure 地理位置中選擇不同的位置來儲存資料。 選取 檢查 + 創建 以接受其餘頁面的預設值,並檢查應用程式的設定選項。
在 [檢閱 + 建立] 頁面中檢閱您的設定,然後選取 [建立] 來佈建和部署函式應用程式。
選取入口網站右上角的 [通知] 圖示,查看是否有 [部署成功] 訊息。
選取 [前往資源],以檢視您新的函式應用程式。 您也可以選取 [釘選到儀表板]。 釘選可讓您更輕鬆地從儀表板返回此函式應用程式資源。
將函數應用程式連線至虛擬網路
您現在可以將函數應用程式連線至虛擬網路。
在函數應用程式中,選取左側功能表中的 [網路],然後在 [VNet 整合] 下選取 [Click here to configure] \(按此進行設定\)。
在 [VNET 整合] 頁面上,選取 [Add VNet] \(新增 VNet\)。
在網路功能狀態中,使用影像下方資料表中的設定:
設定 建議的值 描述 虛擬網路 MyResourceGroup-vnet 此虛擬網路是您稍早建立的虛擬網路。 子網路 建立新的子網路 在虛擬網路中建立子網路,以供函數應用程式使用。 必須將 VNET 整合設定為使用空白子網路。 子網路名稱 Function-Net 新子網路的名稱。 虛擬網路位址區塊 10.10.0.0/16 您應該僅定義了一個位址區塊。 子網路位址區塊 10.10.2.0/24 子網路大小會限制進階方案函數應用程式可擴增的執行個體總數。 此範例使用具有 254 個可用主機位址的 /24子網路。 此子網路已過度佈建,但很容易計算。選取 [確定] 以新增子網路。 關閉 [VNET 整合] 與 [網路功能狀態] 頁面,以返回您的函數應用程式頁面。
函數應用程式現在可以存取虛擬網路。 啟用連線後,vnetrouteallenabled 站點設定會設為 1。 您必須將此站點設定或舊版 WEBSITE_VNET_ROUTE_ALL 應用程式設定設為 1。
接下來,您會將 HTTP 觸發函式新增至函數應用程式。
建立 HTTP 觸發程序函式
從 [函式] 視窗的左側功能表選取 [函式],然後從頂端功能表選取 [新增]。
在 [新增函式] 視窗中,選取 [HTTP 觸發程序] 並接受 [新增函式] 的預設名稱,或輸入新的名稱。
在 [Code + Test] \(程式碼 + 測試\) 中,以下列程式碼取代範本產生的 C# 指令碼 (.csx) 程式碼:
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; public static async Task<IActionResult> Run(HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); var client = new HttpClient(); var response = await client.GetAsync(@"https://ifconfig.me"); var responseMessage = await response.Content.ReadAsStringAsync(); return new OkObjectResult(responseMessage); }此程式碼會呼叫傳回呼叫者 IP 位址的外部網站,在此案例中為此函式。 此方法可讓您輕鬆地判斷函數應用程式所使用的輸出 IP 位址。
現在您已準備好執行函式,並檢查目前的輸出 IP。
確認目前的輸出 IP
現在,您可以執行函式。 但是,請先簽入入口網站,並查看函數應用程式正在使用的輸出 IP。
在函數應用程式中,選取 [屬性],然後檢閱 [輸出 IP 位址] 欄位。
現在,返回 HTTP 觸發函式,然後依序選取 [Code + Test] \(程式碼 + 測試\) 和 [測試/執行]。
選取 [執行] 以執行函數,然後切換至 [輸出],並驗證 HTTP 回應本文中的 IP 位址是否是您稍早檢視的輸出 IP 位址其中一個值。
現在,您可以建立公用 IP,並使用 NAT 閘道修改此輸出 IP 位址。
建立公用 IP
從您的資源群組中,選取 [新增],並在 Azure Marketplace 搜尋 [公用 IP 位址],然後選取 [建立]。 使用影像下方表格中的設定:
設定 建議的值 IP 版本 IPv4 SKU 標準 層級 區域性 名稱 輸出 IP 訂用帳戶 確保您的訂閱已顯示 資源群組 myResourceGroup (或您指派給資源群組的名稱) 位置 美國東部 (或您指派給其他資源的位置) 可用性區域 沒有區域 選取 [建立] 以提交部署。
部署完成之後,請巡覽至您新建立的公用 IP 位址資源,並檢視 [概觀] 中的 IP 位址。
建立 NAT 閘道
現在,讓我們來建立 NAT 閘道。 當您從先前的虛擬網路教學課程開始時,Function-Net 是建議的子網路名稱,而 MyResourceGroup-vnet 是該教學課程中建議的虛擬網路名稱。
從您的資源群組中,選取 [新增],並在 Azure Marketplace 搜尋 [NAT gateway] \(NAT 閘道\),然後選取 [建立]。 使用圖片下方資料表中的設定來填入 [基本知識] 索引標籤:
設定 建議的值 訂用帳戶 您的訂用帳戶 資源群組 myResourceGroup (或您指派給資源群組的名稱) NAT 閘道名稱 myNatGateway 區域 美國東部 (或您指派給其他資源的位置) 可用性區域 None 選取 [Next: Outbound IP] \(下一步:輸出 IP\)。 在 [公用 IP 位址] 欄位中,選取先前建立的公用 IP 位址。 不選取 [Public IP Prefixes] \(公用 IP 首碼\)。
選取 [Next: Subnet] \(下一步:子網路\)。 在 [虛擬網路] 欄位與 [Function-Net] 子網路中選取 [myResourceGroup-vnet] 資源。
選取 [檢閱 + 建立],然後選取 [建立] 以提交部署。
部署完成之後,NAT 閘道便準備好將流量從函數應用程式子網路由至網際網路。
驗證新的輸出 IP
重複先前的步驟以再次執行函式。 您現在應該會看到您在函式輸出中所顯示 NAT 所設定的輸出 IP 位址。
清除資源
您已建立可完成此教學課程的資源。 您可能必須支付這些資源,取決於您的帳戶狀態與服務定價。 若要避免產生額外成本,當您知道需要較長的時間時,請刪除資源。
在 Azure 入口網站中,移至 [資源群組] 分頁。
若要從函數應用程式頁面移至該頁面,選取 [概觀] 索引標籤,然後選取 [資源群組] 底下的連結。
若要從儀表板移至該頁面,請選取 [資源群組],然後選取您用於本文的資源群組。
在 [資源群組] 分頁中,檢閱包含資源的清單,並確認這些是您想要刪除的項目。
選取 [刪除資源群組],並遵循指示。
刪除作業可能需要幾分鐘。 完成時,通知會出現幾秒鐘的時間。 您也可以選取分頁頂端的鈴鐺圖示以檢視通知。