Condividi tramite


Associazione di input dello stato Dapr per Funzioni di Azure

L'associazione di input dello stato Dapr consente di leggere lo stato Dapr durante un'esecuzione di funzione.

Per informazioni sull'installazione e sulla configurazione dell'estensione Dapr, vedere panoramica dell'estensione Dapr.

Example

È possibile creare una funzione C# usando una delle modalità C# seguenti:

Execution model Description
Modello di lavoro isolato Il codice della funzione viene eseguito in un processo di lavoro .NET separato. Usare con le versioni supportate di .NET e .NET Framework. Per altre informazioni, vedere Guida per l'esecuzione di Funzioni di Azure C# nel modello di lavoro isolato.
In-process model Il codice della funzione viene eseguito nello stesso processo del processo host di Funzioni. Supporta solo versioni LTS (Long Term Support) di .NET. Per altre informazioni, vedere Sviluppare funzioni della libreria di classi C# usando Funzioni di Azure.
[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);
}

Nell'esempio seguente viene creata una funzione "RetrieveOrder" usando l'associazione DaprStateInput con DaprServiceInvocationTrigger:

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

Nell'esempio seguente, l'associazione di input Dapr invoke viene aggiunta come extraInput e abbinata a un trigger HTTP, registrato dall'oggetto 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;
    }
});

The following examples show Dapr triggers in a function.json file and PowerShell code that uses those bindings.

Here's the function.json file for daprState:

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

For more information about function.json file properties, see the Configuration section.

In code:

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"

L'esempio seguente illustra un'associazione di input Dapr Secret, che usa il modello di programmazione Python v2. Per usare l'associazione daprState insieme a daprServiceInvocationTrigger nel codice dell'app per le funzioni Python:

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)

Attributes

In the in-process model, use the DaprState to read Dapr state into your function, which supports these parameters:

Parameter Description
StateStore Nome dell'archivio stati per recuperare lo stato.
Key Nome della chiave da recuperare dall'archivio stati specificato.

Annotations

L'annotazione DaprStateInput consente di leggere lo stato Dapr nella funzione.

Element Description
stateStore Nome dell'archivio di stato Dapr.
key Valore della chiave dell'archivio stati.

Configuration

Nella tabella seguente vengono illustrate le proprietà di configurazione dell'associazione impostate nel codice.

Property Description
stateStore Nome dell'archivio stati.
key Nome della chiave da recuperare dall'archivio stati specificato.

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.

function.json property Description
key Nome della chiave da recuperare dall'archivio stati specificato.
stateStore Nome dell'archivio stati.

La tabella seguente illustra le proprietà di configurazione dell'associazione per @dapp.dapr_state_input impostate nel codice Python.

Property Description
state_store Nome dell'archivio stati.
key Valore della chiave privata. Nome della chiave da recuperare dall'archivio stati specificato.

See the Example section for complete examples.

Usage

Per usare l'associazione di input dello stato Dapr, iniziare configurando un componente dell'archivio stati Dapr. Per altre informazioni sul componente da usare e su come configurarlo, vedere la documentazione ufficiale di Dapr.

Per usare daprState in Python v2, configurare il progetto con le dipendenze corrette.

  1. Creare e attivare un ambiente virtuale

  2. Nel file requirements.text aggiungere la riga seguente:

    azure-functions==1.18.0b3
    
  3. Nel terminale installare la libreria Python.

    pip install -r .\requirements.txt
    
  4. Modificare il file local.setting.json con la configurazione seguente:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Altre informazioni sulla gestione dello stato Dapr.