教學課程:使用私人端點將 Azure Functions 與 Azure 虛擬網路整合

本教學課程說明如何使用 Azure Functions,透過私人端點連線到 Azure 虛擬網路中的資源。 您可以使用透過 Azure 入口網站鎖定在虛擬網路後方的新儲存體帳戶,來建立新的函數應用程式。 虛擬網路會使用服務匯流排佇列觸發程序。

在本教學課程中,您將會:

  • 使用虛擬網路整合和私人端點,在彈性進階方案中建立函數應用程式。
  • 建立 Azure 資源,例如服務匯流排
  • 鎖定私人端點後方的服務匯流排。
  • 部署同時使用服務匯流排和 HTTP 觸發程序的函數應用程式。
  • 測試以查看您的函數應用程式在虛擬網路內是否安全。
  • 清除資源。

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

您可以在彈性進階方案中建立 C# 函數應用程式,其會支援建立時的虛擬網路整合等網路功能,以及無伺服器規模。 本教學課程使用 C# 和 Windows。 也支援其他語言和 Linux。

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

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

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

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 在其下建立這個新函數應用程式的訂用帳戶。
    資源群組 myResourceGroup 在其中建立函數應用程式的新資源群組名稱。
    函數應用程式名稱 全域唯一的名稱 用以識別新函式應用程式的名稱。 有效的字元是 a-z (不區分大小寫)、0-9-
    發行 代碼 選擇要發佈程式碼檔案或 Docker 容器。
    執行階段堆疊 .NET 本教學課程使用 .NET。
    版本 6 (LTS) 本教學課程使用與 Functions 主機在相同處理序中執行的 .NET 6.0。
    區域 慣用區域 選擇的區域應靠近您或靠近函式將會存取的其他服務。
    作業系統 Windows 本教學課程使用 Windows,但也適用於 Linux。
    計劃 Functions 進階 定義如何將資源配置給函式應用程式的主控方案。 依預設,當您選取 [Premium] 時,即會建立新的 App Service 方案。 預設的 [SKU 和大小]EP1,其中 EP 代表彈性進階 (elastic premium)。 如需詳細資訊,請參閱進階 SKU 清單。

    在 Premium 方案上執行 JavaScript 函式時,請選擇 vCPU 數目較少的執行個體。 如需詳細資訊,請參閱選擇單一核心 Premium 方案
  4. 選取 [下一步:儲存空間]。 在 [儲存體] 頁面上,輸入下列設定。

    設定 建議的值 描述
    儲存體帳戶 全域唯一的名稱 建立您函式應用程式使用的儲存體帳戶。 儲存體帳戶名稱的長度必須介於 3 到 24 個字元之間。 其中僅能包含數字和小寫字母。 您也可以使用未受防火牆規則限制且符合儲存體帳戶需求的現有帳戶。 搭配鎖定的儲存體帳戶使用 Functions 時,需要 v2 儲存體帳戶。 這是預設儲存體版本,其是透過 [建立] 刀鋒視窗建立一個具有網路功能的函數應用程式時所建立的。
  5. 選取 [下一步:網路]。 在 [網路] 頁面上,輸入下列設定。

    注意

    在選取其他選項之前,其中有些設定看不見。

    設定 建議的值 描述
    啟用公用存取 關閉 拒絕公用網路存取將會封鎖所有傳入流量,但來自私人端點的傳入流量除外。
    啟用網路插入 另一 在此選項切換至 [開啟] 之後,就會在入口網站視窗中顯示使用 VNet 整合來設定應用程式的功能。
    虛擬網路 新建 選取 [建立新的] 欄位。 在快顯畫面中,提供虛擬網路的名稱,然後選取 [確定]。 即會顯示在建立時限制對函數應用程式進行輸入和輸出存取的選項。 您必須在視窗的 [輸出存取] 部分中明確啟用 VNet 整合,以限制輸出存取。

    針對 [輸入存取] 區段輸入下列設定。 此步驟會在函數應用程式上建立私人端點。

    提示

    若要從入口網站繼續與函數應用程式互動,您必須將本機電腦新增至虛擬網路。 如果您不想要限制輸入存取,請略過此步驟。

    設定 建議的值 描述
    啟用私人端點 另一 在此選項啟用之後,就會在入口網站中顯示使用 VNet 整合來設定應用程式的功能。
    私人端點名稱 myInboundPrivateEndpointName 識別新函數應用程式私人端點的名稱。
    輸入子網路 新建 此選項會為您的輸入私人端點建立新的子網路。 多個私人端點可以新增至單一子網路。 提供 [子網路名稱]。 [子網路位址區塊] 可能會保留預設值。 選取 [確定]。 若要深入了解子網路大小調整,請參閱子網路
    DNS Azure 私人 DNS 區域 此值表示私人端點所使用的 DNS 伺服器。 在大部分情況下,如果您在 Azure 內工作,Azure 私人 DNS 區域是您應該使用的 DNS 區域,因為將 [手動] 用於自訂 DNS 區域會增加複雜度。

    針對 [輸出存取] 區段輸入下列設定。 此步驟會在建立時整合函數應用程式與虛擬網路。 其也會公開在儲存體帳戶上建立私人端點的選項,並限制儲存體帳戶在建立時不得進行網路存取。 當函數應用程式整合 vnet 時,所有輸出流量預設都會經過 vnet

    設定 建議的值 描述
    啟用 VNet 整合 另一 這會在建立時整合您的函數應用程式與 VNet,並引導所有輸出流量通過 VNet。
    輸出子網路 新建 這會為函數應用程式的 VNet 整合建立新的子網路。 函數應用程式只能透過空的子網路整合 VNet。 提供 [子網路名稱]。 [子網路位址區塊] 可能會保留預設值。 如果您想要進行設定,請在這裡深入了解如何調整子網路大小。 選取 [確定]。 即會顯示建立 [儲存體私人端點] 的選項。 若要使用函數應用程式搭配虛擬網路,您必須將其加入子網路。

    針對 [儲存體私人端點] 區段輸入下列設定。 此步驟會在建立時,為儲存體帳戶上的 Blob、佇列、檔案和資料表端點建立私人端點。 這可有效地整合儲存體帳戶與 VNet。

    設定 建議的值 描述
    新增儲存體私人端點 另一 在此選項啟用之後,就會在入口網站中顯示使用 VNet 整合來設定應用程式的功能。
    私人端點名稱 myInboundPrivateEndpointName 識別儲存體帳戶私人端點的名稱。
    私人端點子網路 新建 這會在儲存體帳戶上為您的輸入私人端點建立新的子網路。 多個私人端點可以新增至單一子網路。 提供 [子網路名稱]。 [子網路位址區塊] 可能會保留預設值。 如果您想要進行設定,請在這裡深入了解如何調整子網路大小。 選取 [確定]
    DNS Azure 私人 DNS 區域 此值表示私人端點所使用的 DNS 伺服器。 在大部分情況下,如果您在 Azure 內工作,Azure 私人 DNS 區域是您應該使用的 DNS 區域,因為將 [手動] 用於自訂 DNS 區域將會增加複雜度。
  6. 選取 [下一步: 監視]。 在 [掛接] 頁面中輸入下列設定。

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

  8. 在 [檢閱 + 建立] 頁面上,檢閱您的設定。 然後選取 [建立] 以建立並部署函數應用程式。

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

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

恭喜! 您已成功建立進階函數應用程式。

注意

某些部署可能有時無法在儲存體帳戶中建立私人端點,錯誤為 'StorageAccountOperationInProgress'。 即使已成功建立函數應用程式本身,還是會發生此失敗。 當您遇到這類錯誤時,請刪除函數應用程式,然後重試作業。 您可以改為在儲存體帳戶上手動建立私人端點。

建立服務匯流排

接下來,您會建立服務匯流排執行個體,用來在本教學課程中測試函數應用程式的網路功能。

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

  2. 在 [新增] 頁面上,搜尋服務匯流排。 然後選取建立

  3. 在 [基本] 索引標籤上,使用下表來設定服務匯流排的設定。 所有其他設定均可使用預設值。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。
    資源群組 myResourceGroup 使用函數應用程式建立的資源群組。
    命名空間名稱 myServiceBus 啟用私人端點的服務匯流排執行個體名稱。
    地點 myFunctionRegion 建立函數應用程式的區域。
    定價層 進階 選擇這一層以使用私人端點與 Azure 服務匯流排。
  4. 選取 [檢閱 + 建立]。 驗證完成後,選取 [建立]。

鎖定服務匯流排

建立私人端點以鎖定您的服務匯流排:

  1. 在新服務匯流排的左側功能表中,選取 [網路]

  2. 在 [私人端點連線] 索引標籤中,選取 [私人端點]

    Screenshot of how to go to private endpoints for the Service Bus.

  3. 在 [基本] 索引標籤,使用下表所顯示的私人端點設定。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。
    資源群組 myResourceGroup 使用函數應用程式建立的資源群組。
    名稱 sb-endpoint 服務匯流排的私人端點名稱。
    區域 myFunctionRegion 您建立儲存體帳戶的區域。
  4. 在 [資源] 索引標籤,使用下表所顯示的私人端點設定。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。
    資源類型 Microsoft.ServiceBus/namespaces 服務匯流排的資源類型。
    資源 myServiceBus 您稍早在教學課程中建立的服務匯流排。
    目標子資源 命名空間 用於服務匯流排命名空間的私人端點。
  5. 在 [虛擬網路] 索引標籤上,針對 [子網路] 設定,選擇 [預設]

  6. 選取 [檢閱 + 建立]。 驗證完成後,選取 [建立]。

  7. 在建立私人端點之後,請返回服務匯流排命名空間的 [網路] 區段,然後檢查 [公用存取] 索引標籤。

  8. 確定已選取 [選取的網路]

  9. 選取 [+ 新增現有的虛擬網路] 以新增最近建立的虛擬網路。

  10. 在 [新增網路] 索引標籤上,使用下表中的網路設定:

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。
    虛擬網路 myVirtualNet 函數應用程式連線至其中的虛擬網路名稱。
    子網路 functions 函數應用程式連線至其中的子網路名稱。
  11. 選取 [新增您的用戶端 IP 位址],將命名空間的存取權授與您目前的用戶端 IP。

    注意

    您必須允許用戶端 IP 位址存取 Azure 入口網站,才能稍後在本教學課程中發佈訊息至佇列

  12. 選取 [啟用] 以啟用服務端點。

  13. 選取 [新增],將選取的虛擬網路和子網路新增至服務匯流排的防火牆規則。

  14. 選取 [儲存] 以儲存更新的防火牆規則。

虛擬網路中的資源現在可以使用私人端點與服務匯流排通訊。

建立佇列

建立 Azure Functions 服務匯流排觸發程序用來取得事件的佇列:

  1. 在服務匯流排的左側功能表中,選取 [佇列]

  2. 選取 [佇列]。 為了達成本教學課程的目的,請提供名稱 queue 作為新佇列的名稱。

    Screenshot of how to create a Service Bus queue.

  3. 選取 建立

取得服務匯流排連接字串

  1. 在服務匯流排的左側功能表中,選取 [共用存取原則]

  2. 選取 [RootManageSharedAccessKey]。 複製並儲存 [主要連接字串]。 設定應用程式的設定時,您需要此連接字串。

    Screenshot of how to get a Service Bus connection string.

設定函數應用程式的設定

  1. 在函數應用程式的左側功能表中,選取 [設定]

  2. 若要使用函數應用程式搭配虛擬網路和服務匯流排,請更新下表所顯示的應用程式設定。 若要新增或編輯設定,請選取 [+ 新增應用程式設定] 或應用程式設定表格最右邊資料行中的 [編輯] 圖示。 完成時,請選取 [儲存]

    設定 建議的值 描述
    SERVICEBUS_CONNECTION myServiceBusConnectionString 針對服務匯流排的連接字串建立這個應用程式設定。 此儲存體連接字串來自 [取得服務匯流排連接字串] 區段。
    WEBSITE_CONTENTOVERVNET 1 建立此應用程式設定。 值 1 可讓函數應用程式在限制儲存體帳戶只能用於虛擬網路時進行調整。
  3. 由於您使用彈性進階主控方案,請在 [設定] 檢視中,選取 [函式執行階段設定] 索引標籤。將 [執行階段調整監視] 設定為 [開啟]。 然後選取儲存。 執行階段驅動調整可讓您將非 HTTP 觸發程序函式連接到虛擬網路內執行的服務。

    Screenshot of how to enable runtime-driven scaling for Azure Functions.

注意

專用 App Service 方案中裝載的函數應用程式不需要執行階段調整。

部署服務匯流排觸發程序和 HTTP 觸發程序

注意

在函數應用程式上啟用私人端點,也會讓原始檔控制管理員 (SCM) 網站變得無法公開存取。 下列指示會使用函數應用程式內的部署中心,提供部署指示。 或者,也可以使用部署至虛擬網路中子網路的 Zip 部署自我裝載式代理程式。

  1. 在 GitHub 中,移至下列範例存放庫。 其中包含函數應用程式和兩個函式、一個 HTTP 觸發程序和一個服務匯流排佇列觸發程序。

    https://github.com/Azure-Samples/functions-vnet-tutorial

  2. 在頁面頂端,選取 [分支],以在您自己的 GitHub 帳戶或組織中建立此存放庫的分支。

  3. 在函數應用程式的左側功能表中,選取 [部署中心]。 然後,選取 [設定]

  4. 在 [設定] 索引標籤上,使用下表所顯示的部署設定。

    設定 建議的值 描述
    來源 GitHub 您應該已為步驟 2 的範例程式碼建立 GitHub 存放庫。
    組織 myOrganization 用來簽入存放庫的組織。 通常是您的帳戶。
    存放庫 functions-vnet-tutorial https://github.com/Azure-Samples/functions-vnet-tutorial 分支的存放庫。
    分支 main 您所建立的存放庫主要分支。
    執行階段堆疊 .NET 範例程式碼使用 C#。
    版本 .NET Core 3.1 執行階段版本。
  5. 選取 [儲存]。

    Screenshot of how to deploy Azure Functions code through the portal.

  6. 初次部署可能需要幾分鐘的時間。 成功部署應用程式時,在 [記錄] 索引標籤上,您會看到 [成功 (使用中)] 狀態訊息。 如有需要,請重新整理頁面。

恭喜! 您已成功部署範例函數應用程式。

測試鎖定的函數應用程式

  1. 在函數應用程式的左側功能表中,選取 [函式]

  2. 選取 [ServiceBusQueueTrigger]

  3. 在左側功能表中,選取 [監視]

您會發現您無法監視應用程式。 您的瀏覽器無法存取虛擬網路,因此無法直接存取虛擬網路中的資源。

以下是使用 Application Insights 監視函式的替代方式:

  1. 在函數應用程式的左側功能表中,選取 [Application Insights]。 然後選取 [檢視 Application Insights 資料]

    Screenshot of how to view application insights for a function app.

  2. 在左側功能表中,選取 [即時計量]

  3. 開啟新的索引標籤。在服務匯流排的左側功能表中,選取 [佇列]

  4. 選取您的佇列。

  5. 在左側功能表中,選取 [Service Bus Explorer]。 在 [傳送] 下方的 [內容類型] 部分,選擇 [文字/純文字]。 然後輸入訊息。

  6. 選取 [傳送] 以傳送訊息。

    Screenshot of how to send Service Bus messages by using the portal.

  7. 在 [即時計量] 索引標籤,您應該會看到服務匯流排佇列觸發程序已引發。 如果沒有,請從 [Service Bus Explorer] 重新傳送訊息。

    Screenshot of how to view messages by using live metrics for function apps.

恭喜! 您已成功測試使用私人端點的函數應用程式設定。

了解私人 DNS 區域

您已使用私人端點來連線到 Azure 資源。 您要連線到私人 IP 位址,而不是公用端點。 現有的 Azure 服務設定為使用現有的 DNS 來連線到公用端點。 您必須覆寫 DNS 設定,才能連線到私人端點。

系統會針對使用私人端點設定的每個 Azure 資源,建立私人 DNS 區域。 系統會針對與私人端點相關聯的每個私人 IP 位址,建立 DNS 記錄。

在本教學課程中,已建立下列 DNS 區域:

  • privatelink.file.core.windows.net
  • privatelink.blob.core.windows.net
  • privatelink.servicebus.windows.net
  • privatelink.azurewebsites.net

清除資源

在上述步驟中,您已建立資源群組中的 Azure 資源。 如果您預期未來不需要這些資源,則可以藉由刪除資源群組予以刪除。

從 Azure 入口網站功能表或 [首頁] 頁面,選取 [資源群組]。 然後,在 [資源群組] 頁面上,選取 [myResourceGroup]

在 [myResourceGroup] 頁面上,確定所列出的資源是您想要刪除的項目。

選取 [刪除資源群組],在文字方塊中輸入 myResourceGroup,然後選取 [刪除]

下一步

在本教學課程中,您已建立進階函數應用程式、儲存體帳戶和服務匯流排。 您在私人端點後方保護所有這些資源。

使用下列連結,以深入了解 Azure Functions 網路選項和私人端點: