本文介绍如何在 Azure Functions 中创建托管在 Flex Consumption 计划 中的函数应用。 还演示了如何管理 Flex Consumption 计划托管应用的某些功能。
函数应用资源特定于语言。 确保在文章开始处选择喜欢的代码开发语言。
具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户。
Azure CLI:用于在 Azure 中创建和管理资源。 在本地计算机上使用 Azure CLI 时,请确保使用版本 2.60.0 或更高版本。
Visual Studio Code:用于创建和开发应用、创建 Azure 资源并将代码项目部署到 Azure。 使用 Visual Studio Code 时,请确保还要安装最新的 Azure Functions 扩展。 还可以安装 Azure Tools 扩展包。
虽然无需创建 Flex Consumption 计划应用,但需要代码项目才可部署到并验证新的函数应用。 完成以下快速入门文章的第一部分,其中使用 HTTP 触发的函数创建代码项目:
在创建并运行本地项目之后,但在被要求创建 Azure 资源之前,请回到本文。 在下一部分中创建函数应用和其他 Azure 资源。
本部分介绍如何使用 Azure CLI、Azure 门户或 Visual Studio Code 在 Flex Consumption 计划中创建函数应用。 有关使用 Bicep/ARM 模板在 Flex Consumption 计划中创建应用的示例,请参阅 Flex Consumption 存储库。
若要支持函数代码,需要创建三个资源:
- 一个资源组:相关资源的逻辑容器。
- 一个存储帐户:用于维护有关函数的状态和其他信息。
- Flex Consumption 计划中的一个函数应用,它提供用于执行函数代码的环境。 函数应用映射到本地函数项目,可让你将函数分组为逻辑单元,以便更轻松地管理、部署和共享 Flex Consumption 计划中的资源。
请登录到 Azure(如果尚未这样做):
az login
使用 az login
命令登录到 Azure 帐户。
使用 az functionapp list-flexconsumption-locations
命令查看当前支持 Flex Consumption 的区域列表。
az functionapp list-flexconsumption-locations --output 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
指定 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
在 Flex Consumption 计划中运行时,当前不支持进程内运行的 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 中创建函数应用。
此命令创建一个在 Flex Consumption 计划中运行的函数应用。
由于在未指定始终就绪实例时创建了应用,因此应用仅在主动执行函数时产生费用。 该命令还会在同一资源组中创建关联的 Azure Application Insights 实例,可以使用它来监视函数应用和查看日志。 有关详细信息,请参阅监视 Azure Functions。
在 Azure 门户,从菜单或“主页”页面中,选择“创建资源”。
选择“开始”,然后在“函数应用”下“创建”。
在“选择托管选项”下,选择 Flex Consumption>“选择”。
在“基本信息”页面上,按照下列所述使用函数应用设置:
设置 |
建议值 |
描述 |
订阅 |
你的订阅 |
在其中创建新函数应用的订阅。 |
资源组 |
myResourceGroup |
将在其中创建函数应用的新资源组的名称。 |
函数应用名称 |
全局唯一名称 |
用于标识新 Function App 的名称。 有效字符为 a-z (不区分大小写)、0-9 和 - 。 |
区域 |
首选区域 |
选择与你靠近或者与函数可以访问的其他服务靠近的区域。 不受支持的区域不显示。 有关详细信息,请参阅查看当前支持的区域。 |
运行时堆栈 |
首选语言 |
选择受支持的语言运行时堆栈之一。 使用 Visual Studio Code 网页版进行门户内编辑目前仅适用于Node.js、PowerShell 和 Python 应用。 C# 类库和 Java 函数必须在本地开发。 |
版本 |
语言版本 |
选择支持的语言运行时堆栈版本。 |
实例大小 |
默认 |
确定为应用的每个实例分配的实例内存量。 有关详细信息,请参阅实例内存。 |
接受剩余选项卡中的默认选项,包括在“存储”选项卡上创建新存储帐户和在“监视”选项卡上创建新的 Application Insights 实例的默认行为。还可选择使用现有的存储帐户或 Application Insights 实例。
选择“查看 + 创建”以审阅所选的应用配置,然后选择“创建”来预配和部署函数应用。
选择门户右上角的“通知”图标,留意是否显示了“部署成功”消息。
选择“转到资源”,查看新的函数应用。 还可选择“固定到仪表板”。 固定可以更轻松地从仪表板返回此函数应用资源。
按 F1,然后在命令托盘中输入 Azure Functions: Create function app in Azure...(Advanced)。
如果你未登录,系统会提示“登录到 Azure”。 也可以创建一个 Azure 帐户。 从浏览器登录后,返回到 Visual Studio Code。
按提示操作并提供以下信息:
提示 |
选择 |
输入新的函数应用的全局唯一名称。 |
键入用于标识新函数应用的全局唯一名称,然后按 Enter。 函数应用名称的有效字符包括 a-z 、0-9 和 - 。 |
选择托管计划。 |
选择“弹性消耗”。 |
选择运行时堆栈。 |
选择受支持的语言堆栈版本之一。 |
选择新资源的资源组。 |
选择“+ 创建新资源组”,键入资源组名称(例如 ),然后按 Enter。 也可以选择现有的资源组。 |
选择新资源的位置。 |
选择靠近你或靠近函数访问的其他服务的受支持区域中的位置。 不受支持的区域不显示。 有关详细信息,请参阅查看当前支持的区域。 |
选择一个存储帐户。 |
选择“创建新存储帐户”,根据提示提供函数应用使用的新存储帐户的全局唯一名称,然后按 Enter。 存储帐户名称长度必须为 3 到 24 个字符,只能包含数字和小写字母。 也可以选择现有的帐户。 |
为你的应用选择 Application Insights 资源。 |
选择“创建新的 Application Insights 资源”,然后根据提示提供用于存储函数运行时数据的实例的名称。 |
创建函数应用后会显示一条通知。 在此通知中选择“查看输出”以查看创建和部署结果,其中包括你创建的 Azure 资源。
对于部署,Flex Consumption 计划应用使用 Blob 存储容器托管 .zip 包文件,其中包含项目代码以及运行应用所需的所有库。 有关更多信息,请参阅部署
可以选择使用各种工具将项目代码部署到现有函数应用:
可以使用 Azure CLI 将部署包文件上传到 Azure 中函数应用的部署共享。 为此,必须生成一个 .zip 包文件,该文件在将包载入到应用时可以运行。
此包文件必须包含项目运行所需的所有生成输出文件和引用的库。
对于具有大量库的项目,应打包项目文件的根目录并请求 远程生成。
对于 Python 项目,应打包项目文件的根目录,并始终请求 远程生成。 使用远程生成可防止在 Windows 上生成要在 Linux 上部署的项目时可能出现的潜在问题。
使用首选的开发工具生成代码项目。
创建包含生成目录输出的 .zip 文件。 有关详细信息,请参阅 项目结构。
如果需要,请登录到 Azure 帐户,并使用 az login
命令选择活动订阅。
az login
az 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 login
az 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 login
az 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 login
az 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 login
az 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
以执行远程构建。
Azure Functions 具有自定义 GitHub 操作和自定义 Azure Pipelines 任务来支持持续部署。 请参阅以下指南,将这些工具合并到 CI/CD 管道中:
重要
部署到现有函数应用将始终覆盖该应用在 Azure 中的内容。
在活动栏中选择 Azure 图标,然后在“工作区”区域中选择你的项目文件夹,并选择“部署...”按钮。
选择“部署到函数应用...”,然后选择刚刚创建的函数应用,选择“部署”。
在部署完成后,选择“查看输出”以查看创建和部署结果,其中包括你创建的 Azure 资源。 如果错过了通知,请选择右下角的响铃图标以再次查看。
可以通过修改 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>
(可选)通过在 <plugin>.<configuration>
部分中包括以下元素,在 Maven 部署中自定义 Flex Consumption 计划。
-
<instanceSize>
- 设置函数应用的实例内存大小。 默认值为 2048
。
-
<maximumInstances>
- 设置函数应用的最大实例计数的最大值。
-
<alwaysReadyInstances>
- 使用 HTTP 触发器组 ()、Durable Functions 组 (<http>
) 和其他特定触发器 (<durable>
) 的子元素设置<my_function>
。 设置任何大于零的实例计数时,无论函数是否执行,都会对这些实例收费。 有关详细信息,请参阅计费。
在部署之前,请使用 Azure CLI 登录到 Azure 订阅。
az login
使用 az login
命令登录到 Azure 帐户。
使用以下命令将代码项目部署到 Flex Consumption 中的新函数应用。
mvn azure-functions:deploy
Maven 使用 pom.xml 模板中的设置在 Azure 中的 Flex Consumption 计划中创建函数应用,以及其他所需的资源。 如果这些资源已存在,代码将部署到函数应用,覆盖任何现有代码。
可以在 Flex Consumption 计划中为应用启用虚拟网络集成。 本部分中的示例假定你已 创建帐户中具有子网的虚拟网络 。 可以在创建应用时或以后启用虚拟网络集成。
重要
Flex Consumption 计划目前不支持名称包含下划线 (_
) 字符的子网。
若要在创建应用时启用虚拟网络,请执行以下操作:
可以通过运行 az functionapp create
命令并包括 --vnet
和 --subnet
参数来启用虚拟网络集成。
创建虚拟网络和子网(如果尚未创建)。
完成创建 Flex Consumption 应用中的的步骤 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 <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
<VNET_RESOURCE_ID>
值为虚拟网络的资源 ID,格式为:/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>
。 可以使用此命令获取虚拟网络 ID 列表,按 <RESOURCE_GROUP>
: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id
进行筛选。
使用以下步骤创建包含虚拟网络集成和相关 Azure 资源的函数应用。
在 Azure 门户,从菜单或“主页”页面中,选择“创建资源”。
选择“开始”,然后在“函数应用”下“创建”。
在“选择托管选项”下,选择 Flex Consumption>“选择”。
在“基本信息”页面上,按照下列所述使用函数应用设置:
设置 |
建议值 |
描述 |
订阅 |
你的订阅 |
在其中创建新函数应用的订阅。 |
资源组 |
myResourceGroup |
将在其中创建函数应用的新资源组的名称。 |
函数应用名称 |
全局唯一名称 |
用于标识新 Function App 的名称。 有效字符为 a-z (不区分大小写)、0-9 和 - 。 |
区域 |
首选区域 |
选择与你靠近或者与函数可以访问的其他服务靠近的区域。 不受支持的区域不显示。 有关详细信息,请参阅查看当前支持的区域。 |
运行时堆栈 |
首选语言 |
选择受支持的语言运行时堆栈之一。 使用 Visual Studio Code 网页版进行门户内编辑目前仅适用于Node.js、PowerShell 和 Python 应用。 C# 类库和 Java 函数必须在本地开发。 |
版本 |
语言版本 |
选择支持的语言运行时堆栈版本。 |
实例大小 |
默认 |
确定为应用的每个实例分配的实例内存量。 有关详细信息,请参阅实例内存。 |
接受剩余选项卡中的默认选项,包括在“存储”选项卡上创建新存储帐户和在“监视”选项卡上创建新的 Application Insights 实例的默认行为。还可选择使用现有的存储帐户或 Application Insights 实例。
在“网络”选项卡中,将“启用公共访问”设为“关闭”,并将“启用网络注入”设为“打开”。
对于“虚拟网络”,选择或创建与新应用处于同一区域的虚拟网络。
将“启用 VNet 集成”设为“打开”并选择或创建子网。
选择“查看 + 创建”以查看所选的应用配置,然后选择“创建”以使用虚拟网络预配和部署函数应用。
选择门户右上角的“通知”图标,留意是否显示了“部署成功”消息。
选择“转到资源”,查看新的函数应用。 还可选择“固定到仪表板”。 固定可以更轻松地从仪表板返回此函数应用资源。
使用 Visual Studio Code 创建应用时,当前无法启用虚拟网络。
有关如何使用虚拟网络集成在 Flex Consumption 中创建应用的端到端示例,请参阅以下资源:
若要在现有应用中修改或删除虚拟网络集成,请执行以下操作:
可以将现有应用与门户中的现有虚拟网络和子网集成。
在 Azure 门户的函数应用页中,展开左侧菜单中的“设置”,然后选择“网络”。
在“出站流量配置”下,选择“未配置”。
在“虚拟网络集成”页中,选择“添加虚拟网络集成”。
选择现有的虚拟网络、子网,然后选择“连接”。
目前无法在 Visual Studio Code 中配置虚拟网络。
选择子网时,以下注意事项适用:
- 选择的子网不能用于其他目的,例如专用终结点或服务终结点,或者委托给任何其他托管计划或服务。
- 可以在 Flex Consumption 计划中运行的多个应用共享同一子网。 由于网络资源在所有应用中共享,因此一个函数应用可能会影响同一子网上其他人的性能。
- 在 Flex Consumption 计划中,单个函数应用可能最多使用 40 个 IP 地址,即使应用扩展到超过 40 个实例也是如此。 虽然此经验法则有助于估算所需的子网大小,但并未严格执行。
在 Flex 消耗计划中,包含应用代码的部署包保留在 Azure Blob 存储容器中。 默认情况下,部署使用 Functions 运行时用来维护应用的相同存储帐户 (AzureWebJobsStorage
) 和连接字符串值。 连接字符串存储在 DEPLOYMENT_STORAGE_CONNECTION_STRING
应用程序设置中。 但可以改为将单独的存储帐户中的 Blob 容器指定为代码的部署源。 还可以更改用于访问容器的身份验证方法。
自定义部署源应满足以下条件:
- 存储帐户必须已存在。
- 用于部署的容器也必须存在。
- 当多个应用使用相同的存储帐户时,每个应用都应有自己的部署容器。 对每个应用使用唯一容器可防止覆盖部署包,如果应用共享同一容器,则会发生此情况。
配置部署存储身份验证时,请记住以下注意事项:
- 最佳做法是,从应用连接到 Azure 存储时,应使用托管标识。 有关详细信息,请参阅连接。
- 使用连接字符串连接到部署存储帐户时,包含连接字符串的应用程序设置必须已存在。
- 使用用户分配的托管标识时,提供的标识会链接到函数应用。 范围限定为部署存储帐户的
Storage Blob Data Contributor
角色也会分配给该标识。
- 使用系统分配的托管标识时,会在应用中不存在有效的系统分配标识时创建一个标识。 当存在系统分配的标识时,范围限定为部署存储帐户的
Storage Blob Data Contributor
角色也会分配给该标识。
在 Flex 消耗计划中创建函数应用时配置部署设置:
使用 az functionapp create
命令并提供以下额外选项以自定义部署存储空间:
参数 |
描述 |
--deployment-storage-name |
部署存储帐户的名称。 |
--deployment-storage-container-name |
帐户中要包含应用的部署包的容器的名称。 |
--deployment-storage-auth-type |
用于连接到部署存储帐户的身份验证类型。 接受的值包括 StorageAccountConnectionString 、UserAssignedIdentity 和 SystemAssignedIdentity 。 |
--deployment-storage-auth-value |
使用 StorageAccountConnectionString 时,此参数设置为包含部署存储帐户连接字符串的应用程序设置名称。 设置 UserAssignedIdentity 时,此参数设置为要使用的标识的资源 ID 的名称。 |
此示例使用单独的部署存储帐户和用户分配的标识在 Flex 消耗计划中创建函数应用:
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_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>
在 Azure 门户中创建应用时,当前无法配置部署存储。 若要在创建应用期间配置部署存储,请改用 Azure CLI 创建应用。
可以使用门户修改现有应用的部署设置,如下一部分详述。
使用 Visual Studio Code 在 Azure 中创建应用时,当前无法配置部署存储。
还可以修改现有应用的部署存储配置。
使用 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>
在 Azure 门户的函数应用页中,展开左侧菜单中的“设置”,然后选择“部署设置”。
在应用程序包位置下,选择现有存储帐户,然后选择帐户中的现有空容器。
在“存储身份验证”下,选择首选身份验证类型
选择“保存”以更新应用。
目前无法使用 Visual Studio Code 在 Azure 中为应用配置部署存储。
创建应用时,可以显式设置 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
使用 Visual Studio Code 创建应用时,当前无法控制实例内存大小。 使用默认大小。
可随时更改应用使用的实例内存大小设置。
此示例使用 az functionapp scale config set
命令将实例内存大小设置更改为 512 MB:
az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 512
在 Azure 门户的函数应用页中,展开左侧菜单中的“设置”,然后选择“缩放和并发”。
选择实例内存选项,然后选择“保存”以更新应用。
当前无法使用 Visual Studio Code 更改应用的实例内存大小设置。
可以为每个函数缩放组或各个单独函数设置特定数量的始终就绪实例,使函数保持加载状态并随时可以执行。 有三个特殊组,就像每个函数缩放一样:
-
http
- 应用中所有 HTTP 触发的函数一起扩展到自己的实例。
-
durable
- 应用中所有持久触发的函数(业务流程、活动、实体)一起扩展到自己的实例。
-
blob
- 应用中所有 blob(事件网格)触发的函数一起扩展到自己的实例。
将 http
、durable
或 blob
用作名称值对设置的名称来配置这些组的始终就绪计数。 对于应用中的所有其他函数,需要使用 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
,并将名为 2
的服务总线触发函数的始终就绪实例计数设置为 function5
:
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
在 Azure 门户中创建应用时,当前无法定义始终就绪的实例。 若要在创建应用期间定义始终就绪的实例,请使用 Azure CLI 创建应用。
可以使用门户修改现有应用上的始终就绪实例,如下一部分中所述。
使用 Visual Studio Code 在 Azure 中创建应用时,当前无法定义始终就绪的实例。
还可以通过添加或删除实例指定或更改现有实例指定计数来修改现有应用上的始终就绪实例。
此示例使用 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
在 Azure 门户的函数应用页中,展开左侧菜单中的“设置”,然后选择“缩放和并发”。
在“始终就绪实例最小值”下,在“触发器”http
中键入 blob
、durable
、function:<FUNCTION_NAME>=n
或使用 格式的特定函数名称,并键入始终就绪实例数。
选择“保存”以更新应用。
目前无法使用 Visual Studio Code 修改始终就绪的实例。
除非设置了特定限制,否则 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 并发值后,即使应用实例大小设置发生任何更改,该值仍会保持。
在 Azure 门户的函数应用页中,展开左侧菜单中的“设置”,然后选择“缩放和并发”。
在“每个实例并发”下选择“手动分配”并键入特定限制。
选择“保存”以更新应用。
当前无法使用 Visual Studio Code 设置 HTTP 并发限制。
若要查看当前支持 Flex Consumption 计划的区域列表,请执行以下操作:
请登录到 Azure(如果尚未这样做):
az login
使用 az login
命令登录到 Azure 帐户。
使用 az functionapp list-flexconsumption-locations
命令查看当前支持 Flex Consumption 的区域列表。
az functionapp list-flexconsumption-locations --output table
在 Azure 门户中或使用 Visual Studio Code 创建应用时,当前不支持的区域将筛选出区域列表。
Azure Monitor 提供了这些不同的指标集,可帮助你更好地了解函数应用在 Azure 中的运行方式:
- 平台指标:提供基础结构级见解
- Application Insights:提供代码级见解,包括跟踪和错误日志。
如果尚未这样做,则应 在应用中启用 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>
替换为函数应用名称。 此脚本获取完全限定的应用 ID,并返回表中的可用平台指标。
可以在 Azure 门户中或使用 Azure CLI 查看当前指标。
在 Azure 门户中,还可以创建指标警报,并将图表和其他报表固定到门户中的仪表板。
使用此脚本为应用生成当前指标的报告:
appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
appId=$(az functionapp show --name func-fuxigh6c255de --resource-group exampleRG --query id -o tsv)
echo -e "\nAlways-ready and on-emand 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-emand 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 门户的函数应用页中,选择“ 监视>指标 ”,如果当前图表为空,请选择“ + 添加指标”。
将您的应用作为范围,选择一个或多个支持的指标选项添加到当前图表中。
重复上一步,将其他指标添加到图表。
(可选)选择“ 保存到仪表板 ”,将当前图表添加到新的或现有的仪表板。 请记住,包括始终就绪和按需指标,以实现广泛的可见性。
(可选)选择 “新建警报”, 以针对特定指标创建警报。 请记住,包括始终就绪和按需衡量标准,以便获得广泛的可见度。
当前无法使用 Visual Studio Code 查看和设置指标。
若要详细了解 Azure Functions 的指标,请参阅 “监视 Azure Functions”。
当应用连接到 Application Insights 时,可以更好地分析应用性能并在执行过程中排查问题。
使用“性能”分析响应时间和依赖项
使用“失败”识别迁移后发生的任何错误
在“日志”中创建自定义查询以分析函数行为:
// Compare success rates by instance
requests
| where timestamp > ago(7d)
| summarize successCount=countif(success == true), failureCount=countif(success == false) by bin(timestamp, 1h), cloud_RoleName
| render timechart
由于你可以优化应用以调整性能与运营成本,因此在 Flex Consumption 计划中跟踪与运行应用相关的成本非常重要。
查看当前成本:
在 Azure 门户的函数应用页中,选择资源组链接。
在资源组页中,选择 “成本管理>成本分析”。
查看应用本身的当前成本和成本轨迹。
(可选)选择 “成本管理>警报 ”,然后选择 “+ 添加 ”,为应用创建新警报。
Flex Consumption 计划提供了多个设置,你可以进行优化以优化应用的性能。 实际性能和成本可能因特定于应用的工作负荷模式和配置而异。 例如,较高的 内存实例大小 可以提高内存密集型作的性能,但每个活动周期的成本更高。
以下是可以调整性能与成本的一些调整: