次の方法で共有


Azure Functions ウォームアップ トリガー

この記事では、Azure Functions でウォームアップ トリガーを使用する方法について説明します。 実行中の関数アプリをスケーリングするためにインスタンスが追加されると、ウォームアップ トリガーが呼び出されます。 ウォームアップ トリガーを使うと、関数アプリの新しいインスタンスの開始時に実行される関数を定義できます。 ウォームアップ トリガーを使用して、カスタムの依存関係を事前に読み込み、関数をすぐに要求の処理を開始できる状態にすることができます。 ウォームアップ トリガーの一部のアクションには、アプリがトラフィックの受信を開始する前に、接続を開く、依存関係を読み込む、または他のカスタム ロジックを実行する操作が含まれる場合があります。

ウォームアップ トリガーを使うときは、以下のことを考慮してください。

  • ウォームアップ トリガーは、従量課金プランで実行されているアプリでは使用できません。
  • ウォームアップ トリガーは、Functions ランタイムのバージョン 1.x ではサポートされていません。
  • ウォームアップ トリガーのサポートは、すべての開発環境において既定で提供されます。 手動でパッケージをインストールしたり、拡張機能を登録したりする必要はありません。
  • ウォームアップ トリガー関数は、関数アプリごとに 1 つだけ存在することができ、インスタンスが既に実行されている後で呼び出すことはできません。
  • ウォームアップ トリガーはスケールアウト操作中にのみ呼び出され、再起動やその他の非スケール スタートアップ中には呼び出されません。 ウォームアップ トリガーに頼ることなく、ロジックで必要なすべての依存関係を読み込めるようにしてください。 この目的を実現するのに適しているのは、遅延読み込みパターンです。
  • ウォームアップ トリガーによって作成された依存関係は、アプリ内の他の関数と共有する必要があります。 詳しくは、「静的クライアント」をご覧ください。
  • 組み込みの認証 (Easy Auth とも呼ばれます) を使用する場合は、ウォームアップ トリガーが呼び出されるように HTTPS のみ有効にする必要があります。

A C# 関数は、次の C# モードのいずれかを使用して作成できます。

  • 分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、LTS および 非 LTS バージョンの .NET および .NET Framework で実行されている C# 関数をサポートするために必要です。
  • インプロセス モデル: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。
  • C# スクリプト: Azure portal で 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('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 (大文字と小文字を区別しない) という名前を付ける必要があります。アプリごとに使用できるウォームアップ関数は 1 つのみです。

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 必須 - 関数コードで使用される変数名。 バインド パラメーターには、warmupContextname が推奨されます。

完全な例については、セクションの例を参照してください。

使用方法

C# でウォームアップ関数を使うときは、次のことを考慮してください。

  • 関数には、Function 属性を使って warmup という名前 (大文字と小文字の区別なし) を付ける必要があります。
  • 戻り値の属性は必須ではありません。
  • Microsoft.Azure.Functions.Worker.Extensions.Warmup パッケージを使用する
  • オブジェクトのインスタンスを関数に渡すことができます。

関数には、FunctionName 注釈を使って warmup という名前 (大文字と小文字の区別なし) を付ける必要があります。

一般的な使用に関するアドバイスについては、ページの上部にある考慮事項の一覧を参照してください。

function.json の関数の型は、warmupTrigger に設定する必要があります。

次のステップ