Azure Functions 用の Azure Cache for Redis 出力バインド
Azure Cache for Redis の出力バインドを使用すると、キャッシュで使用可能な一連のトリガーに基づいて、キャッシュ内のキーを変更できます。
セットアップと構成の詳細については、概要に関するページをご覧ください。
重要
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.*
名前空間が使用されます。
次の例は、同じ Redis インスタンスへの出力バインドを持つ set イベントの pub/sub トリガーを示しています。 set イベントはキャッシュをトリガーし、出力バインディングは関数をトリガーしたキーの delete コマンドを返します。
重要
.NET 関数の場合は、"インプロセス" モデルより、"分離ワーカー モデル" を使うことをお勧めします。 in-process と isolated worker モデルの比較については、azure Functions の .NET の isolated worker モデルと in-process モデルの違いを参照してください。
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisOutputBinding
{
internal class SetDeleter
{
[Function(nameof(SetDeleter))]
[RedisOutput(Common.connectionString, "DEL")]
public static string Run(
[RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] string key,
ILogger logger)
{
logger.LogInformation($"Deleting recently SET key '{key}'");
return key;
}
}
}
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.WebJobs.Extensions.Redis.Samples.RedisOutputBinding
{
internal class SetDeleter
{
[FunctionName(nameof(SetDeleter))]
public static void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:set")] string key,
[Redis(Common.connectionStringSetting, "DEL")] out string[] arguments,
ILogger logger)
{
logger.LogInformation($"Deleting recently SET key '{key}'");
arguments = new string[] { key };
}
}
}
次の例は、同じ Redis インスタンスへの出力バインドを持つ set イベントの pub/sub トリガーを示しています。 set イベントはキャッシュをトリガーし、出力バインディングは関数をトリガーしたキーの delete コマンドを返します。
package com.function.RedisOutputBinding;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SetDeleter {
@FunctionName("SetDeleter")
@RedisOutput(
name = "value",
connection = "redisConnectionString",
command = "DEL")
public String run(
@RedisPubSubTrigger(
name = "key",
connection = "redisConnectionString",
channel = "__keyevent@0__:set")
String key,
final ExecutionContext context) {
context.getLogger().info("Deleting recently SET key '" + key + "'");
return key;
}
}
この例では、同じ Redis インスタンスへの出力バインドを使用して、set イベントの pub/sub トリガーを示します。 set イベントはキャッシュをトリガーし、出力バインディングは関数をトリガーしたキーの delete コマンドを返します。
バインドは、次の 'function.json' ファイルで定義されています。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "DEL",
"name": "$return",
"direction": "out"
}
],
"scriptFile": "index.js"
}
index.js
ファイルのこのコードは、トリガーからキーを受け取り、それを出力バインドに返して、キャッシュされた項目を削除します。
module.exports = async function (context, key) {
context.log("Deleting recently SET key '" + key + "'");
return key;
}
この例では、同じ Redis インスタンスへの出力バインドを使用して、set イベントの pub/sub トリガーを示します。 set イベントはキャッシュをトリガーし、出力バインディングは関数をトリガーしたキーの delete コマンドを返します。
バインドは、次の function.json
ファイルで定義されています。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisLocalhost",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisLocalhost",
"command": "DEL",
"name": "retVal",
"direction": "out"
}
],
"scriptFile": "run.ps1"
}
run.ps1
ファイルのこのコードは、トリガーからキーを受け取り、それを出力バインドに渡して、キャッシュされた項目を削除します。
param($key, $TriggerMetadata)
Write-Host "Deleting recently SET key '$key'"
Push-OutputBinding -Name retVal -Value $key
この例では、同じ Redis インスタンスへの出力バインドを使用して、set イベントの pub/sub トリガーを示します。 set イベントはキャッシュをトリガーし、出力バインディングは関数をトリガーしたキーの delete コマンドを返します。
バインドは、次の function.json
ファイルで定義されています。
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisLocalhost",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisLocalhost",
"command": "DEL",
"name": "$return",
"direction": "out"
}
],
"scriptFile": "__init__.py"
}
__init__.py
ファイルのこのコードは、トリガーからキーを受け取り、それを出力バインドに渡して、キャッシュされた項目を削除します。
import logging
def main(key: str) -> str:
logging.info("Deleting recently SET key '" + key + "'")
return key
属性
Note
このバインドでは、すべてのコマンドがサポートされています。
出力バインド パラメーターを定義する方法は、C# 関数が in-process または isolated worker プロセスで実行されるかによって異なります。
出力バインドは、次のように定義されます。
Definition | 例 | 説明 |
---|---|---|
out パラメーターの場合 |
[Redis(<Connection>, <Command>)] out string <Return_Variable> |
メソッドによって返される文字列変数は、バインディングが特定のキャッシュに対してコマンドを実行するために使用するキー値です。 |
この場合、メソッドによって返される型は、バインディングが特定のキャッシュに対してコマンドを実行するために使用するキー値です。
関数に複数の出力バインドがある場合は、代わりに、バインド属性をキー値である型のプロパティに適用できます。このプロパティは、バインディングが特定のキャッシュに対してコマンドを実行するために使用します。 詳しくは、「複数の出力バインディング」をご覧ください。
C# プロセス モードに関係なく、出力バインド属性でも同じプロパティがサポートされます。
属性のプロパティ | 説明 |
---|---|
Connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
Command |
キャッシュで実行される redis-cli コマンド (例: DEL )。 |
注釈
RedisOutput
注釈では、次のプロパティがサポートされています。
プロパティ | 説明 |
---|---|
name |
特定の入力バインドの名前。 |
connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
command |
キャッシュで実行される redis-cli コマンド (例: DEL )。 |
構成
次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。
プロパティ | 説明 |
---|---|
name |
特定の入力バインドの名前。 |
connection |
キャッシュ 接続文字列を含むアプリケーション設定の名前。次に例を示します。<cacheName>.redis.cache.windows.net:6380,password... |
command |
キャッシュで実行される redis-cli コマンド (例: DEL )。 |
完全な例については、セクションの例を参照してください。
使用方法
出力は、特定のコマンドを適用するキャッシュ エントリのキーである文字列を返します。
Azure Functions インスタンスからデプロイ内の Redis Cache への接続には、3 種類あります。 ローカル開発では、サービス プリンシパル シークレットを使用することもできます。 Connection
が関数でRedis
に設定されていると仮定して、appsettings
を使用して次の種類のクライアント認証を構成します。