Azure Functions の Azure Cache for Redis 入力バインド
関数が実行されると、Azure Cache for Redis 入力バインドはキャッシュからデータを取得し、それを入力パラメーターとして関数に渡します。
セットアップと構成の詳細については、概要に関するページをご覧ください。
関数バインドの可用性のスコープ
バインドの種類 | Azure Managed Redis | Azure Cache for Redis |
---|---|---|
入力 | はい | 可 |
重要
Azure Managed Redis または Azure Cache for Redis の Enterprise レベルを使用する場合は、ポート 6380 または 6379 ではなくポート 10000 を使用します。
重要
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 Node.js 開発者ガイドを参照してください。
例
A C# 関数は、次の C# モードのいずれかを使用して作成できます。
- 分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、LTS および 非 LTS バージョンの .NET および .NET Framework で実行されている C# 関数をサポートするために必要です。 分離ワーカー プロセス関数の拡張機能では、
Microsoft.Azure.Functions.Worker.Extensions.*
名前空間が使用されます。 - インプロセス モデル: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。 このモデルの一部では、主に C# ポータルの編集のためにサポートされている C# スクリプトを使用して Functions を実行できます。 インプロセス関数の拡張機能では、
Microsoft.Azure.WebJobs.Extensions.*
名前空間が使用されます。
重要
.NET 関数の場合は、"インプロセス" モデルより、"分離ワーカー モデル" を使うことをお勧めします。 in-process と isolated worker モデルの比較については、azure Functions の .NET の isolated worker モデルと in-process モデルの違いを参照してください。
次のコードでは、pub/sub トリガーのキーを使用して、 GET
コマンドを使用して入力バインディングから値を取得してログに記録します。
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisInputBinding
{
public class SetGetter
{
private readonly ILogger<SetGetter> logger;
public SetGetter(ILogger<SetGetter> logger)
{
this.logger = logger;
}
[Function(nameof(SetGetter))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:set")] string key,
[RedisInput(Common.connectionStringSetting, "GET {Message}")] string value)
{
logger.LogInformation($"Key '{key}' was set to value '{value}'");
}
}
}
Azure Cache for Redis 入力バインドのその他のサンプルは、 GitHub リポジトリで入手できます。
次のコードでは、pub/sub トリガーのキーを使用して、 GET
コマンドを使用して入力バインディングから値を取得してログに記録します。
package com.function.RedisInputBinding;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SetGetter {
@FunctionName("SetGetter")
public void run(
@RedisPubSubTrigger(
name = "key",
connection = "redisConnectionString",
channel = "__keyevent@0__:set")
String key,
@RedisInput(
name = "value",
connection = "redisConnectionString",
command = "GET {Message}")
String value,
final ExecutionContext context) {
context.getLogger().info("Key '" + key + "' was set to value '" + value + "'");
}
}
このfunction.jsonでは、パブリッシュ/サブ トリガーと、Azure Cache for Redis インスタンス上の GET メッセージへの入力バインドの両方を定義します。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
],
"scriptFile": "index.js"
}
この JavaScript コード (index.js から) は、pub/sub トリガーによって提供されるキーに関連するキャッシュされた値を取得してログに記録します。
module.exports = async function (context, key, value) {
context.log("Key '" + key + "' was set to value '" + value + "'");
}
このfunction.jsonでは、パブリッシュ/サブ トリガーと、Azure Cache for Redis インスタンス上の GET メッセージへの入力バインドの両方を定義します。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
この PowerShell コード (run.ps1 から) は、pub/sub トリガーによって提供されるキーに関連するキャッシュされた値を取得してログに記録します。
param($key, $value, $TriggerMetadata)
Write-Host "Key '$key' was set to value '$value'"
次の例では、Azure Cache for Redis インスタンス上の GET メッセージへの入力バインドを含む pub/sub トリガーを使用します。 この例は、v1 と v2 のどちらの Python プログラミング モデルを使用するかによって異なります。
このfunction.jsonでは、パブリッシュ/サブ トリガーと、Azure Cache for Redis インスタンス上の GET メッセージへの入力バインドの両方を定義します。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
]
}
この Python コード (__init__.py から) は、pub/sub トリガーによって提供されるキーに関連するキャッシュされた値を取得してログに記録します。
import logging
def main(key: str, value: str):
logging.info("Key '" + key + "' was set to value '" + value + "'")
これらのプロパティについては、「構成」セクションを参照してください。
属性
Note
このバインドでは、すべてのコマンドがサポートされているわけではありません。 現時点では、1 つの出力を返す読み取りコマンドのみがサポートされています。 完全な一覧は こちらにあります
属性のプロパティ | 説明 |
---|---|
Connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
Command |
GET key 、HGET key field など、すべての引数をスペースで区切ってキャッシュで実行する redis-cli コマンド。 |
注釈
RedisInput
注釈では、次のプロパティがサポートされています。
プロパティ | 説明 |
---|---|
name |
特定の入力バインドの名前。 |
connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
command |
GET key やHGET key field など、すべての引数をスペースで区切ってキャッシュで実行する redis-cli コマンド。 |
構成
次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。
function.json のプロパティ | 説明 |
---|---|
connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
command |
GET key 、HGET key field など、すべての引数をスペースで区切ってキャッシュで実行する redis-cli コマンド。 |
Note
Python v2 と Node.js v4 for Functions では、関数の定義にfunction.jsonは使用されません。 これらの新しい言語バージョンはいずれも、現在、Azure Redis Cache バインドではサポートされていません。
完全な例については、セクションの例を参照してください。
使用方法
入力バインディングは、キャッシュから文字列を受け取る必要があります。
バインディング パラメーターとしてカスタム型を使用すると、拡張機能は JSON 形式の文字列をこのパラメーターのカスタム型に逆シリアル化しようとします。