分享方式:


在彈性取用方案中建立和管理函數應用程式

本文說明如何建立裝載於 Azure Functions 中彈性取用方案中的函數應用程式。 它也會示範如何管理彈性取用方案託管應用程式的特定功能。

函數應用程式資源是特定語言。 請務必在文章開頭選擇您慣用的程式碼開發語言。

重要

Flex 使用量方案目前為預覽狀態。

必要條件

建立彈性取用應用程式

本節說明如何使用 Azure CLI、Azure 入口網站或 Visual Studio Code,在彈性取用方案中建立函數應用程式。 如需使用 Bicep/ARM 範本在彈性取用方案中建立應用程式的範例,請參閱彈性取用存放庫

如果您選擇改用 Maven來建立和部署應用程式,則可以跳過本節。

若要支援函式程式碼,您需要建立三個資源:

  • 資源群組,這是相關資源的邏輯容器。
  • 儲存體帳戶,用來維護函數的狀態和其他資訊。
  • 彈性取用方案中的函數應用程式,可提供執行函式程式碼的環境。 函數應用程式可對應至您的本機函式專案,並可讓您在彈性取用方案中,將函式分組為邏輯單位,以便管理、部署和共用資源。
  1. 如果您尚未登入 Azure,請於此時登入:

    az login
    

    az login 命令會將您登入 Azure 帳戶。

  2. 使用 az functionapp list-flexconsumption-locations 命令來檢閱目前支援彈性取用的區域清單。

    az functionapp list-flexconsumption-locations --output table
    
  1. 在其中一個目前支援的區域中建立資源群組:

    az group create --name <RESOURCE_GROUP> --location <REGION>
    

    在上述命令中,將 <RESOURCE_GROUP> 取代為您訂用帳戶中的唯一值,並以其中一個目前支援的區域取代 <REGION>az group create 命令會建立資源群組。

  2. 在您的資源群組和區域中建立一般用途的儲存體帳戶:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    在上述範例中,請將 <STORAGE_NAME> 取代為適合您且在 Azure 儲存體中是唯一的名稱。 名稱只能包含 3 到 24 個字元的數字和小寫字母。 Standard_LRS 會指定受 Functions 支援的一般用途帳戶。 az storage account create 命令會建立儲存體帳戶。

    重要

    儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。

  3. 在 Azure 中建立函式應用程式:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    在彈性取用方案中執行時,目前不支援執行同處理序 的 C# 應用程式

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17 
    

    針對 Java 應用程式,目前也支援 Java 11。

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11 
    

    針對 Python 應用程式,目前也支援 Python 3.10。

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4 
    

    在此範例中,請將 <RESOURCE_GROUP><STORAGE_NAME> 分別取代為資源群組以及您在上一個步驟中使用的帳戶名稱。 請使用適合您的全域唯一名稱來取代 <APP_NAME><APP_NAME> 也是函數應用程式的預設網域名稱伺服器 (DNS) 網域。 az functionapp create 命令會在 Azure 中建立函數應用程式。

    此命令會建立在彈性取用方案中執行的函數應用程式。 使用的特定語言執行階段版本是預覽中目前支援的版本。

    因為您建立了應用程式而不指定隨時待命執行個體,因此您的應用程式只會在主動執行函式時產生成本。 此命令也會在相同的資源群組中建立建立關聯的 Azure Application Insights 執行個體,您可將其用於監視函數應用程式和檢視記錄。 如需詳細資訊,請參閱監視 Azure Functions

    
    

部署程式碼專案

如果您選擇改用 Maven來建立和部署應用程式,則可以跳過本節。

您可以選擇使用各種工具來將專案程式碼部署至現有的函數應用程式:

重要

部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。

  1. 在命令選擇區中,輸入並選取 [Azure Functions:部署至函數應用程式]

  2. 選取您剛才建立的函數應用程式。 當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。

  3. 部署完成時,選取 [檢視輸出] 以檢視建立和部署結果,包括您所建立的 Azure 資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。

    [檢視輸出] 視窗的螢幕擷取畫面。

使用 Maven 建立及部署您的應用程式

您可以藉由修改 pom.xml 檔案,使用 Maven 在部署期間建立彈性取用託管函數應用程式和必要的資源。

  1. 完成下列其中一篇快速入門文章的第一個部分,以建立 Java 程式碼專案:

  2. 在您的 Java 程式碼專案中,開啟 pom.xml 檔案並進行這些變更,以在彈性取用方案中建立函數應用程式:

    • <properties>.<azure.functions.maven.plugin.version> 的值變更為 1.34.0

    • azure-functions-maven-plugin<plugin>.<configuration> 區段中,新增或取消註解 <pricingTier> 元素,如下所示:

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (選擇性)在 Maven 部署中自訂彈性取用方案,方法是在 <plugin>.<configuration> 區段中納入下列元素:

    • <instanceSize> - 設定函數應用程式的執行個體記憶體大小。 預設值是 2048
    • <maximumInstances> - 為函數應用程式的最大執行個體計數設定最大值。
    • <alwaysReadyInstances> - 使用 HTTP 觸發程序群組 (<http>)、Durable Functions 群組 (<durable>) 和其他特定觸發程序 (<my_function>) 的子元素來設定隨時待命執行個體計數。 當您設定任何大於零的執行個體計數時,不論函式是否執行,都會收取這些執行個體的費用。 如需詳細資訊,請參閱帳單
  4. 您必須先使用 Azure CLI 登入您的 Azure 訂用帳戶,才能進行部署。

    az login
    

    az login 命令會將您登入 Azure 帳戶。

  5. 使用下列命令,將程式碼專案部署至彈性取用中的新函數應用程式。

    mvn azure-functions:deploy
    

    Maven 會使用 pom.xml 範本中的設定,在 Azure 中的彈性取用方案中建立函數應用程式,以及其他必要的資源。 如果這些資源已經存在,則程式碼會部署至函數應用程式,並覆寫任何現有的程式碼。

啟用虛擬網路整合

您可以在彈性取用方案中為您的應用程式啟用虛擬網路整合。 本節中的範例假設您已經在帳戶中建立具有子網路的虛擬網路。 您可以在建立應用程式時或稍後啟用虛擬網路整合。

重要

彈性取用方案目前不支援名稱包含底線 (_) 字元的子網路。

若要在建立應用程式時啟用虛擬網路:

您可以執行 az functionapp create 命令並納入 --vnet--subnet 參數,來啟用虛擬網路整合。

  1. 如果您尚未這麼做,請建立虛擬網路和子網路

  2. 完成建立彈性取用應用程式中的步驟 1-4,以建立應用程式所需的資源。

  3. 執行 az functionapp create 命令並納入 --vnet--subnet 參數,如下列範例所示:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    <VNET_RESOURCE_ID> 值是虛擬網路的資源識別碼,格式為 /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCER_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>。 您可以使用此命令來取得依 <RESOURCE_GROUP> 篩選的虛擬網路識別碼清單:az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id

如需如何使用虛擬網路整合在彈性取用中建立應用程式的端對端範例,請參閱下列資源:

若要修改或移除現有應用程式中的虛擬網路整合:

使用 az functionapp vnet-integration add 命令來啟用現有函數應用程式的虛擬網路整合:

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

使用 az functionapp vnet-integration remove 命令來停用應用程式中的虛擬網路整合:

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

使用 az functionapp vnet-integration list 命令來列出您應用程式的目前虛擬網路整合:

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

選擇子網路時,適用下列考量事項:

  • 您選擇的子網路無法用於其他用途,例如搭配私人端點或服務端點,或委派給任何其他主控方案或服務。
  • 您可以與在彈性取用方案中執行的多個應用程式共用相同的子網路。 由於網路資源會跨所有應用程式共用,因此一個函數應用程式可能會影響其他應用程式在相同子網路上的效能。
  • 在彈性取用方案中,單一函數應用程式可能會使用最多 40 個 IP 位址,即使應用程式規模超過 40 個執行個體也一樣。 雖然此經驗法則在估計您需要的子網路大小時很有用,但不會嚴格強制執行。

設定部署設定

在彈性取用方案中,包含您應用程式程式碼的部署套件會保留在 Azure Blob 儲存體容器中。 根據預設,部署會使用 Functions 執行階段用來維護應用程式的相同儲存體帳戶 (AzureWebJobsStorage) 和連接字串值。 連接字串會儲存在 DEPLOYMENT_STORAGE_CONNECTION_STRING 應用程式設定中。 不過,您可以改為將個別儲存體帳戶中的 Blob 容器指定為程式碼的部署來源。 您也可以變更用來存取容器的驗證方法。

自訂部署來源應符合下列準則:

  • 儲存體帳戶必須已經存在。
  • 要用於部署的容器也必須存在。
  • 當多個應用程式使用相同的儲存體帳戶時,每個應用程式都應該有自己的部署容器。 針對每個應用程式使用唯一的容器可防止覆寫部署套件,如果應用程式共用相同的容器,就會發生這種情況。

設定部署儲存體驗證時,請記住下列考慮:

  • 當您使用連接字串連接至部署儲存體帳戶時,包含連接字串的應用程式設定必須已經存在。
  • 當您利用使用者指派的受控識別時,提供的身分識別會連結到函數應用程式。 範圍設定為部署儲存體帳戶的 Storage Blob Data Contributor 角色也會指派給身分識別。
  • 當您使用系統指派的受控識別時,當您的應用程式中尚未存在有效的系統指派身分識別時,就會建立身分識別。 當系統指派的身分識別存在時,將範圍設定為部署儲存體帳戶的 Storage Blob Data Contributor 角色也會指派給身分識別。

若要在彈性取用方案中建立函數應用程式時設定部署編輯:

使用 az functionapp create 命令並提供自訂部署儲存體的其他選項:

參數 描述
--deployment-storage-name 部署儲存體帳戶的名稱。
--deployment-storage-container-name 包含應用程式部署套件之帳戶中的容器名稱。
--deployment-storage-auth-type 用於連線至部署儲存體帳戶的驗證類型。 已接受的值包括 StorageAccountConnectionStringUserAssignedIdentitySystemAssignedIdentity
--deployment-storage-auth-value 使用 StorageAccountConnectionString 時,此參數會設定為應用程式設定的名稱,其中包含用於部署儲存體帳戶的連接字串。 使用 UserAssignedIdentity 時,此參數會設定為您想要使用之身分識別的資源識別碼名稱。

此範例會使用個別的部署儲存體帳戶和使用者指派身份識別,在彈性取用方案中建立函數應用程式:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

您也可以修改現有應用程式的部署儲存體組態。

使用 az functionapp deployment config set 命令來修改部署儲存體群組態:

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

設定執行個體記憶體

當您建立應用程式時,可以明確設定彈性取用方案所使用的執行個體記憶體大小。 如需支援大小的詳細資訊,請參閱執行個體記憶體

若要設定與建立應用程式時預設不同的執行個體記憶體大小:

az functionapp create 命令中指定 --instance-memory 參數。 此範例會建立執行個體大小為 4096 的 C# 應用程式:

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0

您可以隨時變更應用程式所使用的執行個體記憶體大小設定。

此範例會使用 az functionapp scale config set 命令,將執行個體記憶體大小設定變更為 4,096 MB:

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096

設定隨時待命執行個體計數

您可以為個別函數調整群組或個別函數設定數個永遠就緒的執行個體,讓您的函數保持載入並準備好執行。 每個函數調整有三個特殊群組:

  • http - 應用程式中的所有 HTTP 觸發函式會一起調整成自己的執行個體。
  • durable - 應用程式中的所有 Durable 觸發函式 (Orchestration、Activity、Entity) 會一起調整成自己的執行個體。
  • blob - 應用程式中的所有 Blob (事件方格) 觸發函式會一起調整成自己的執行個體。

使用 httpdurableblob 作為名稱值組設定的名稱,以設定這些群組的一律就緒計數。 針對應用程式中所有其他函式,您必須使用 function:<FUNCTION_NAME>=n 格式,為每個個別函式設定一律就緒。

使用 --always-ready-instances 參數搭配 az functionapp create 命令來定義一或多個隨時待命執行個體指定。 本範例會將所有 HTTP 觸發函式的隨時待命執行個體計數設定為 5

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10

本範例會將所有 Durable 觸發程序函式的隨時待命執行個體計數設定為 3,並將名為 function5 的服務匯流排觸發函式的隨時待命執行個體計數設定為 2

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2

您也可以藉由新增或移除執行個體指定,或變更現有的執行個體指定計數,來修改現有應用程式上的隨時待命執行個體。

這個範例會使用 az functionapp scale config always-ready set 命令,將 HTTP 觸發程序群組的隨時待命執行個體計數變更為 10

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

若要移除隨時待命執行個體,請使用 az functionapp scale config always-ready delete 命令,如這個範例所示,從 HTTP 觸發程序群組和名為 hello_world 的函式中移除所有隨時待命執行個體:

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

設定 HTTP 並行限制

除非您設定特定限制,否則彈性取用方案應用程式的 HTTP 並行預設值會根據您的執行個體大小設定來決定。 如需詳細資訊,請參閱 HTTP 觸發程序並行

以下說明如何設定現有應用程式的 HTTP 並行限制:

使用 az functionapp scale config set 命令來設定應用程式的特定 HTTP 並行限制,不論執行個體大小為何。

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

這個範例會將 HTTP 觸發程序並行層級設定為 10。 在您特別設定 HTTP 並行值之後,即使應用程式執行個體大小設定有任何變更,仍會維護該值。

請檢視目前支援的區域

在預覽期間,您只能在所選區域中的彈性取用方案上執行。 若要檢視目前支援彈性取用方案的區域清單:

  1. 如果您尚未登入 Azure,請於此時登入:

    az login
    

    az login 命令會將您登入 Azure 帳戶。

  2. 使用 az functionapp list-flexconsumption-locations 命令來檢閱目前支援彈性取用的區域清單。

    az functionapp list-flexconsumption-locations --output table
    

當您在 Azure 入口網站中或使用 Visual Studio Code 建立應用程式時,目前不支援的區域會從區域清單中篩除。