Desencadenador de preparación de Azure Functions

En este artículo se explica cómo trabajar con el desencadenador de preparación en Azure Functions. Un desencadenador de preparación se invoca cuando se agrega una instancia para escalar una aplicación de funciones en ejecución. El desencadenador de preparación le permite definir una función que se ejecuta cuando se inicia una nueva instancia de la aplicación de funciones. Puede usar un desencadenador de preparación para cargar con antelación las dependencias personalizadas, de modo que las funciones estén listas para empezar a procesar solicitudes inmediatamente. Algunas acciones de un desencadenador de preparación podrían incluir la apertura de conexiones, la carga de dependencias o la ejecución de cualquier otra lógica personalizada antes de que la aplicación comience a recibir tráfico.

Al usar desencadenador de preparación, se aplican las siguientes consideraciones:

  • El desencadenador de preparación no está disponible para las aplicaciones que se ejecutan en el Plan de consumo.
  • El desencadenador de preparación no se admite en la versión 1.x de Functions Runtime.
  • La compatibilidad con el desencadenador de preparación se proporciona de manera predeterminada en todos los entornos de desarrollo. No tiene que instalar el paquete manualmente ni que registrar la extensión.
  • Solo puede haber una función de desencadenador de preparación por aplicación de función y no se puede invocar después de que la instancia ya se esté ejecutando.
  • Solo se llama al desencadenador de preparación durante las operaciones de escalado horizontal, no durante los reinicios u otros inicios sin escala. Asegúrese de que la lógica puede cargar todas las dependencias necesarias sin depender del desencadenador de preparación. La carga diferida es un buen patrón para lograr este objetivo.
  • Las dependencias creadas por el desencadenador de preparación deben compartirse con otras funciones de la aplicación. Para más información, consulte Clientes estáticos.
  • Si se usa la autenticación integrada (también conocida como Easy Auth), Solo HTTPS debe habilitarse para que se invoque el desencadenador de preparación.

Ejemplo

Se puede crear una función C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.

En el ejemplo siguiente se muestra una función C# que se ejecutará en cada nueva instancia cuando se agregue a la aplicación.

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!");
        }
    }
}

En el ejemplo siguiente, se muestra un desencadenador de calentamiento que se ejecuta cada vez que se agrega una nueva instancia a la aplicación.

@FunctionName("Warmup")
public void warmup( @WarmupTrigger Object warmupContext, ExecutionContext context) {
    context.getLogger().info("Function App instance is warm.");
}

En el ejemplo siguiente se muestra una función de JavaScript con un desencadenador de preparación que se ejecuta en cada nueva instancia cuando se agrega a la aplicación:

const { app } = require('@azure/functions');

app.warmup('warmupTrigger1', {
    handler: (warmupContext, context) => {
        context.log('Function App instance is warm.');
    },
});

En el ejemplo siguiente se muestra una función TypeScript con un desencadenador de preparación que se ejecuta en cada nueva instancia cuando se agrega a la aplicación:

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,
});

Este es el archivo function.json:

{
    "bindings": [
        {
            "type": "warmupTrigger",
            "direction": "in",
            "name": "warmupContext"
        }
    ]
}

Código de ejemplo de PowerShell pendiente.

En el ejemplo siguiente se muestra un desencadenador de preparación en un archivo function.json y una función Python que se ejecuta en cada nueva instancia cuando se agregue a la aplicación.

La función debe denominarse warmup (sin distinguir entre mayúsculas y minúsculas) y solo puede haber una función de preparación por aplicación.

Este es el archivo function.json:

{
    "bindings": [
        {
            "type": "warmupTrigger",
            "direction": "in",
            "name": "warmupContext"
        }
    ]
}

Para obtener más información, vea Configuración.

Este es el código de Python:

import logging
import azure.functions as func


def main(warmupContext: func.Context) -> None:
    logging.info('Function App instance is warm.')

Atributos

Tanto las bibliotecas de C# en proceso como las de proceso de trabajo aislado usan el atributo WarmupTrigger para definir la función. El script de C#, en su lugar, usa un archivo de configuración function.json.

Use el atributo WarmupTrigger para definir la función. Este atributo no tiene parámetros.

anotaciones

Los desencadenadores de preparación no requieren anotaciones. Solo tiene que usar un nombre de warmup (sin distinción entre mayúsculas y minúsculas) para la anotación FunctionName.

Configuración

No hay propiedades que deban establecerse en el objeto options pasado al método app.warmup().

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.

Propiedad de function.json Descripción
type Requerida: se debe establecer en warmupTrigger.
direction Requerida: se debe establecer en in.
name Requerido: nombre de la variable que se usa en el código de función. Se recomienda un name de warmupContext para el parámetro de enlace.

Consulte la sección de ejemplos para ver ejemplos completos.

Uso

Las consideraciones siguientes se aplican al uso de una función de preparación en C#:

  • La función debe tener un nombre warmup (sin distinción entre mayúsculas y minúsculas) mediante el atributo Function.
  • No se requiere un atributo de valor devuelto.
  • Uso del paquete Microsoft.Azure.Functions.Worker.Extensions.Warmup
  • Puede pasar una instancia de objeto a la función.

La función debe tener un nombre warmup (sin distinción entre mayúsculas y minúsculas) mediante la anotación FunctionName.

Consulte la lista de consideraciones en la parte superior de la página para obtener consejos de uso generales.

El tipo de función de function.json debe establecerse en warmupTrigger.

Pasos siguientes