分享方式:


Azure Functions 熱身觸發程式

本文說明如何使用 Azure Functions 中的熱身觸發程式。 加入 實例以調整執行中的函式應用程式時,會叫用熱身觸發程式。 熱身觸發程式可讓您定義函式,以在啟動函式應用程式的新實例時執行。 您可以使用熱身觸發程式預先載入自定義相依性,讓您的函式準備好立即開始處理要求。 熱身觸發程式的一些動作可能包括開啟連線、載入相依性,或在應用程式開始接收流量之前執行任何其他自定義邏輯。

使用熱身觸發程式時,適用下列考慮:

  • 熱身觸發程式不適用於在 取用方案上執行的應用程式。
  • Functions 運行時間 1.x 版不支援熱身觸發程式。
  • 所有開發環境中預設都會提供熱身觸發程序的支援。 您不需要手動安裝套件或註冊擴充功能。
  • 每個函式應用程式只能有一個熱身觸發程式函式,而且在實例已執行之後就無法叫用。
  • 熱身觸發程式只會在向外延展作業期間呼叫,而不是在重新啟動或其他非調整啟動期間呼叫。 請確定邏輯可以載入所有必要的相依性,而不需要依賴熱身觸發程式。 延遲載入是達成此目標的良好模式。
  • 熱身觸發程式所建立的相依性應該與應用程式中的其他函式共用。 若要深入瞭解,請參閱 靜態用戶端
  • 如果使用內建驗證(也稱為 Easy Auth),則應該啟用 HTTPS,讓熱身觸發程式被叫用。

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

  • 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。
  • 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。
  • C# 文稿:主要用於在 Azure 入口網站 中建立 C# 函式。

下列範例示範 在新增至應用程式時,在每個新實例上執行的 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使用屬性來定義函式。 此屬性沒有參數。

註釋

熱身觸發程式不需要註釋。 只要針對FunctionName註釋使用不區分大小寫的名稱warmup即可。

組態

傳遞至 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

下一步