Azure Functions の Dapr サービス呼び出しトリガー

Azure Functions は、次の Dapr イベントを使用して、Dapr サービス呼び出しでトリガーできます。

Dapr 拡張機能のセットアップと構成の詳細については、「Dapr 拡張機能の概要」を参照してください。

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

実行モデル 説明
分離ワーカー モデル 関数コードは、別の .NET ワーカー プロセスで実行されます。 .NET と .NET Framework のサポートされているバージョンで使います。 詳細については、.NET 分離ワーカー プロセス関数の開発に関する記事を参照してください。
インプロセス モデル 関数コードは、Functions ホスト プロセスと同じプロセスで実行されます。 .NET の長期サポート (LTS) バージョンのみをサポートします。 詳細については、.NET クラス ライブラリ関数の開発に関する記事を参照してください。
[FunctionName("CreateNewOrder")]
public static void Run(
    [DaprServiceInvocationTrigger] JObject payload,
    [DaprState("%StateStoreName%", Key = "order")] out JToken order,
    ILogger log)
{
    log.LogInformation("C# function processed a CreateNewOrder request from the Dapr Runtime.");

    // payload must be of the format { "data": { "value": "some value" } }
    order = payload["data"];
}

Dapr サービス呼び出しトリガーの Java コードを次に示します。

@FunctionName("CreateNewOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "CreateNewOrder") 
)

app オブジェクトを使用して daprInvokeOutput を登録します。

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

app.generic('InvokeOutputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['POST'],
        route: "invoke/{appId}/{methodName}",
        name: "req"
    }),
    return: daprInvokeOutput,
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const payload = await request.text();
        context.log(JSON.stringify(payload));

        return { body: payload };
    }
});

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

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

{
  "bindings": [
    {
      "type": "daprServiceInvocationTrigger",
      "name": "payload",
      "direction": "in"
    }
  ]
}

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
)

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

# Payload must be of the format { "data": { "value": "some value" } }

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

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]

次の例は、v2 Python プログラミング モデルを使用する Dapr サービス呼び出しトリガーを示しています。 Python 関数アプリ コードで 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)

属性

インプロセス モデルでは、DaprServiceInvocationTrigger を使用して、次のプロパティをサポート Dapr サービス呼び出しバインドをトリガーします。

パラメーター 説明
MethodName 省略可能。 Dapr 呼び出し元が使用するメソッドの名前。 指定しない場合、関数の名前がメソッド名として使用されます。

注釈

注釈 DaprServiceInvocationTrigger を使用すると、Dapr ランタイムによって呼び出される関数を作成できます。

要素 説明
methodName メソッド名。

構成

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

プロパティ 説明
type daprServiceInvocationTrigger に設定する必要があります。
name 関数コード内の Dapr データを表す変数の名前。

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

function.json のプロパティ 説明
type daprServiceInvocationTrigger に設定する必要があります。
name 関数コード内の Dapr データを表す変数の名前。

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

プロパティ 説明
method_name Dapr データを表す変数の名前。

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

使用法

Dapr サービス呼び出しトリガーを使用するには、サービス呼び出しトリガーで使用するコンポーネントと、それらを設定する方法の詳細については、Dapr の公式ドキュメントを参照してください。

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

  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 サービス呼び出しの詳細。