教學課程:使用 Azure 虛擬網路 NAT 閘道控制 Azure Functions 輸出 IP

虛擬網路位址轉譯 (NAT) 可簡化虛擬網路的僅輸出網際網路連線。 在子網路上設定時,所有輸出連線都會使用您指定的靜態公用 IP 位址。 NAT 對於需要取用使用 IP 位址允許清單作為安全措施的第三方服務的應用程式非常有用。 若要深入了解,請參閱什麼是 Azure NAT 閘道? (英文)。

本教學課程說明如何使用 NAT 閘道來從 HTTP 觸發的函式中路由遞送輸出流量。 此函式可讓您檢查其本身的輸出 IP 位址。 在此教學課程期間,您將會:

  • 建立虛擬網路
  • 建立進階方案函數應用程式
  • 建立公用 IP 位址
  • 建立 NAT 閘道
  • 設定函數應用程式以透過 NAT 閘道路由輸出流量

拓撲

下圖顯示要建立的解決方案架構:

UI for NAT gateway integration

在進階方案中執行的函式與 Azure App Service 中的 Web Apps 具有相同裝載功能,其中包括 VNet 整合功能。 若要深入了解 VNet 整合,包括疑難排解與進階設定,請參閱整合您的應用程式與 Azure 虛擬網路

必要條件

在本教學課程中,您必須了解 IP 定址和子網路設定。 您可以從 本文開始,其內容涵蓋了定址和子網路設定的基本概念。 您也可以從線上取得更多文章和影片。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

若您已完成整合 Functions 與 Azure 虛擬網路教學課程,可以跳至建立 HTTP 觸發函式

建立虛擬網路

  1. 從 Azure 入口網站功能表選取 [建立資源]。 從 Azure Marketplace 選取 [網路]>[虛擬網路]

  2. 在 [建立虛擬網路] 中,輸入或選取指定的設定,如下表中所示:

    設定
    訂用帳戶 選取您的訂用帳戶。
    資源群組 選取 [新建],輸入 myResourceGroup,然後選取 [確定]
    名稱 輸入 myResourceGroup-vnet
    Location 選取 [美國東部]
  3. 選取 [Next: IP Addresses] \(下一步:IP 位址\),且針對 IPv4 位址空間輸入 10.10.0.0/16

  4. 選取 [新增子網路],然後針對子網路名稱輸入 Tutorial-Net,針對子網路位址範圍輸入 10.10.1.0/24

    IP Addresses tab for creating a vnet

  5. 選取 [新增],然後選取 [檢閱 + 建立]。 將其他項目保留為預設值,然後選取 [建立]

  6. 在 [建立虛擬網路] 中,選取 [建立]

接下來,您會在進階方案中建立函數應用程式。 此方案提供無伺服器規模,同時支援虛擬網路整合。

在進階方案中建立函數應用程式

此教學課程示範如何在進階方案中建立函數應用程式。 使用專用 (App Service) 方案時,也可以使用相同的功能。

注意

如需此教學課程的最佳體驗,請針對執行階段堆疊選擇 .NET,針對作業系統選擇 Windows。 此外,請在與您虛擬網路相同的區域中建立您的函數應用程式。

  1. 從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]

  2. 在 [新增] 頁面中,選取 [計算]>[函數應用程式]

  3. 在 [基本] 頁面中,使用下表中指定的函式應用程式設定。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 將在其下建立這個新函式應用程式的訂用帳戶。
    資源群組 myResourceGroup 要在其中建立函式應用程式的新資源群組名稱。
    函數應用程式名稱 全域唯一的名稱 用以識別新函式應用程式的名稱。 有效的字元是 a-z (不區分大小寫)、0-9-
    發行 代碼 發佈程式碼檔案或 Docker 容器的選項。
    執行階段堆疊 慣用語言 選擇支援您慣用函式程式設計語言的執行階段。 Python 開發目前不支援入口網站內編輯。
    區域 慣用區域 選擇與您接近的區域,或選擇與函式將會存取之其他服務接近的區域。
  4. 選取 [下一步:裝載]。 在 [裝載] 頁面中,輸入下列設定:

    設定 建議的值 描述
    儲存體帳戶 全域唯一的名稱 建立您函式應用程式使用的儲存體帳戶。 儲存體帳戶名稱必須介於 3 到 24 個字元的長度,而且只能包含數字和小寫字母。 您也可以使用現有帳戶,條件是必須符合儲存體帳戶需求
    作業系統 慣用的作業系統 系統會根據您的執行階段堆疊選項預先選取作業系統,但您可以視需要變更設定。 只有 Linux 支援 Python。 入口網站內編輯僅在 Windows 上提供支援。
    計劃 進階 定義如何將資源配置給函式應用程式的主控方案。 選取 [進階]。 依預設,會建立新的 App Service 方案。 預設的 [SKU 和大小]EP1,其中 EP 代表彈性進階 (elastic premium)。 若要深入了解,請參閱 Premium SKU 清單
    在 Premium 上執行 JavaScript 函式時,您應該選擇 vCPU 數目較少的執行個體。 如需詳細資訊,請參閱選擇單一核心 Premium 方案
  5. 選取 [下一步:監視]。 在 [監視] 頁面中,輸入下列設定:

    設定 建議的值 描述
    Application Insights 預設 在最近的支援區域中,建立相同應用程式名稱的 Application Insights 資源。 您可以展開此設定,變更 [新資源名稱],或在 Azure 地理位置中選擇不同的位置來儲存資料。
  6. 選取 [檢閱 + 建立],以檢閱應用程式組態選項。

  7. 在 [檢閱 + 建立] 頁面中檢閱您的設定,然後選取 [建立] 來佈建和部署函式應用程式。

  8. 選取入口網站右上角的 [通知] 圖示,查看是否有 [部署成功] 訊息。

  9. 選取 [前往資源],以檢視您新的函式應用程式。 您也可以選取 [釘選到儀表板]。 釘選可讓您更輕鬆地從儀表板返回此函式應用程式資源。

    Deployment notification

將函數應用程式連線至虛擬網路

您現在可以將函數應用程式連線至虛擬網路。

  1. 在函數應用程式中,選取左側功能表中的 [網路],然後在 [VNet 整合] 下選取 [Click here to configure] \(按此進行設定\)

    Choose networking in the function app

  2. 在 [VNET 整合] 頁面上,選取 [Add VNet] \(新增 VNet\)

  3. 網路功能狀態中,使用影像下方資料表中的設定:

    Define the function app virtual network

    設定 建議的值 描述
    虛擬網路 MyResourceGroup-vnet 此虛擬網路是您稍早建立的虛擬網路。
    子網路 建立新的子網路 在虛擬網路中建立子網路,以供函數應用程式使用。 必須將 VNET 整合設定為使用空白子網路。
    子網路名稱 Function-Net 新子網路的名稱。
    虛擬網路位址區塊 10.10.0.0/16 您應該僅定義了一個位址區塊。
    子網路位址區塊 10.10.2.0/24 子網路大小會限制進階方案函數應用程式可擴增的執行個體總數。 此範例使用具有 254 個可用主機位址的 /24 子網路。 此子網路已過度佈建,但很容易計算。
  4. 選取 [確定] 以新增子網路。 關閉 [VNET 整合] 與 [網路功能狀態] 頁面,以返回您的函數應用程式頁面。

函數應用程式現在可以存取虛擬網路。 啟用連線後,vnetrouteallenabled 站點設定會設為 1。 您必須將此站點設定或舊版 WEBSITE_VNET_ROUTE_ALL 應用程式設定設為 1

接下來,您會將 HTTP 觸發函式新增至函數應用程式。

建立 HTTP 觸發程序函式

  1. 從 [函式] 視窗的左側功能表選取 [函式],然後從頂端功能表選取 [新增]

  2. 在 [新增函式] 視窗中,選取 [HTTP 觸發程序] 並接受 [新增函式] 的預設名稱,或輸入新的名稱。

  3. 在 [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。

  1. 在函數應用程式中,選取 [屬性],然後檢閱 [輸出 IP 位址] 欄位。

    View function app outbound IP addresses

  2. 現在,返回 HTTP 觸發函式,然後依序選取 [Code + Test] \(程式碼 + 測試\) 和 [測試/執行]

    Test function

  3. 選取 [執行] 以執行函式,然後切換至 [輸出]

    Test function output

  4. 確認 HTTP 回應本文中的 IP 位址是您稍早所檢視輸出 IP 位址的其中一個值。

現在,您可以建立公用 IP,並使用 NAT 閘道修改此輸出 IP 位址。

建立公用 IP

  1. 從您的資源群組中,選取 [新增],並在 Azure Marketplace 搜尋 [公用 IP 位址],然後選取 [建立]。 使用影像下方表格中的設定:

    Create Public IP Address

    設定 建議的值
    IP 版本 IPv4
    SKU 標準
    Regional
    名稱 輸出 IP
    訂用帳戶 確保您的訂閱已顯示
    資源群組 myResourceGroup (或您指派給資源群組的名稱)
    地點 美國東部 (或您指派給其他資源的位置)
    可用性區域 沒有區域
  2. 選取 [建立] 以提交部署。

  3. 部署完成之後,請巡覽至您新建立的公用 IP 位址資源,並檢視 [概觀] 中的 IP 位址。

    View Public IP Address

建立 NAT 閘道

現在,讓我們來建立 NAT 閘道。 當您從先前的虛擬網路教學課程開始時,Function-Net 是建議的子網路名稱,而 MyResourceGroup-vnet 是該教學課程中建議的虛擬網路名稱。

  1. 從您的資源群組中,選取 [新增],並在 Azure Marketplace 搜尋 [NAT gateway] \(NAT 閘道\),然後選取 [建立]。 使用圖片下方資料表中的設定來填入 [基本知識] 索引標籤:

    Create NAT gateway

    設定 建議的值
    訂用帳戶 您的訂用帳戶
    資源群組 myResourceGroup (或您指派給資源群組的名稱)
    NAT 閘道名稱 myNatGateway
    區域 美國東部 (或您指派給其他資源的位置)
    可用性區域
  2. 選取 [Next: Outbound IP] \(下一步:輸出 IP\)。 在 [公用 IP 位址] 欄位中,選取先前建立的公用 IP 位址。 不選取 [Public IP Prefixes] \(公用 IP 首碼\)

  3. 選取 [Next: Subnet] \(下一步:子網路\)。 在 [虛擬網路] 欄位與 [Function-Net] 子網路中選取 [myResourceGroup-vnet] 資源。

    Select subnet

  4. 選取 [檢閱 + 建立],然後選取 [建立] 以提交部署。

部署完成之後,NAT 閘道便準備好將流量從函數應用程式子網路由至網際網路。

驗證新的輸出 IP

重複先前的步驟以再次執行函式。 您現在應該會看到您在函式輸出中所顯示 NAT 所設定的輸出 IP 位址。

清除資源

您已建立可完成此教學課程的資源。 您可能必須支付這些資源,取決於您的帳戶狀態服務定價。 若要避免產生額外成本,當您知道需要較長的時間時,請刪除資源。

  1. 在 Azure 入口網站中,移至 [資源群組] 分頁。

    若要從函數應用程式頁面移至該頁面,選取 [概觀] 索引標籤,然後選取 [資源群組] 底下的連結。

    Screenshot that shows select the resource group to delete from the function app page.

    若要從儀表板移至該頁面,請選取 [資源群組],然後選取您用於本文的資源群組。

  2. 在 [資源群組] 分頁中,檢閱包含資源的清單,並確認這些是您想要刪除的項目。

  3. 選取 [刪除資源群組],並遵循指示。

    刪除作業可能需要幾分鐘。 完成時,通知會出現幾秒鐘的時間。 您也可以選取分頁頂端的鈴鐺圖示以檢視通知。

下一步