在 Flex Consumption 计划中创建和管理函数应用

本文介绍如何在 Azure Functions 中创建托管在 Flex Consumption 计划 中的函数应用。 还演示了如何管理 Flex Consumption 计划托管应用的某些功能。

函数应用资源特定于语言。 确保在文章开始处选择喜欢的代码开发语言。

先决条件

创建 Flex Consumption 应用

本部分介绍如何使用 Azure CLI、Azure 门户或 Visual Studio Code 在 Flex Consumption 计划中创建函数应用。 有关使用 Bicep/ARM 模板在 Flex Consumption 计划中创建应用的示例,请参阅 Flex Consumption 存储库

如果选择使用 Maven 创建和部署应用,则可以跳过此部分。

若要支持函数代码,需要创建三个资源:

  • 一个资源组:相关资源的逻辑容器。
  • 一个存储帐户:用于维护有关函数的状态和其他信息。
  • Flex Consumption 计划中的一个函数应用,它提供用于执行函数代码的环境。 函数应用映射到本地函数项目,可让你将函数分组为逻辑单元,以便更轻松地管理、部署和共享 Flex Consumption 计划中的资源。
  1. 按 F1,然后在命令托盘中输入 Azure Functions: Create function app in Azure...(Advanced)

  2. 如果你未登录,系统会提示“登录到 Azure”。 也可以创建一个 Azure 帐户。 从浏览器登录后,返回到 Visual Studio Code。

  3. 按提示操作并提供以下信息:

    提示 选择
    输入新的函数应用的全局唯一名称。 键入用于标识新函数应用的全局唯一名称,然后按 Enter。 函数应用名称的有效字符包括 a-z0-9-
    选择托管计划。 选择“弹性消耗”
    选择运行时堆栈。 选择受支持的语言堆栈版本之一。
    选择新资源的资源组。 选择“+ 创建新资源组”,键入资源组名称(例如 ),然后按 Enter。 也可以选择现有的资源组。
    选择新资源的位置。 选择靠近你或靠近函数访问的其他服务的受支持区域中的位置。 不受支持的区域不显示。 有关详细信息,请参阅查看当前支持的区域
    选择一个存储帐户。 选择“创建新存储帐户”,根据提示提供函数应用使用的新存储帐户的全局唯一名称,然后按 Enter。 存储帐户名称长度必须为 3 到 24 个字符,只能包含数字和小写字母。 也可以选择现有的帐户。
    为你的应用选择 Application Insights 资源。 选择“创建新的 Application Insights 资源”,然后根据提示提供用于存储函数运行时数据的实例的名称。

    创建函数应用后会显示一条通知。 在此通知中选择“查看输出”以查看创建和部署结果,其中包括你创建的 Azure 资源。

部署代码项目

对于部署,Flex Consumption 计划应用使用 Blob 存储容器托管 .zip 包文件,其中包含项目代码以及运行应用所需的所有库。 有关更多信息,请参阅部署

如果选择使用 Maven 创建和部署应用,则可以跳过此部分。

可以选择使用各种工具将项目代码部署到现有函数应用:

可以使用 Azure CLI 将部署包文件上传到 Azure 中函数应用的部署共享。 为此,必须生成一个 .zip 包文件,该文件在将包载入到应用时可以运行。

此包文件必须包含项目运行所需的所有生成输出文件和引用的库。

对于具有大量库的项目,应打包项目文件的根目录并请求 远程生成

对于 Python 项目,应打包项目文件的根目录,并始终请求 远程生成。 使用远程生成可防止在 Windows 上生成要在 Linux 上部署的项目时可能出现的潜在问题。

  1. 使用首选的开发工具生成代码项目。

  2. 创建包含生成目录输出的 .zip 文件。 有关详细信息,请参阅 项目结构

  3. 如果需要,请登录到 Azure 帐户,并使用 az login 命令选择活动订阅。

    az login
    
  4. az functionapp deployment source config-zip运行命令以部署位于相对<FILE_PATH>位置的应用程序包。

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 使用首选的开发工具生成代码项目。

  2. 创建包含生成目录输出的 .zip 文件。 有关详细信息,请参阅 文件夹结构

  3. 如果需要,请登录到 Azure 帐户,并使用 az login 命令选择活动订阅。

    az login
    
  4. az functionapp deployment source config-zip运行命令以部署位于相对<FILE_PATH>位置的应用程序包。

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 创建包含代码项目的根目录的 .zip 文件。 有关详细信息,请参阅 文件夹结构

  2. 如果需要,请登录到 Azure 帐户,并使用 az login 命令选择活动订阅。

    az login
    
  3. az functionapp deployment source config-zip运行命令以部署位于相对<FILE_PATH>位置的应用程序包。

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 创建包含代码项目的根目录的 .zip 文件。 有关详细信息,请参阅 文件夹结构

  2. 如果需要,请登录到 Azure 帐户,并使用 az login 命令选择活动订阅。

    az login
    
  3. 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以执行远程构建

  1. 创建包含代码项目的根目录的 .zip 文件。 有关详细信息,请参阅 文件夹结构

  2. 如果需要,请登录到 Azure 帐户,并使用 az login 命令选择活动订阅。

    az login
    
  3. 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以执行远程构建

使用 Maven 创建并部署应用

可以通过修改 pom.xml 文件,使用 Maven 在部署期间创建 Flex Consumption 托管函数应用和所需的资源。

  1. 通过完成以下快速入门文章的第一部分来创建 Java 代码项目:

  2. 在 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>
      
  3. (可选)通过在 <plugin>.<configuration> 部分中包括以下元素,在 Maven 部署中自定义 Flex Consumption 计划。

    • <instanceSize> - 设置函数应用的实例内存大小。 默认值为 2048
    • <maximumInstances> - 设置函数应用的最大实例计数的最大值。
    • <alwaysReadyInstances> - 使用 HTTP 触发器组 ()、Durable Functions 组 (<http>) 和其他特定触发器 (<durable>) 的子元素设置<my_function>。 设置任何大于零的实例计数时,无论函数是否执行,都会对这些实例收费。 有关详细信息,请参阅计费
  4. 在部署之前,请使用 Azure CLI 登录到 Azure 订阅。

    az login
    

    使用 az login 命令登录到 Azure 帐户。

  5. 使用以下命令将代码项目部署到 Flex Consumption 中的新函数应用。

    mvn azure-functions:deploy
    

    Maven 使用 pom.xml 模板中的设置在 Azure 中的 Flex Consumption 计划中创建函数应用,以及其他所需的资源。 如果这些资源已存在,代码将部署到函数应用,覆盖任何现有代码。

启用虚拟网络集成

可以在 Flex Consumption 计划中为应用启用虚拟网络集成。 本部分中的示例假定你已 创建帐户中具有子网的虚拟网络 。 可以在创建应用时或以后启用虚拟网络集成。

重要

Flex Consumption 计划目前不支持名称包含下划线 (_) 字符的子网。

若要在创建应用时启用虚拟网络,请执行以下操作:

使用 Visual Studio Code 创建应用时,当前无法启用虚拟网络。

有关如何使用虚拟网络集成在 Flex Consumption 中创建应用的端到端示例,请参阅以下资源:

若要在现有应用中修改或删除虚拟网络集成,请执行以下操作:

目前无法在 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 消耗计划中创建函数应用时配置部署设置:

使用 Visual Studio Code 在 Azure 中创建应用时,当前无法配置部署存储。

还可以修改现有应用的部署存储配置。

目前无法使用 Visual Studio Code 在 Azure 中为应用配置部署存储。

配置实例内存

创建应用时,可以显式设置 Flex Consumption 计划使用的实例内存大小。 有关支持的大小的详细信息,请参阅实例内存

若要设置与创建应用时默认不同的实例内存大小,请执行以下操作:

使用 Visual Studio Code 创建应用时,当前无法控制实例内存大小。 使用默认大小。

可随时更改应用使用的实例内存大小设置。

当前无法使用 Visual Studio Code 更改应用的实例内存大小设置。

设置始终就绪的实例计数

可以为每个函数缩放组或各个单独函数设置特定数量的始终就绪实例,使函数保持加载状态并随时可以执行。 有三个特殊组,就像每个函数缩放一样:

  • http - 应用中所有 HTTP 触发的函数一起扩展到自己的实例。
  • durable - 应用中所有持久触发的函数(业务流程、活动、实体)一起扩展到自己的实例。
  • blob - 应用中所有 blob(事件网格)触发的函数一起扩展到自己的实例。

httpdurableblob 用作名称值对设置的名称来配置这些组的始终就绪计数。 对于应用中的所有其他函数,需要使用 function:<FUNCTION_NAME>=n 格式为每个单独的函数配置始终就绪计数。

使用 Visual Studio Code 在 Azure 中创建应用时,当前无法定义始终就绪的实例。

还可以通过添加或删除实例指定或更改现有实例指定计数来修改现有应用上的始终就绪实例。

目前无法使用 Visual Studio Code 修改始终就绪的实例。

设置 HTTP 并发限制

除非设置了特定限制,否则 Flex Consumption 计划应用的 HTTP 并发默认值会根据实例大小设置确定。 有关详细信息,请参阅 HTTP 触发器并发

下面介绍如何为现有应用设置 HTTP 并发限制:

当前无法使用 Visual Studio Code 设置 HTTP 并发限制。

查看当前支持的区域

若要查看当前支持 Flex Consumption 计划的区域列表,请执行以下操作:

  1. 请登录到 Azure(如果尚未这样做):

    az login
    

    使用 az login 命令登录到 Azure 帐户。

  2. 使用 az functionapp list-flexconsumption-locations 命令查看当前支持 Flex Consumption 的区域列表。

    az functionapp list-flexconsumption-locations --output table
    

Azure 门户中或使用 Visual Studio Code 创建应用时,当前不支持的区域将筛选出区域列表。

在 Azure 中监视应用

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 门户中,还可以创建指标警报,并将图表和其他报表固定到门户中的仪表板。

当前无法使用 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 计划中跟踪与运行应用相关的成本非常重要。

查看当前成本:

  1. Azure 门户的函数应用页中,选择资源组链接。

  2. 在资源组页中,选择 “成本管理>成本分析”。

  3. 查看应用本身的当前成本和成本轨迹。

  4. (可选)选择 “成本管理>警报 ”,然后选择 “+ 添加 ”,为应用创建新警报。

微调应用程序

Flex Consumption 计划提供了多个设置,你可以进行优化以优化应用的性能。 实际性能和成本可能因特定于应用的工作负荷模式和配置而异。 例如,较高的 内存实例大小 可以提高内存密集型作的性能,但每个活动周期的成本更高。

以下是可以调整性能与成本的一些调整: