Триггер прогрева Функций Azure

В этой статье описывается, как работать с триггерами прогрева в службе Функции Azure. Триггер прогрева вызывается при добавлении экземпляра для масштабирования работающего приложения-функции. Триггер прогрева позволяет определить функцию, которая запускается при запуске нового экземпляра приложения-функции. Для предварительной загрузки пользовательских зависимостей можно использовать триггер прогревание, чтобы функции были готовы немедленно начать обработку запросов. Некоторые действия для триггера прогрева могут включать открытие подключений, загрузку зависимостей или выполнение любой другой пользовательской логики, прежде чем приложение начнет получать трафик.

При использовании триггера прогрева следует принимать во внимание следующие соображения.

  • Триггер прогрева недоступен для приложений, работающих в плане потребления.
  • Триггер прогрева не поддерживается в среде выполнения Функций версии 1.x.
  • Поддержка триггера прогрева предоставляется по умолчанию во всех средах разработки. Не нужно вручную устанавливать пакет или регистрировать расширение.
  • Для каждого приложения-функции может быть только одна функция триггера прогрева, и ее нельзя вызвать после того, как экземпляр уже запущен.
  • Триггер нагревания вызывается только во время операций горизонтального масштабирования, а не во время перезапусков или других немасштабируемых запусков. Убедитесь, что логика может загружать все необходимые зависимости, не полагаясь на триггер прогрева. Отложенная загрузка является хорошим шаблоном для достижения этой цели.
  • Зависимости, созданные триггером прогрева, должны совместно использоваться с другими функциями в приложении. Дополнительные сведения см. в разделе Статические клиенты.
  • Если используется встроенная проверка подлинности (также известная как Easy Auth), для вызова вызываемого триггера прогревание необходимо включить только ПРОТОКОЛ HTTPS.

Пример

Функцию C# можно создать с помощью одного из следующих режимов C#:

  • Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework.
  • Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций.
  • Скрипт C#: используется в основном при создании функций C# в портал Azure.

В следующем примере показана функция 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('warmupTrigger1', {
    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.')

Атрибуты

Библиотеки C# в процессе и изолированном рабочем процессе используют WarmupTrigger атрибут для определения функции. Вместо этого в скрипте C# используется файл конфигурации function.json.

Используйте атрибут WarmupTrigger для определения функции. Этот атрибут не имеет параметров.

Заметки

Триггеры прогрения не требуют примечаний. Просто используйте имя warmup (без учета регистра) для FunctionName заметки.

Настройка

Для объекта, передаваемого app.warmup() методуoptions, нет свойств, которые необходимо задать.

Настройка

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Описание
type Обязательное. Необходимо задать значение warmupTrigger.
direction Обязательное. Необходимо задать значение in.
name Обязательное. Имя переменной, используемое в коде функции кода. name из warmupContext рекомендуется использовать для параметра привязки.

Подробные примеры см. в разделе Примеры.

Использование

При использовании функции прогрева в C# следует учитывать следующие рекомендации.

  • Функция должна быть названа warmup (без учета регистра) с помощью атрибута Function.
  • Атрибут возвращаемого значения не является обязательным.
  • Использование пакета Microsoft.Azure.Functions.Worker.Extensions.Warmup
  • Экземпляр объекта можно передать в функцию.

Функция должна быть названа warmup (без учета регистра) с помощью FunctionName аннотации.

Список рекомендаций по использованию см. в верхней части страницы.

Тип функции в файле function.json должен иметь значение warmupTrigger.

Следующие шаги