共用方式為


Azure Functions 的 Dapr State 輸入繫結

Dapr 狀態輸入繫結可讓您在函式執行期間讀取 Dapr 狀態。

如需 Dapr 延伸模組的安裝和設定詳細資料,請參閱 Dapr 延伸模組概觀

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

執行模型 描述
隔離式背景工作模型 您的函數程式碼在個別的 .NET 背景工作處理序中執行。 搭配支援的 .NET 和 .NET Framework 版本使用。 若要深入了解,請參閱開發 .NET 隔離式背景工作處理序函數
同處理序模型 您的函數程式碼執行的處理序與 Functions 主機處理序相同。 僅支援長期支援 (LTS) 的 .NET 版本。 若要深入了解,請參閱開發 .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 叫用輸入繫結會新增為 extraInput 並與 HTTP 觸發程序配對,該程式是由 app 物件註冊:

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 State 輸入繫結。 若要在 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 State 輸入繫結,請先設定 Dapr State 存放區元件。 若想深入了解要使用的元件及其設定方式,請參閱官方 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 狀態管理。