本文說明如何建立裝載於 Azure Functions 中彈性取用方案中的函數應用程式。 它也會示範如何管理彈性取用方案託管應用程式的特定功能。
函式應用程式的資源是針對特定語言的。 請務必在文章開頭選擇您慣用的程式碼開發語言。
先決條件
具有有效訂用帳戶的 Azure 帳戶。 若您還沒有帳戶,可以免費建立帳戶。
Azure CLI:用來在 Azure 中建立和管理資源。 在本機電腦上使用 Azure CLI 時,請務必使用 2.60.0 版或更新版本。 您也可以使用 Azure Cloud Shell,其具有正確的 Azure CLI 版本。
- 對於 Go 應用程式,請使用Azure CLI版本
2.87.0或更高版本。 執行az version以確認已安裝的版本。
Visual Studio Code:用來建立及開發應用程式、建立 Azure 資源,以及將程式碼專案部署至 Azure。 使用 Visual Studio Code 時,請務必也安裝最新的 Azure Functions 延伸模組。 您也可以安裝 Azure Tools 延伸模組套件。
雖然不需要建立彈性取用方案應用程式,但您需要程式碼專案,才能部署並驗證新的函數應用程式。 完成下列其中一篇快速入門文章的第一個部分,您可以在其中建立具有 HTTP 觸發函式的程式碼專案:
若要在 Maven 部署期間於新的彈性取用方案中建立應用程式,您必須建立本機應用程式專案,然後更新專案的 pom.xml 檔案。 如需詳細資訊,請參閱使用 Maven 建立 Java 彈性取用應用程式
在您建立並執行本機專案之後,但在系統要求您建立 Azure 資源之前,請返回本文。 在下一節中,您會建立函數應用程式和其他 Azure 資源。
建立彈性取用應用程式
本節說明如何使用 Azure CLI、Azure 入口網站或 Visual Studio Code,在彈性取用方案中建立函數應用程式。 如需使用 Bicep/ARM 範本在彈性取用方案中建立應用程式的範例,請參閱彈性取用存放庫。
如果您選擇改用 Maven來建立和部署應用程式,則可以跳過本節。
若要支援函式程式碼,您需要建立三個資源:
- 資源群組,這是相關資源的邏輯容器。
- 儲存體帳戶,用來維護函數的狀態和其他資訊。
- 彈性取用方案中的函數應用程式,可提供執行函式程式碼的環境。 函數應用程式可對應至您的本機函式專案,並可讓您在彈性取用方案中,將函式分組為邏輯單位,以便管理、部署和共用資源。
如果您尚未登入 Azure,請於此時登入:
az loginaz login命令會將您登入 Azure 帳戶。az functionapp list-flexconsumption-locations使用 命令來檢閱目前依字母順序支援 Flex Consumption 的區域清單。az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
在前一步驟指令列出的目前支援區域中建立資源群組。
az group create --name <RESOURCE_GROUP> --location <REGION>在前一個命令中,請將
<RESOURCE_GROUP>替換為你的訂閱中唯一的值,並將<REGION>替換為目前支援的區域之一。 az group create 命令會建立資源群組。在您的資源群組和區域中建立一般用途的儲存體帳戶:
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指定一個通用用途的帳號,Azure Functions 可根據儲存帳號需求予以支援。 az storage account create 命令會建立儲存體帳戶。重要事項
儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。
在 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 17az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 22az 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.6az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4在此範例中,請將
<RESOURCE_GROUP>和<STORAGE_NAME>分別取代為資源群組以及您在上一個步驟中使用的帳戶名稱。 請使用適合您的全域唯一名稱來取代<APP_NAME>。<APP_NAME>也是函數應用程式的預設網域名稱伺服器 (DNS) 網域。az functionapp create命令會在 Azure 中建立函數應用程式。az functionapp create命令會建立在 Flex Consumption 方案中執行的函式應用程式。因為您建立了應用程式而不指定隨時待命執行個體,因此您的應用程式只會在主動執行函式時產生成本。 此命令也會在相同的資源群組中建立建立關聯的 Azure 應用程式 Insights 執行個體,您可將其用於監視函數應用程式和檢視記錄。 如需詳細資訊,請參閱監視 Azure Functions。
部署程式碼專案
針對部署,Flex Consumption 方案應用程式會使用 Blob 記憶體容器來裝載 .zip 套件檔案,其中包含您的專案程式代碼,以及應用程式執行所需的所有連結庫。 如需相關資訊,請參閱部署。
如果您選擇改用 Maven來建立和部署應用程式,則可以跳過本節。
您可以選擇使用各種工具來將專案程式碼部署至現有的函數應用程式:
Go 部署需要 Azure Functions Core Tools 版本 4.12 或更高版本。 執行 func --version 以確認已安裝的版本。
你可以使用 Azure CLI 將部署套件檔案上傳到 Azure 中某個函式應用程式的部署分享。 要完成此部署,您必須產生一個 .zip 套件檔案,當套件掛載到你的應用程式時即可執行。
此套件檔案必須包含專案執行所需的所有組建輸出檔和參考的連結庫。
對於函式庫數量眾多的專案,先打包專案檔案的根目錄並請求 遠端建置。
針對 Python 專案,請將專案檔案的根目錄打包,並一律要求 remote build。 使用遠端組建可防止在 Windows 上建置專案以部署於 Linux 時可能發生的潛在問題。
對於 Go 專案,使用 Core Tools 在本地建立一個現成的 .zip 套件,然後隨 Azure CLI 一起部署該套件。 不要要求為由 func pack 建立的 Go 套件進行遠端建置。
使用您慣用的開發工具,建置程式代碼專案。
建立包含組建目錄輸出的 .zip 檔案。 如需詳細資訊,請參閱 項目結構。
如有需要,請登入您的Azure帳號,並使用
az login指令選擇有效訂閱。az loginaz functionapp deployment source config-zip執行 命令以部署位於相對<FILE_PATH>的應用程式套件。az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
使用您慣用的開發工具,建置程式代碼專案。
建立包含組建目錄輸出的 .zip 檔案。 如需詳細資訊,請參閱 資料夾結構。
如有需要,請登入您的Azure帳號,並使用
az login指令選擇有效訂閱。az loginaz functionapp deployment source config-zip執行 命令以部署位於相對<FILE_PATH>的應用程式套件。az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
建立包含程式代碼專案根目錄的 .zip 檔案。 如需詳細資訊,請參閱 資料夾結構。
如有需要,請登入您的Azure帳號,並使用
az login指令選擇有效訂閱。az loginaz functionapp deployment source config-zip執行 命令以部署位於相對<FILE_PATH>的應用程式套件。az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
建立包含程式代碼專案根目錄的 .zip 檔案。 如需詳細資訊,請參閱 資料夾結構。
如有需要,請登入您的Azure帳號,並使用
az login指令選擇有效訂閱。az loginaz functionapp deployment source config-zip執行 命令以部署位於相對<FILE_PATH>的應用程式套件。az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote true請務必將 設定
--build-remote true為執行 遠程組建。
建立包含程式代碼專案根目錄的 .zip 檔案。 如需詳細資訊,請參閱 資料夾結構。
如有需要,請登入您的Azure帳號,並使用
az login指令選擇有效訂閱。az loginaz functionapp deployment source config-zip執行 命令以部署位於相對<FILE_PATH>的應用程式套件。az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote true請務必將 設定
--build-remote true為執行 遠程組建。
在你的根專案資料夾中,執行這個 Core Tools 指令來建置並打包你的 Go 專案:
func pack預設情況下,輸出 .zip 檔案名稱與你的專案資料夾相同。
如有需要,請登入您的 Azure 帳戶,並使用
az login命令選取使用中的訂閱。az login執行
az functionapp deployment source config-zip命令,以部署位於<ZIP_FILE_PATH>的套件。az functionapp deployment source config-zip --resource-group <RESOURCE_GROUP> --name <APP_NAME> --src <ZIP_FILE_PATH>
使用 Maven 建立並部署您的應用程式
你可以藉由修改 pom.xml 檔案,在部署期間使用 Maven 建立 Flex Consumption 託管函式應用程式及所需資源。
完成下列其中一篇快速入門文章的第一個部分,以建立 Java 程式碼專案:
在你的 Java 程式碼專案中,打開
pom.xml檔案,並進行以下修改,以建立你的 Flex Consumption 計畫中的函式應用程式:將
<properties>.<azure.functions.maven.plugin.version>的值變更為1.34.0。在
<plugin>.<configuration>的azure-functions-maven-plugin區段中,新增或取消註解<pricingTier>元素,如下所示:<pricingTier>Flex Consumption</pricingTier>
(選擇性)在 Maven 部署中自訂彈性取用方案,方法是在
<plugin>.<configuration>區段中納入下列元素:在部署之前,請使用 Azure CLI 登入你的 Azure 訂閱。
az loginaz login命令會將您登入 Azure 帳戶。使用下列命令,將程式碼專案部署至彈性取用中的新函數應用程式。
mvn azure-functions:deployMaven 利用
pom.xml範本中的設定,在 Azure 建立 Flex Consumption 計畫中的函數應用程式,並附上其他所需資源。 如果這些資源已經存在,程式碼會部署到你的函式應用程式,覆蓋任何現有程式碼。
建立並部署你的 Go 應用程式
Go 功能應用程式僅支援 Flex Consumption 方案。 要建立、執行並部署 Go 函式應用程式,請參考 命令列的「建立 Go 函式」。 關於 Go 專屬的專案結構與部署細節,請參閱 Go 開發者參考。
配置虛擬網路整合功能
您可以在建立應用程式時或之後,透過彈性消費方案啟用 虛擬網路整合 。 在啟用虛擬網路整合前,先檢視 Flex Consumption 的網路行為與子網需求。
彈性消費網路的運作方式
彈性使用量執行個體不會各自從整合應用程式的子網路中使用唯一的 IP 位址。 取而代之的是,一個由平台管理的網路閘道池(內部於 Flex Consumption 基礎設施)利用子網的 IP 位址來服務所有與該子網整合的應用程式。 此 IP 多工架構與 Premium 方案本質不同,後者每個實例使用子網中的一個 IP 位址。
每個應用程式 40 個 IP 的指引確保平台閘道池和其他基礎設施元件有足夠的 IP 位址,但這並非強制性的限制。 規劃子網路大小時請以此最低值為基準,但須了解實際的 IP 使用量通常會更低。 當與子網路整合的應用程式向外擴展時,平台會從共用閘道集區動態分配 IP。
子網大小與需求
為您的彈性消費應用程式選擇一個適當大小的子網路。 以下表格根據您的情境提供指引:
| 劇本 | 推薦的CIDR | 可用的 IP | 備註 |
|---|---|---|---|
| Single Flex 應用程式 | /27 |
二十七 | 單一應用程式的最小支援子網大小 |
| 一個子網路中有多個 Flex 應用程式 | /26 |
59 | 建議用於託管多個應用程式,並適用於大規模工作負載(1,000 個以上執行個體);可提供充足的閘道容量 |
子網路委派
- 將子網委派給
Microsoft.App/environments。 此委派與進階和專用方案不同,後兩者是使用Microsoft.Web/serverFarms。 -
在您的訂用帳戶中註冊
Microsoft.App資源提供者。
子網路使用限制
- 子網目前不能用於私有端點或服務端點,也無法委派給其他主機方案或服務。
- 你不能在 Azure 容器應用程式 環境和 Flex Consumption 應用程式之間共用同一個子網路。
子網路共享
- 您可以與在彈性取用方案中執行的多個應用程式共用相同的子網路。 然而,由於網路資源在所有應用程式間共享,一個函式應用程式可能會影響同一子網路中其他功能的效能。 在將多個應用程式壓縮到一個小型子網時,請考慮總需求。
- 子網路和應用程式必須在同一區域。
智慧財產分配與規劃
- Flex Consumption 應用程式不會為每個實例分配獨特的 IP 位址。 取而代之的是,一組網路閘道會使用來自子網的 IP 位址。 每個應用程式預留 40 個 IP 的指引有助於確保閘道池及其他基礎設施元件有足夠的 IP 位址,但實際使用量通常較低。
- 一個
/27子網路(27 個可用 IP 位址)對於支援最多 1,000 個執行個體的單一應用程式而言已足夠,因為採用了 IP 多路複用。 對於多個應用程式或大規模工作負載,請使用/26子網路來提供足夠的閘道容量。 - 當許多應用程式共用一個子網路,且有許多應用程式向外擴展並產生大量輸出流量時,輸出網路輸送量可能會成為瓶頸,而非耗盡 IP 位址。 在您規劃的生產規模下評估效能。
建立應用程式時啟用虛擬網路整合
本節範例假設您的帳戶已包含 虛擬網路與子網。
透過執行 az functionapp create 指令並包含 --vnet 和 --subnet 參數來啟用虛擬網路整合。 子網必須委派給 Microsoft.App/environments,且大小至少為 /27。 欲了解更多資訊,請參閱 子網大小與需求。
如果你還沒有虛擬網路和子網路,請建立它們。
完成建立彈性取用應用程式中的步驟 1-4,以建立應用程式所需的資源。
執行
az functionapp create命令並納入--vnet和--subnet參數,如下列範例所示:az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4 --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>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/<RESOURCE_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>。 您可以使用此命令來取得依<RESOURCE_GROUP>篩選的虛擬網路識別碼清單:az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id。
關於如何在 Flex Consumption 中建立虛擬網路整合應用程式的端對端範例,請參閱以下資源:
修改或移除虛擬網路整合
你可以新增、變更或移除現有應用程式的虛擬網路整合。
使用 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>
使用 Application Insights 排解網路問題
當 Flex Consumption 應用程式出現 DNS 故障、相依逾時或其他連線症狀時,Application Insights 是首選的參考點。 它捕捉了程式碼在執行時觀察到的內容:例外、外發相依呼叫,以及端對端的執行行為。 這有助於你區分應用程式層級的故障與底層的平台或網路問題。
以下 Application Insights 表格對於網路研究最為有用:
| Table | 它顯示的內容 | 使用目的 |
|---|---|---|
traces |
執行階段、主機ILogger,和縮放控制項記錄。 在 Flex Consumption 方案中,部署初始化詳細資料也會顯示於此。 |
主機啟動問題、冷啟動行為、部署失敗,以及透過主機或相依性日誌浮現的 DNS 故障。 |
requests |
每次 HTTP 叫用各有一個項目,包含耗時、結果碼和是否成功。 | 高延遲的 HTTP 觸發程序、4xx 和 5xx 錯誤,以及確認應用程式是否正在接收及處理要求。 |
exceptions |
執行階段和使用者例外,包括堆疊追蹤。 | DNS、Azure 儲存體、Azure Key Vault、module-not-found、timeout 及類似執行時失敗的根源調查。 |
dependencies |
輸出 HTTP、SQL、服務匯流排 及其他相依性呼叫,並附帶計時與失敗碼。 | 「在本機可運作,但在彈性使用量上失敗」症狀,以及由虛擬網路、DNS 或 NAT 行為所導致的輸出呼叫上 DNS、TLS 或驗證失敗。 |
customMetrics |
整合的指標如持續時間及成功或失敗計數。 | 趨勢分析、成功率突然下降,以及表示系統正在縮放或執行卡住的持續時間突增 |
FunctionAppLogs (資源記錄) |
傳送至 Azure 監視器 Logs 的平台層級函式應用程式記錄 | 當 Application Insights 資料缺失或不完整,或是控制平面與主機層級問題(如綁定失敗)時。 |
AzureActivity |
控制平面操作包括啟動、停止、同步觸發程序、刪除及列出金鑰。 | 審核設定變更並診斷觸發註冊問題(同步觸發失敗很常見)。 |
範例查詢
請在你的應用程式洞察資源的 日誌 體驗中使用這些起始查詢。 以函式應用程式的名稱取代 <APP_NAME>。
主機啟動或部署失敗(僅適用於 Flex Consumption):
traces
| where timestamp > ago(1d)
| where cloud_RoleName == "<APP_NAME>"
| where message contains "Starting" or message contains "host"
| project timestamp, message, customDimensions
| order by timestamp desc
HTTP 觸發問題、延遲或 5xx 錯誤:
requests
| where timestamp > ago(1h)
| where cloud_RoleName == "<APP_NAME>"
| project timestamp, name, resultCode, duration, success, url, operation_Name
| order by timestamp desc
依類型分組的常見例外,例如 DNS、金鑰保存庫、Storage,或語言執行時模組:
exceptions
| where timestamp > ago(1d)
| where cloud_RoleName == "<APP_NAME>"
| summarize count() by type, innermostMessage
| order by count_ desc
出站相依性失敗(DNS、TLS、認證、虛擬網路路由):
dependencies
| where timestamp > ago(2h)
| where cloud_RoleName == "<APP_NAME>"
| where success == false
| project timestamp, target, resultCode, duration, type, data
未觸發非 HTTP 的觸發程序 (例如佇列、Blob 或事件網格觸發程序)。 常見的原因是觸發程序註冊成功,但監聽程式未啟用;相關的例外會出現在縮放控制項追蹤中:
traces
| where timestamp > ago(2h)
| where message contains "listener" or message contains "trigger"
排除網路效能問題
當 Flex Consumption 應用程式與小於建議規模的子網路整合時,隨著應用程式擴展,您可能會遇到效能下降。 如果您將許多應用程式整合至相同的子網路,而且這些應用程式向外擴展並產生大量對外流量,也可能會發生這個問題。
子網規模不足的症狀
留意下列徵兆,這些徵兆表示限制因素是輸出容量,而非 IP 位址:
- 對相依性的輸出呼叫延遲增加
- 連線至外部服務時逾時
- 這些問題隨著應用程式擴展而增加,而非突然中斷
重要事項
擴展本身不會被子網大小所阻擋。 即使子網路規模不足,應用程式仍持續新增實例。 會出現效能下降,而非硬性的擴展上限。
監測與緩解
- 以輸出相依性延遲指標工具化 Application Insights:此指標為子網路規模不足提供預警信號。
- 在確定子網大小前,先在生產層級進行負載測試 ,以驗證子網大小是否能應付預期的工作負載。
- 使用 Azure 監視器 監視:前往 Azure 監視器 中的 虛擬網路>Subnet,透過 Azure Resource Graph 和 KQL 查詢來查看 IP 分配資料。
- 根據前一節的指引,請調整你的子網大小。 強烈建議至少使用
/27;若要執行多個應用程式,建議使用/26。
備註
使用至少 /27 的子網路,以確保平台具備足夠的穩定性。 明顯小於 /27 的子網可能會發生閘道建立問題,且不會顯示明確的錯誤訊息。
設定部署設定
在 Flex Consumption 計畫中,Azure Blob 儲存體 容器會存放包含你應用程式程式碼的部署套件。 預設情況下,部署會使用與 Functions 執行階段用來維護您的應用程式相同的儲存體帳戶(AzureWebJobsStorage)和連接字串。
DEPLOYMENT_STORAGE_CONNECTION_STRING 應用程式設定會儲存連線字串。 不過,你可以指定一個獨立儲存帳號中的 blob 容器作為程式碼的部署來源。 您也可以變更用來存取容器的驗證方法。
客製化的部署來源應符合以下標準:
- 儲存體帳戶必須已經存在。
- 要用於部署的容器也必須存在。
- 當多個應用程式使用同一個儲存帳號時,每個應用程式都應該有自己的部署容器。 為每個應用程式使用獨特的容器,可以防止部署套件被覆寫,這種情況在應用程式共用同一容器時會發生。
在配置部署儲存驗證時,請考慮以下事項:
- 作為安全最佳實務,從應用程式連接 Azure 儲存體 時,請使用受管理身份。 如需詳細資訊,請參閱連線。
- 當您使用連接字串連接至部署儲存體帳戶時,包含連接字串的應用程式設定必須已經存在。
- 當你使用使用者指派的管理身份時,你會將提供的身份連結到函式應用程式。 您也會將範圍限定於部署儲存體帳戶的
Storage Blob Data Contributor角色指派給該身分識別。 - 當你使用系統指派的管理身份時,你會在應用程式中尚未存在有效的系統指派身份時建立一個身份。 當系統指派的身分識別存在時,您會將範圍限定於部署儲存體帳戶的
Storage Blob Data Contributor角色指派給該身分識別。
若要在彈性取用方案中建立函數應用程式時設定部署編輯:
使用az functionapp create命令並提供這些自訂部署儲存的額外選項:
| 參數 | 描述 |
|---|---|
--deployment-storage-name |
部署儲存體帳戶的名稱。 |
--deployment-storage-container-name |
包含應用程式部署套件之帳戶中的容器名稱。 |
--deployment-storage-auth-type |
用於連線至部署儲存體帳戶的驗證類型。 已接受的值包括 StorageAccountConnectionString、UserAssignedIdentity 和 SystemAssignedIdentity。 |
--deployment-storage-auth-value |
使用 StorageAccountConnectionString 時,請將此參數設為包含部署儲存體帳戶連接字串的應用程式設定名稱。 當你設定 UserAssignedIdentity時,將這個參數設為你想使用的身份的資源 ID 名稱。 |
此範例會使用個別的部署儲存體帳戶和使用者指派身份識別,在彈性取用方案中建立函數應用程式:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCOUNT_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_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>
設定執行個體記憶體
建立應用程式時,請為你的 Flex Consumption 計畫設定實例記憶體大小。 如需支援大小的詳細資訊,請參閱執行個體大小。
若要設定與建立應用程式時預設不同的執行個體記憶體大小:
在 --instance-memory 命令中指定 az functionapp create 參數。 此範例會建立執行個體大小為 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 使用 命令,將實例記憶體大小設定變更為 512 MB:
az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 512
設定隨時待命執行個體計數
為每個函式縮放群組或個別函式設定特定數量的隨時就緒執行個體,讓函式保持載入狀態並隨時可執行。 如同每個函式縮放的情況,會有三個特殊群組:
-
http- 應用程式中所有由 HTTP 觸發的函式,將共同擴展至各自的執行個體。 -
durable- 應用程式中所有由 Durable 觸發的函式 (協調流程、活動、實體) 會共同擴展至各自的執行個體。 -
blob- 應用程式中所有由 Blob (事件網格) 觸發的函式會共同擴展至各自的執行個體。
使用 http、durable 或 blob 作為名稱-值組設置的名稱,以配置這些群組的常備數量。 對於應用程式中其他所有功能,請使用 function:<FUNCTION_NAME>=n格式 配置「Always Ready」來針對每個個別功能。
若要定義一或多個永遠就緒的實例指定,請使用 --always-ready-instances 參數搭配 az functionapp create 命令。 本範例會將所有 HTTP 觸發函式的隨時待命執行個體計數設定為 10:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime go --runtime-version 1.0 --functions-version 4 --flexconsumption-location <REGION> --always-ready-instances http=10
本範例會將所有 Durable 觸發程序函式的隨時待命執行個體計數設定為 3,並將名為 2 的服務匯流排觸發函式的隨時待命執行個體計數設定為 function5:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2
此範例將名為 2 的 服務匯流排 觸發函式之永遠就緒執行個體數目設為 function5:
az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --runtime go --runtime-version 1.0 --functions-version 4 --flexconsumption-location <REGION> --always-ready-instances 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 並行限制
如果你沒有設定具體限制,系統會根據你的實例大小設定,為 Flex Consumption 方案應用程式決定 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 並發值後,應用程式會維持該值,儘管你的應用程式的實例大小設定有變動。
設定網站更新策略
彈性取用方案唯一支援兩種不同的網站更新策略,以控制函式應用程式處理程式碼部署和設定變更的方式。 根據預設,彈性取用方案應用程式會使用策略 Recreate ,在部署期間終止目前執行的函式。 若要啟用零停機時間部署,您可以改為設定策略 RollingUpdate 。 如需詳細資訊,請參閱 Flex Consumption 中的網站更新策略。
備註
網站更新策略設定目前處於公開預覽狀態,且只能透過 Bicep 或 ARM 範本取得。 你無法透過使用 Azure CLI、Azure 入口網站或 Visual Studio Code 來設定此設定。
Azure CLI 目前不支援網站更新策略設定。 使用 Bicep 或 ARM 範本,如 配置網站更新策略中所述。
配置端對端TLS加密
端對端(E2E)TLS 加密會加密 Azure 平台前端與執行你功能的工作者之間的流量。
透過在 ARM 或 Bicep 範本中將 endToEndEncryptionEnabled 網站屬性設為 true,即可啟用端對端 TLS 加密。
欲了解更多關於端對端 TLS 加密如何保護流量的資訊,請參閱 Azure App 服務 中的端對端 TLS 加密。
備註
端對端 TLS 加密與後量子金鑰交換保護不同的連接區段。
endToEndEncryptionEnabled 加密平台前端與功能工作者之間的流量;該連線會分別協商 TLS。 後量子金鑰交換適用於相容用戶端與前端之間的金鑰建立。 這個設定不會啟用、停用或要求後量子協商。 詳情請參閱 Azure App 服務 中的 Post-quantum hybrid key exchange。
設定網站範圍內憑證
Flex Consumption 引入了站台範圍限定憑證,這是一種新模型,在此模型中,TLS/SSL 憑證會限定於您的個別函式應用程式,而不是在同一個 Webspace 中由多個應用程式共用。 下表顯示了支援的憑證類型,以及每種憑證如何被加入你的函式應用程式:
| 憑證類型 | 如何添加 | 計入 |
|---|---|---|
| App Service 管理憑證 | 在入口網站建立自訂網域 | 私人憑證限制 |
| App Service 憑證 | 透過 Azure 購買,然後匯入 | 私人憑證限制 |
| 憑證匯入自 金鑰保存庫 | 從 Azure Key Vault 匯入 | 私人憑證限制 |
| 上傳的私人憑證(.pfx) | 以 PFX 檔案上傳 | 私人憑證限制 |
| 上傳的公開憑證(.cer) | 以 CER 檔案上傳 | 公用憑證限制 |
備註
後量子 TLS 金鑰交換不需要新的或後量子的憑證。 現有的證書要求仍然適用。 詳情請參閱 Azure App 服務 中的後量子混合式金鑰交換。
網站範圍內憑證的考量事項
- 在這個功能推出之前建立的現有應用程式目前沒有憑證的遷移路徑。 若要使用網站範圍內憑證,請建立新的彈性使用量函式應用程式。
- Azure CLI 目前尚未提供管理站台範圍憑證的支援。 同時,請使用 Azure portal 或 ARM/Bicep 範本來管理憑證。
- 每個應用程式最多支援三個私人憑證和三個公開憑證。
- 私有憑證必須匯出為 一個受密碼保護的 PFX 檔案 ,包含所有中間憑證及憑證鏈中的根憑證。
- 當以 PFX 格式上傳時,支援橢圓曲線密碼學(ECC)憑證。
- 因為 Flex Consumption 在 Linux 上運行,你的程式碼必須從檔案路徑載入憑證,而非從 Windows 憑證庫。 首先,按照「 讓憑證可存取」 的步驟,將憑證載入執行環境。 接著,關於如何從應用程式碼讀取憑證檔案的指引,請參考 Load certificates in Linux/Windows containers。
新增憑證
你可以根據憑證類型,有幾種方式為你的應用程式新增憑證。 直接在入口網站新增免費的託管和 Azure 憑證。
請選擇以下其中一個分頁,了解如何新增受管理、私人(.pfx)、公開(.cer)或金鑰保存庫管理憑證。
要建立並綁定自訂網域的免費受管憑證:
在 Azure 入口網站中,打開您的函式應用程式。
在左側選單中,展開 設定 並選擇 自訂網域。
選取 [新增自訂網域]。
在 TLS/SSL 憑證中,選擇 App Service Managed Certificate。
在 TLS/SSL 類型中,選擇 SNI SSL。
完成網域驗證後,選擇 新增。
管理憑證會自動建立並綁定到自訂網域。 證書發出可能需要長達10分鐘。
讓憑證對你的程式碼可存取
新增憑證後,你必須明確讓它能被你的函式碼存取。
在 Azure 入口網站中,打開您的函式應用程式。
在左側選單中,展開 設定 並選擇 憑證。
選取 [攜帶您自己的憑證][pfx] 或 [公鑰憑證][.cer]。
在你想讓應用程式存取的憑證旁邊選擇 ... (省略號),然後選擇 讓應用程式代碼變得無障礙。
當你啟用 Accessible to app code 時,平台會將憑證以檔案形式載入所有實例的執行環境。
憑證檔案以指紋命名並置於以下目錄中:
| 憑證類型 | 路徑 |
|---|---|
| 公開證書(.cer) | /var/ssl/certs |
| 私人憑證(.pfx) | /var/ssl/private |
續約或更新憑證
平台會自動續期免費的託管憑證。 對於其他所有憑證,如何更新即將到期的憑證取決於憑證來源:
憑證從 金鑰保存庫 匯入:當您在 金鑰保存庫 續期憑證時,平台背景作業會在 24 小時內自動將更新後的憑證同步到你的函式應用程式。 新的憑證版本可載入所有實例,無需手動步驟。
上傳憑證:先上傳新憑證,然後讓它能直接存取你的應用程式碼。 如果您的程式碼是透過指紋參考憑證,請在程式碼或應用程式設定中更新所有指紋參考。
請檢視目前支援的區域
欲查看目前支援彈性消費方案的地區列表,請參閱:
如果您尚未登入 Azure,請於此時登入:
az loginaz login命令會將您登入 Azure 帳戶。az functionapp list-flexconsumption-locations使用 命令來檢閱目前依字母順序支援 Flex Consumption 的區域清單。az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
當你在 Azure 入口網站 或使用 Visual Studio Code 建立應用程式時,區域清單會排除目前不支援的區域。
在 Azure 中監視您的應用程式
Azure 監視器提供這些不同的計量集,可協助您進一步瞭解函式應用程式在 Azure 中的執行方式:
- 平臺計量:提供基礎結構層級深入解析
- 應用洞察:提供程式碼層級的洞察,包括追蹤與錯誤日誌。
如果你 在應用程式中啟用 Application Insights,你可以:
- 追蹤詳細的運行時間和相依性
- 監視個別函式效能
- 分析失敗和例外狀況
- 透過自訂查詢將平台指標與應用程式行為相關聯
如需詳細資訊,請參閱監視 Azure Functions。
支援的計量
執行此腳本即可查看目前應用程式可用的所有平台指標:
appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
az monitor metrics list-definitions --resource $appId --query "[].{Name:name.localizedValue,Value:name.value}" -o table
在這個例子中,將<RESOURCE_GROUP>和<APP_NAME>替換成你的資源群組和函式應用程式名稱。 此文稿會取得完整的應用程式識別碼,並傳回數據表中可用的平臺計量。
檢視計量
您可以在 Azure 入口網站或使用 Azure CLI 來檢閱目前的計量。
在 Azure 入口網站中,您也可以建立計量警示,並將圖表和其他報表釘選到入口網站中的儀錶板。
使用此文稿為您的應用程式產生目前計量的報告:
appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
echo -e "\nAlways-ready and on-demand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionCount" --interval PT1H --output table
echo -e "\nExecution units (MB-ms) in always-ready and on-demand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionUnits" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionUnits" --interval PT1H --output table
echo -e "\nAlways-ready resource utilization..."
az monitor metrics list --resource $appId --metric "AlwaysReadyUnits" --interval PT1H --output table
echo -e "\nMemory utilization..."
az monitor metrics list --resource $appId --metric "AverageMemoryWorkingSet" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "MemoryWorkingSet" --interval PT1H --output table
echo -e "\nInstance count and CPU utilization..."
az monitor metrics list --resource $appId --metric "InstanceCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "CpuPercentage" --interval PT1H --output table
若要深入瞭解 Azure Functions 的計量,請參閱 監視 Azure Functions。
檢視記錄
當你將應用程式連接到 Application Insights,就能更好地分析應用程式效能並在執行過程中排除問題。 在您應用程式的 Application Insights 資源中:
- 使用 效能 來分析回應時間與相依性。
- 使用 失敗 來識別遷移後發生的任何錯誤。
- 在 Logs 中建立自訂查詢來分析函數行為。
例如,請使用此查詢來比較各實例的成功率:
使用此查詢可依執行個體比較成功率:
requests
| where timestamp > ago(7d)
| summarize successCount=countif(success == true), failureCount=countif(success == false) by bin(timestamp, 1h), cloud_RoleName
| render timechart
請使用此查詢分析正在處理您函式的實例數量:
let _startTime = ago(20m); //Adjust start time as needed
let _endTime = now(); //Adjust end time as needed
let bins = 1s; //Adjust bin as needed - this will give per second results
requests
| where operation_Name == 'EventHubsTrigger' //Replace with the name of the function in the function app that you are analyzing
| where timestamp between(_startTime .. _endTime)
| make-series dcount(cloud_RoleInstance) default=0 on timestamp from _startTime to _endTime step bins
| render columnchart
檢視成本
因為您可以調整應用程式以調整效能與營運成本,因此請務必在 Flex 使用量方案中追蹤與執行應用程式相關的成本。
若要檢視目前的成本:
在 Azure 入口網站的函式應用程式頁面中,選取資源群組連結。
在資源群組頁面中,選取 [成本管理>成本分析]。
檢閱應用程式本身目前的成本和成本軌跡。
您可以選擇性地選取 [成本管理>警示 ],然後選取 [+ 新增 ] 以建立應用程式的新警示。
微調您的應用程式
Flex Consumption 方案提供數個您可以微調的設定,以精簡應用程式的效能。 實際效能和成本可能會根據您的應用程式特定工作負載模式和設定而有所不同。 例如,較高的 記憶體實例大小 可以改善耗用大量記憶體作業的效能,但每個使用期間的成本較高。
以下是您可以調整效能與成本的一些調整:
- 調整並行設定 ,以將每個實例的輸送量最大化。
- 為您的工作負載選擇適當的記憶體大小 。 較高的記憶體大小成本較高,但可以改善效能。