Azure Functions準備觸發程式

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

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

  • 取用方案上執行的應用程式無法使用準備觸發程式。
  • Functions 執行時間 1.x 版不支援準備觸發程式。
  • 預設會在所有開發環境中提供準備觸發程式的支援。 您不需要手動安裝套件或註冊擴充功能。
  • 每個函式應用程式只能有一個準備觸發程式函式,而且無法在實例執行之後叫用。
  • 僅會在向外延展作業期間呼叫暖觸發程式,而不是在重新開機或其他非規模啟動期間呼叫。 請確定您的邏輯可以載入所有必要的相依性,而不需依賴準備觸發程式。 延遲載入是達到此目標的良好模式。
  • 暖觸發程式所建立的相依性應該與應用程式中的其他函式共用。 若要深入瞭解,請參閱 靜態用戶端

範例

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

  • 同進程類別庫:在與 Functions 執行時間相同的進程中執行的已編譯 C# 函式。
  • 隔離進程類別庫:在與執行時間隔離的進程中執行的已編譯 C# 函式。 需要隔離的程式,才能支援在 .NET 5.0 上執行的 C# 函式。
  • C# 腳本:主要用於在 Azure 入口網站 中建立 C# 函式時使用。

下列範例顯示 C# 函式 ,此函式會在新增至您的應用程式時在每個新實例上執行。

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace WarmupSample
{

    //Declare shared dependencies here

    public static class Warmup
    {
        [FunctionName("Warmup")]
        public static void Run([WarmupTrigger()] WarmupContext context,
            ILogger log)
        {
            //Initialize shared dependencies here

            log.LogInformation("Function App instance is warm 🌞🌞🌞");
        }
    }
}

下列範例顯示將每個新實例新增至您的應用程式時執行的準備觸發程式。

@FunctionName("Warmup")
public void run( ExecutionContext context) {
       context.getLogger().info("Function App instance is warm 🌞🌞🌞");
}

下列範例顯示 function.json 檔案中的暖觸發程式,以及新增至應用程式時在每個新實例上執行的 JavaScript 函 式。

以下是 function.json 檔案:

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

設定章節會說明這些屬性。

以下是 JavaScript 程式碼:

module.exports = async function (context, warmupContext) {
    context.log('Function App instance is warm 🌞🌞🌞');
};

以下是 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 不區分大小寫的 (名稱) 。

組態

下表說明您在 function.json 檔案中設定的繫結設定屬性。

function.json 屬性 描述
type 必要項目 - 必須設定為 warmupTrigger
direction 必要項目 - 必須設定為 in
name 必要 - 函式程式碼中使用的變數名稱。 name系結參數建議使用 的 warmupContext

See the Example section for complete examples.

使用方式

下列考慮適用于在 C# 中使用暖函式:

  • 您的函式必須使用 屬性來命名 warmup (不區分大小寫) FunctionName
  • 不需要傳回值屬性。
  • 您必須使用套件的版本 3.0.5Microsoft.Azure.WebJobs.Extensions 或更新版本。
  • 您可以將 實例傳遞 WarmupContext 至 函式。

您的函式必須命名 warmup (不區分大小寫的) 使用 FunctionName 注釋。

function.json 中的函式類型必須設定為 warmupTrigger

後續步驟