Share via


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

重要

Azure Functions の Dapr 拡張機能は現在プレビュー段階であり、Azure Container Apps 環境でのみサポートされています。

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

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

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

実行モデル 説明
分離ワーカー モデル 関数コードは、別の .NET ワーカー プロセスで実行されます。 .NET と .NET Framework のサポートされているバージョンで使います。 詳細については、.NET 分離ワーカー プロセス関数の開発に関する記事を参照してください。
インプロセス モデル 関数コードは、Functions ホスト プロセスと同じプロセスで実行されます。 .NET の長期サポート (LTS) バージョンのみをサポートします。 詳細については、.NET クラス ライブラリ関数の開発に関する記事を参照してください。
[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);
}

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

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

次の例では、Dapr 呼び出し入力バインドが HTTP トリガーとして 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 コードを示しています。

daprStatefunction.json ファイルを次に示します。

{
  "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 関数アプリ コードで daprServiceInvocationTrigger と共に daprState バインドを使うには:

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 状態ストアの名前。
key 状態ストアのキーの値。

構成

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

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

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

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

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

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

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

使用法

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 の状態管理の詳細を理解する。