管理函数应用

在 Azure Functions 中,Function App 提供各个函数的执行上下文。 Function App 行为适用于由给定 Function App 托管的所有函数。 函数应用中的所有函数必须使用同一语言

函数应用中的各个函数一起部署并一起缩放。 同一函数应用中的所有函数在函数应用缩放时共享每个实例的资源。

将为每个函数应用单独定义连接字符串、环境变量以及其他应用程序设置。 必须在函数应用之间共享的任何数据都应该以外部方式存储在持久存储中。

在 Azure 门户中开始

注意

不要将本地开发和门户开发混合在同一函数应用中。 从本地项目创建和发布函数时,无法维护或修改门户中的项目代码。

  1. 若要开始,请使用你的 Azure 帐户登录 Azure 门户。 在门户顶端的搜索栏中,输入函数应用的名称,并从列表中将其选中。

  2. 在左窗格的“配置”下,选择“配置”

    Azure 门户中的函数应用概述

可以从概述页导航到管理函数应用所需的所有内容,特别是 应用程序设置平台功能

使用应用程序设置

可以创建函数代码所需的任意数量的应用程序设置。 还有一些预定义的应用程序设置可供 Functions 使用。 有关详细信息,请参阅 Azure Functions 的应用设置参考

这些设置是加密存储的。 若要了解详细信息,请参阅应用程序设置安全

可以通过 Azure 门户以及 Azure CLIAzure PowerShell 管理应用程序设置。 还可以通过 Visual Studio CodeVisual Studio 管理应用程序设置。

若要查找应用程序设置,请参阅在 Azure 门户中开始操作

“应用程序设置”选项卡维护函数应用使用的设置。 你必须选择“显示值”才能在门户中查看值。 若要在门户中添加设置,请选择“新建应用程序设置”并添加新的键值对。

Azure 门户中的函数应用设置。

使用应用程序设置

还可以在代码中将函数应用设置值读取为环境变量。 有关详细信息,请参阅以下特定于语言的参考主题的“环境变量”部分:

在本地开发函数应用时,必须将这些值的本地副本保留在 local.settings.json 项目文件中。 若要了解详细信息,请参阅本地设置文件

FTPS 部署设置

Azure Functions 支持使用 FTPS 将项目代码部署到函数应用。 由于此部署方法需要同步触发器,因此不推荐。 要安全地传输项目文件,请始终使用 FTPS 而不是 FTP。

可以使用以下方法之一来获取 FTPS 部署所需的凭据:

可以通过下载函数应用的发布配置文件来在 Azure 门户中获取 FTPS 发布凭据。

重要

发布配置文件包含重要的安全凭据。 应始终保护本地计算机上下载的文件。

若要下载函数应用的发布配置文件:

  1. 选择函数应用的“概述”页,然后选择“获取发布配置文件”

    下载发布配置文件

  2. 保存并复制该文件的内容。

  1. 在文件中,找到具有属性 publishMethod="FTP"publishProfile 元素。 在此元素中,publishUrluserNameuserPWD 属性包含用于 FTPS 发布的目标 URL 和凭据。

托管计划类型

创建函数应用时,你还需要创建托管计划,应用将在其中运行。 一个计划可以有一个或多个函数应用。 函数的功能、缩放和定价取决于计划的类型。 若要了解详细信息,请参阅 Azure Functions 托管选项

可以从 Azure 门户中或通过使用 Azure CLI 或 Azure PowerShell API 确定函数应用所使用的计划类型。

以下值指示计划类型:

计划类型 门户 Azure CLI/PowerShell
消耗 消耗 Dynamic
高级 ElasticPremium ElasticPremium
专用(应用服务) 各种 各种

要确定你的函数应用所使用的计划的类型,请在 Azure 门户中查看该函数应用的“概述”选项卡中的“应用服务计划” 。 若要查看定价层,请选择“应用服务计划”的名称,然后从左侧窗格中选择“属性” 。

在门户中查看缩放计划

计划迁移

你可以使用 Azure 门户或 Azure CLI 命令在 Windows 上的消耗计划和高级计划之间迁移函数应用。 在计划之间迁移时,请记住以下注意事项:

  • 当前不支持直接迁移到专用(应用服务)计划。
  • Linux 不支持迁移。
  • 源计划和目标计划必须位于同一资源组和地理区域中。 有关详细信息,请参阅将应用移到另一个应用服务计划
  • 具体的 CLI 命令取决于迁移方向。
  • 在计划之间迁移函数应用时,函数执行会出现故障。
  • 状态和其他应用特定的内容会得到维护,因为在迁移之前和之后应用都使用相同的 Azure 文件存储共享。

门户中的迁移

在 Azure 门户中,导航到“消耗”或“高级”计划应用,然后选择“应用服务计划”下的“更改应用服务计划”。 选择其他“计划类型”,创建新类型的新应用服务计划,然后选择“确定”。 有关详细信息,请参阅将应用移到另一个应用服务计划

从消耗计划到高级计划

可以使用以下过程从 Windows 上的消耗计划迁移到高级计划:

  1. 按如下所示运行 az functionapp plan create 命令,在现有函数应用所在的同一区域和资源组中创建新的应用服务计划(弹性高级):

    az functionapp plan create --name <NEW_PREMIUM_PLAN_NAME> --resource-group <MY_RESOURCE_GROUP> --location <REGION> --sku EP1
    
  2. 按如下所示运行 az functionapp update 命令,将现有函数应用迁移到新的高级计划:

    az functionapp update --name <MY_APP_NAME> --resource-group <MY_RESOURCE_GROUP> --plan <NEW_PREMIUM_PLAN>
    
  3. 如果不再需要以前的消耗函数应用计划,请在确认已成功迁移到新的计划后,删除原始的函数应用计划。 按如下所示运行 az functionapp plan list 命令,以获取资源组中所有消耗计划的列表:

    az functionapp plan list --resource-group <MY_RESOURCE_GROUP> --query "[?sku.family=='Y'].{PlanName:name,Sites:numberOfSites}" -o table
    

    你可以放心地删除没有站点的计划,这是你从其进行迁移的计划。

  4. 按如下所示运行 az functionapp plan delete 命令,以删除从中迁移了应用的消耗计划。

    az functionapp plan delete --name <CONSUMPTION_PLAN_NAME> --resource-group <MY_RESOURCE_GROUP>
    

从高级计划到消耗计划

可以使用以下过程从 Windows 上的高级计划迁移到消耗计划:

  1. 按如下所示运行 az functionapp plan create 命令,在现有函数应用所在的同一区域和资源组中创建新的函数应用(消耗)。 此命令还会创建一个将在其中运行函数应用的新消耗计划。

    az functionapp create --resource-group <MY_RESOURCE_GROUP> --name <NEW_CONSUMPTION_APP_NAME> --consumption-plan-location <REGION> --runtime dotnet --functions-version 3 --storage-account <STORAGE_NAME>
    
  2. 按如下所示运行 az functionapp update 命令,将现有函数应用迁移到新的消耗计划。

    az functionapp update --name <MY_APP_NAME> --resource-group <MY_RESOURCE_GROUP> --plan <NEW_CONSUMPTION_PLAN> --force
    
  3. 按如下所示运行 az functionapp delete 命令以删除在步骤 1 中创建的函数应用,因为只需使用创建的计划来运行现有函数应用。

    az functionapp delete --name <NEW_CONSUMPTION_APP_NAME> --resource-group <MY_RESOURCE_GROUP>
    
  4. 如果不再需要以前的高级函数应用计划,请在确认已成功迁移到新计划后,删除原始函数应用计划。 在删除高级计划之前,将继续为此向你收取费用。 按如下所示运行 az functionapp plan list 命令,以获取资源组中所有高级计划的列表。

    az functionapp plan list --resource-group <MY_RESOURCE_GROUP> --query "[?sku.family=='EP'].{PlanName:name,Sites:numberOfSites}" -o table
    
  5. 按如下所示运行 az functionapp plan delete 命令,以删除从中迁移了应用的高级计划。

    az functionapp plan delete --name <PREMIUM_PLAN> --resource-group <MY_RESOURCE_GROUP>
    

获取函数访问密钥

一般情况下,可以使用 https://<APP_NAME>.chinacloudsites.cn/api/<FUNCTION_NAME> 格式的 URL 来调用 HTTP 触发的函数。 如果为函数授权设置的值不是 anonymous,则还必须在请求中提供访问密钥。 可以使用 ?code= 查询字符串在 URL 中提供该访问密钥,也可以在请求头中提供。 有关详细信息,请参阅函数访问密钥。 可通过多种方式获取访问密钥。

  1. 登录到 Azure 门户,然后搜索并选择“函数应用”。

  2. 选择要验证的函数。

  3. 在左侧导航栏中的“Functions”下,选择“应用密钥” 。

    这会返回可用于访问应用中任何函数的主机密钥。 此外还会返回系统密钥,该密钥可向任何人授予对所有函数应用 API 的管理员级访问权限。

还可以在 HTTP 触发的函数中“开发人员”下选择“函数密钥”,使用特定的函数密钥来实践最低特权原则 。

Azure 门户中的开发限制

Azure 门户中开发函数时,必须考虑以下限制:

  • 仅 JavaScript、PowerShell、Python 和 C# 脚本函数支持门户内编辑。
  • 只有在消耗计划中运行时,才支持 Python 门户内编辑。
  • 目前,仅支持对在门户中创建或最后修改的函数进行门户内编辑。
  • 从门户外部将代码部署到函数应用时,不能再在门户中编辑该函数应用的任何代码。 在这种情况下,只需继续使用本地开发
  • 对于编译的 C# 函数、Java 函数和一些 Python 函数,可以在门户中创建函数应用和相关资源。 但是,你必须在本地创建函数代码项目,然后将其发布到 Azure。

如果可能,应在本地开发函数并将代码项目发布到 Azure 中的函数应用。 有关详细信息,请参阅在本地对 Azure Functions 进行编码和测试

手动安装扩展

C# 类库函数可以将用于绑定扩展的 NuGet 包直接包含在类库项目中。 对于其他非 .NET 语言和 C# 脚本,应使用扩展捆绑包。 如果必须手动安装扩展,可以通过在本地使用 Azure Functions Core Tools 来执行此操作。 如果无法使用扩展捆绑包并且只能在门户中工作,则需要使用 Advanced Tools (Kudu) 直接在站点中手动创建 extensions.csproj 文件。 请确保首先从 host.json 文件中删除 extensionBundle 元素。

此过程适用于需要添加到应用的任何其他文件。

重要

如果可能,请不要直接在 Azure 内的函数应用中编辑文件。 我们建议在本地下载应用文件,使用 Core Tools 安装扩展和其他包,验证更改,然后使用 Core Tools 或其他受支持的部署方法之一重新发布应用。

通过内置到 Azure 门户中的 Functions 编辑器,你可以直接在门户中更新函数代码和配置文件。

  1. 选择函数应用,然后在“函数”下选择“函数”。
  2. 选择函数,然后在“开发人员”下选择“代码 + 测试”。
  3. 选择要编辑的文件,然后在完成编辑后选择“保存”。

应用根目录中的文件(例如 function.proj 或 extensions.csproj)需要使用 Advanced Tools (Kudu) 来创建和编辑。

  1. 选择函数应用,然后在“开发工具”下,选择“高级工具”>“前往”。

  2. 如果出现提示,请使用 Azure 凭据登录到 SCM 站点。

  3. 在“调试控制台”菜单中,选择“CMD”。

  4. 导航到 .\site\wwwroot,选择顶部的加号 (+) 按钮,然后选择“新建文件”。

  5. 命名该文件(例如,命名为 extensions.csproj),然后按 Enter。

  6. 选择新文件旁边的“编辑”按钮,在文件中添加或更新代码,然后选择“保存”。

  7. 对于 extensions.csproj 等项目文件,请运行以下命令来重新生成扩展项目:

    dotnet build extensions.csproj
    

平台功能

函数应用在 Azure 应用服务平台中运行,并由该平台维护。 在这种情况下,Function App 有权访问 Azure 核心 Web 托管平台的大多数功能。 在 Azure 门户中进行操作时,可在左侧窗格中访问可用于函数应用的应用服务平台中的许多功能。

以下矩阵指示托管计划和操作系统支持的门户功能:

Feature 消耗计划 高级计划 专用计划
高级工具 (Kudu) Windows:✔
Linux:X
应用服务编辑器 Windows:✔
Linux:X
Windows:✔
Linux:X
Windows:✔
Linux:X
备份 X X
Console Windows:命令行
Linux:X
Windows:命令行
Linux:SSH
Windows:命令行
Linux:SSH

本文的其余部分侧重于门户中以下可用于函数应用的功能:

若要深入了解如何使用应用服务设置,请参阅配置 Azure 应用服务设置

应用服务编辑器

应用服务编辑器

应用服务编辑器是一种高级的门户内编辑器,可用于修改诸如 JSON 配置文件和代码文件等内容。 选择此选项会启动单独的浏览器选项卡和基本编辑器。 借此,可与 Git 存储库集成、运行和调试代码,并可修改 Function App 设置。 同内置的函数编辑器相比,此编辑器为 Functions 提供了增强的开发环境。

建议你考虑在本地计算机上开发函数。 在本地开发项目并将其发布到 Azure 时,项目文件在门户中处于只读状态。 若要了解详细信息,请参阅在本地对 Azure Functions 进行编码和测试

控制台

Function App 控制台

要从命令行与 Function App 交互时,门户内控制台就是非常合适的开发人员工具。 常见命令包括创建和导航目录与文件,以及执行批处理文件和脚本。

在本地进行开发时,建议使用 Azure Functions Core ToolsAzure CLI

高级工具 (Kudu)

配置 Kudu

应用服务的高级工具(也称为 Kudu)提供对 Function App 高级管理功能的访问。 从 Kudu 中,可以管理系统信息、应用设置、环境变量、站点扩展、HTTP 头和服务器变量。 也可以通过浏览到 Function App 的 SCM 终结点(如 https://<myfunctionapp>.scm.chinacloudsites.cn/),启动 Kudu

部署中心

使用源代码管理解决方案来开发和维护函数代码时,可以使用部署中心通过源代码管理进行生成和部署。 进行更新时,会生成项目并将其部署到 Azure。 有关详细信息,请参阅 Azure Functions 中的部署技术

跨域资源共享

为了防止在客户端执行恶意代码,新式的浏览器会阻止 Web 应用程序向正在单独的域中运行的资源发送请求。 跨域资源共享 (CORS) 允许 Access-Control-Allow-Origin 标头声明允许哪些域调用函数应用上的终结点。

门户

配置函数应用的“允许的域”列表时,Access-Control-Allow-Origin 标头会自动添加到函数应用中 HTTP 终结点发出的所有响应。

配置函数应用的 CORS 列表

如果存在另一个域条目,则会忽略通配符 (*)。

使用 az functionapp cors add 命令将域添加到“允许的域”列表。 以下示例添加 contoso.com 域:

az functionapp cors add --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--allowed-origins https://contoso.com

使用 az functionapp cors show 命令列出目前允许的域。

身份验证

配置 Function App 的身份验证

函数使用 HTTP 触发器时,可以要求首先对调用进行身份验证。 应用服务支持使用社交提供程序进行 Microsoft Entra 身份验证和登录。 有关配置特定身份验证提供程序的详细信息,请参阅 Azure 应用服务身份验证概述

后续步骤