次の方法で共有


redisListTrigger for Azure Functions

RedisListTrigger はリストから新規要素をポップし、それらのエントリを関数に提示します。

Managed Redis のトリガーとバインドAzure詳細については、Redis Extension for Azure Functionsを参照してください。

関数トリガーの可用性のスコープ

トリガーの種類 Managed Redis のAzure Azure Cache for Redis
リスト はい はい

重要

Azure Managed Redis または Azure Cache for Redis の Enterprise レベルを使用する場合は、ポート 6380 または 6379 ではなくポート 10000 を使用します。

重要

Redis トリガーは、従量課金プランまたは Flex 従量課金プランで実行されている関数では現在サポートされていません。

重要

Functions の Node.js v4 モデルは、Azure Cache for Redis拡張機能ではまだサポートされていません。 v4 モデルの動作の詳細については、Azure Functions Node.js 開発者ガイドを参照してください。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。

重要

Functions の Python v2 モデルは、Azure Cache for Redis拡張機能ではまだサポートされていません。 v2 モデルの動作の詳細については、Azure Functions Python 開発者ガイドを参照してください。

重要

.NET関数の場合は、isolated worker モデルをin-process モデルよりも使用することをお勧めします。 in-process モデルと isolated worker モデルの比較については、 Azure Functionsの.NETのisolated worker モデルと in-process モデルの違いを参照してください。

次の例では、キー listTestをポーリングします。

using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisListTrigger
{
    public class SimpleListTrigger
    {
        private readonly ILogger<SimpleListTrigger> logger;

        public SimpleListTrigger(ILogger<SimpleListTrigger> logger)
        {
            this.logger = logger;
        }

        [Function(nameof(SimpleListTrigger))]
        public void Run(
            [RedisListTrigger(Common.connectionStringSetting, "listTest")] string entry)
        {
            logger.LogInformation(entry);
        }
    }
}

次の例では、listTest の localhost Redis インスタンスでキー redisLocalhost をポーリングします。

package com.function.RedisListTrigger;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SimpleListTrigger {
    @FunctionName("SimpleListTrigger")
    public void run(
            @RedisListTrigger(
                name = "req",
                connection = "redisConnectionString",
                key = "listTest",
                pollingIntervalInMs = 1000,
                maxBatchSize = 1)
                String message,
            final ExecutionContext context) {
            context.getLogger().info(message);
    }
}

このサンプルでは、同じ index.js ファイルと、function.json ファイル内のバインディング データを使用します。

index.js ファイルは次のとおりです。

module.exports = async function (context, entry) {
    context.log(entry);
}

function.json のバインディング データは次のとおりです。

{
    "bindings": [
        {
            "type": "redisListTrigger",
            "listPopFromBeginning": true,
            "connection": "redisConnectionString",
            "key": "listTest",
            "pollingIntervalInMs": 1000,
            "maxBatchSize": 16,
            "name": "entry",
            "direction": "in"
        }
      ],
    "scriptFile": "index.js"
}

このサンプルでは、同じ run.ps1 ファイルと、function.json ファイル内のバインディング データを使用します。

run.ps1 ファイルは次のとおりです。

param($entry, $TriggerMetadata)
Write-Host $entry

function.json のバインディング データは次のとおりです。

{
    "bindings": [
        {
            "type": "redisListTrigger",
            "listPopFromBeginning": true,
            "connection": "redisConnectionString",
            "key": "listTest",
            "pollingIntervalInMs": 1000,
            "maxBatchSize": 16,
            "name": "entry",
            "direction": "in"
        }
      ],
    "scriptFile": "run.ps1"
}

このサンプルでは、同じ __init__.py ファイルと、function.json ファイル内のバインディング データを使用します。

Python v1 プログラミング モデルでは、関数フォルダー内の別の function.json ファイルにバインドを定義する必要があります。 詳細については、Python 開発者ガイドを参照してください。

__init__.py ファイルは次のとおりです。

import logging

def main(entry: str):
    logging.info(entry)

function.json のバインディング データは次のとおりです。

{
    "bindings": [
        {
            "type": "redisListTrigger",
            "listPopFromBeginning": true,
            "connection": "redisConnectionString",
            "key": "listTest",
            "pollingIntervalInMs": 1000,
            "maxBatchSize": 16,
            "name": "entry",
            "direction": "in"
        }
      ],
    "scriptFile": "__init__.py"
}

属性

パラメーター Description 必要 Default
Connection キャッシュ connection stringを含むアプリケーション設定の名前。例: <cacheName>.redis.cache.windows.net:6380,password... はい
Key 読み取り元のキー。 このフィールドは、INameResolver を使用して解決できます。 はい
PollingIntervalInMs Redis をポーリングする頻度 (ミリ秒単位)。 省略可能 1000
MessagesPerWorker 各関数インスタンスが処理する必要のあるメッセージの数。 関数がスケーリングする必要のあるインスタンスの数を決めるために使われます。 省略可能 100
Count Redis から一度にポップするエントリの数。 エントリは並列で処理されます。 Redis 6.2 以降で、COUNT および LPOPRPOP 引数を使う場合にのみサポートされます。 省略可能 10
ListPopFromBeginning LPOP を使用して先頭からエントリをポップするか、RPOP を使用して末尾からエントリをポップするかを決定します。 省略可能 true

注釈

パラメーター Description 必要 Default
name "エントリ"
connection キャッシュ connection stringを含むアプリケーション設定の名前。例: <cacheName>.redis.cache.windows.net:6380,password... はい
key このフィールドは、INameResolver を使用して解決できます。 はい
pollingIntervalInMs Redis をポーリングする頻度 (ミリ秒単位)。 省略可能 1000
messagesPerWorker 各関数インスタンスが処理する必要のあるメッセージの数。 関数がスケーリングする必要のあるインスタンスの数を決めるために使われます。 省略可能 100
count Redis から一度に読み取るエントリの数。 これらは並列で処理されます。 省略可能 10
listPopFromBeginning 関数の実行後にストリーム エントリを削除するかどうか。 はい true

構成

次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。

function.json のプロパティ Description 省略可能 Default
type トリガーの名前。 いいえ
listPopFromBeginning 関数の実行後にストリーム エントリを削除するかどうか。 true に設定します。 はい true
connection キャッシュ connection stringを含むアプリケーション設定の名前。例: <cacheName>.redis.cache.windows.net:6380,password... いいえ
key このフィールドは、INameResolver を使用して解決できます。 いいえ
pollingIntervalInMs Redis をポーリングする頻度 (ミリ秒単位)。 はい 1000
messagesPerWorker 各関数インスタンスが処理する必要のあるメッセージの数。 関数がスケーリングする必要のあるインスタンスの数を決めるために使われます。 はい 100
count キャッシュから一度に読み取るエントリの数。 エントリは並列で処理されます。 はい 10
name ? はい
direction in に設定します。 いいえ

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

使用方法

RedisListTrigger はリストから新規要素をポップし、それらのエントリを関数に提示します。 トリガーは、構成可能な固定間隔で Redis をポーリングし、LPOP および RPOP を使用してリストからエントリをポップします。

タイプ Description
byte[] チャネルからのメッセージ。
string チャネルからのメッセージ。
Custom トリガーは Json.NET シリアル化を使用して、チャネルからのメッセージを string からカスタム型にマップします。