你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Functions 预热触发器
本文介绍了如何在 Azure Functions 中使用预热触发器。 当添加实例来缩放正在运行的函数应用时,会调用预热触发器。 使用预热触发器,你可以定义在启动函数应用的新实例时运行的函数。 你可以使用预热触发器来预加载自定义依赖项,使你的函数能够准备就绪,以便立即开始处理请求。 预热触发器的一些操作可能包括在应用开始接收流量之前打开连接、加载依赖项或运行任何其他自定义逻辑。
使用预热触发器时需考虑下列事项:
- 预热触发器不适用于按消耗计划运行的应用。
- Functions 运行时版本 1.x 不支持预热触发器。
- 默认情况下,在所有开发环境中都提供对预热触发器的支持。 无需手动安装包或注册扩展。
- 每个函数应用只能有一个预热触发器函数,并且在实例已经运行后无法对其进行调用。
- 只有在执行横向扩展操作期间才会调用预热触发器,在重启或其他非缩放启动期间不会调用。 确保逻辑可以在不依赖预热触发器的情况下加载所有必需的依赖项。 延迟加载是实现此目的的一个好模式。
- 预热触发器创建的依赖项应与应用中的其他函数共享。 若要了解详细信息,请参阅静态客户端。
- 如果使用内置身份验证(也称为 Easy Auth),则应启用“仅限 HTTPS”以便调用预热触发器。
示例
可使用以下 C# 模式之一来创建 C# 函数:
- 独立辅助角色模型:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
- 进程内模型:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
- C# 脚本:主要在 Azure 门户中创建 C# 函数时使用。
重要
对进程内模型的支持将于 2026 年 11 月 10 日结束。 为获得完全支持,强烈建议将应用迁移到独立工作模型。
下面的示例展示了一个 C# 函数,该函数在向应用添加新实例时在每个新实例上运行。
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace SampleApp
{
public static class Warmup
{
[Function(nameof(Warmup))]
public static void Run([WarmupTrigger] object warmupContext, FunctionContext context)
{
var logger = context.GetLogger(nameof(Warmup));
logger.LogInformation("Function App instance is now warm!");
}
}
}
下面的示例展示了一个预热触发器,该触发器将在向应用添加新实例时运行。
@FunctionName("Warmup")
public void warmup( @WarmupTrigger Object warmupContext, ExecutionContext context) {
context.getLogger().info("Function App instance is warm.");
}
下面的示例展示了一个带有预热触发器的 JavaScript 函数,该触发器会在添加到应用的每个新实例上运行:
const { app } = require('@azure/functions');
app.warmup('warmupTrigger', {
handler: (warmupContext, context) => {
context.log('Function App instance is warm.');
},
});
下面的示例展示了一个带有预热触发器的 TypeScript 函数,该触发器会在添加到应用的每个新实例上运行:
import { app, InvocationContext, WarmupContext } from '@azure/functions';
export async function warmupFunction(warmupContext: WarmupContext, context: InvocationContext): Promise<void> {
context.log('Function App instance is warm.');
}
app.warmup('warmup', {
handler: warmupFunction,
});
function.json 文件如下所示:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}
PowerShell 示例代码挂起。
下面的示例展示了 function.json 文件中的一个预热触发器和一个 Python 函数,该函数在向应用添加新实例时在每个新实例上运行。
函数必须命名为 warmup
(不区分大小写),并且每个应用只能有一个预热函数。
function.json 文件如下所示:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}
有关详细信息,请参阅配置。
下面是 Python 代码:
import logging
import azure.functions as func
def main(warmupContext: func.Context) -> None:
logging.info('Function App instance is warm.')
批注
预热触发器不需要注释。 只需为 FunctionName
注释使用名称 warmup
(不区分大小写)。
配置
下表解释了在 function.json 文件中设置的绑定配置属性。
“function.json”属性 | 说明 |
---|---|
type | 必需 - 必须设置为 warmupTrigger 。 |
direction | 必需 - 必须设置为 in 。 |
name | 必需 - 函数代码中使用的变量名称。 建议将 warmupContext 中的 name 用于绑定参数。 |
有关完整示例,请参阅示例部分。
使用情况
以下注意事项适用于在 C# 中使用预热函数:
必须使用 FunctionName
注释将函数命名为 warmup
(不区分大小写)。
function.json 中的函数类型必须设置为 warmupTrigger
。