Azure Functions に対する Dapr 状態入力バインド

Dapr 状態入力バインドを使うと、関数の実行中に Dapr の状態を読み取ることができます。

Dapr 拡張機能のセットアップと構成について詳しくは、Dapr 拡張機能の概要に関する記事をご覧ください。

例

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

実行モデル 説明
分離ワーカー モデル 関数コードは、別の .NET ワーカー プロセスで実行されます。 .NET と .NET Framework のサポートされているバージョンで使います。 詳細については、 分離ワーカー モデルで C# Azure Functions を実行するためのガイドを参照してください。
インプロセス モデル 関数コードは、Functions ホスト プロセスと同じプロセスで実行されます。 .NET の長期サポート (LTS) バージョンのみをサポートします。 詳細については、「Azure Functions を使用する C# クラス ライブラリ関数を開発する」を参照してください。
[FunctionName("StateInputBinding")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] string state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    return new OkObjectResult(state);
}

次の例では、"RetrieveOrder" バインドと DaprStateInput を使って、DaprServiceInvocationTrigger 関数を作成します。

@FunctionName("RetrieveOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "RetrieveOrder") 
        String payload,
        @DaprStateInput(
            stateStore = "%StateStoreName%",
            key = "order")
        String product,
        final ExecutionContext context)

次の例では、Dapr 呼び出し入力バインドは、extraInput として追加され、app オブジェクトによって登録される HTTP トリガーとペアになっています。

const { app, trigger } = require('@azure/functions');

app.generic('StateInputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['GET'],
        route: "state/{key}",
        name: "req"
    }),
    extraInputs: [daprStateInput],
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const daprStateInputValue = context.extraInputs.get(daprStateInput);
        // print the fetched state value
        context.log(daprStateInputValue);

        return daprStateInputValue;
    }
});

次の例は、function.json ファイル内の Dapr トリガーと、それらのバインドを使用する PowerShell コードを示しています。

の daprState ファイルを次に示します。

{
  "bindings": 
    {
      "type": "daprState",
      "direction": "in",
      "key": "order",
      "stateStore": "%StateStoreName%",
      "name": "order"
    }
}

function.json ファイルのプロパティについて詳しくは、「構成」セクションをご覧ください。

コード内で以下のように指定します。

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload, $order
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a RetrieveOrder request from the Dapr Runtime."

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $order | ConvertTo-Json

Write-Host "$jsonString"

次の例では、v2 Python プログラミング モデルを使用する Dapr 状態入力バインドを示します。 Python 関数アプリ コードで daprState と共に daprServiceInvocationTrigger バインドを使うには:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

属性

インプロセス モデルでは、DaprState を使って、次のパラメーターをサポートする関数に Dapr の状態を読み取ります。

パラメーター 説明
StateStore 状態を取得する状態ストアの名前。
キー 指定した状態ストアから取得するキーの名前。

注釈

DaprStateInput 注釈を使うと、Dapr の状態を関数に読み取ることができます。

要素 説明
stateStore Dapr 状態ストアの名前。
キー の 状態ストアのキーの値。

構成

次の表では、コードで設定するバインド構成プロパティについて説明します。

プロパティ 説明
stateStore 状態ストアの名前。
キー の 指定した状態ストアから取得するキーの名前。

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

function.json のプロパティ 説明
キー の 指定した状態ストアから取得するキーの名前。
stateStore 状態ストアの名前。

次の表は、Python コードで設定する @dapp.dapr_state_input のバインド構成プロパティについて説明しています。

プロパティ 説明
state_store 状態ストアの名前。
キー の 秘密鍵の値。 指定した状態ストアから取得するキーの名前。

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

使用法

Dapr 状態入力バインドを使うには、最初に Dapr 状態ストア コンポーネントを設定します。 使用するコンポーネントとその設定方法の詳細については、Dapr の公式ドキュメントを参照してください。

Python v2 で daprState を使用するには、正しい依存関係でプロジェクトを設定します。

  1. 仮想環境を作成してアクティブにする

  2. requirements.text ファイルに、次の行を追加します。

    azure-functions==1.18.0b3
    
  3. ターミナルで、Python ライブラリをインストールします。

    pip install -r .\requirements.txt
    
  4. 次の構成で local.setting.json ファイルを変更します。

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

次のステップ

Dapr の状態管理の詳細を理解する。