Compartilhar via


Associação de saída do Estado dapr para o Azure Functions

A associação de saída de estado dapr permite que você salve um valor em um estado dapr durante uma execução de função.

Para obter mais informações sobre detalhes de instalação e configuração da extensão Dapr, consulte a Visão geral da extensão Dapr.

Example

A função C# pode ser criada usando um dos seguintes modos C#:

Execution model Description
Modelo de trabalho isolado O código de função é executado em um processo de trabalho do .NET separado. Use com versões com suporte do .NET e do .NET Framework. Para saber mais, consulte Guia para executar o C# Azure Functions no modelo de trabalho isolado.
In-process model Seu código de função é executado no mesmo processo que o processo de host do Functions. Dá suporte apenas a versões LTS (suporte de longo prazo) do .NET. Para saber mais, confira Desenvolver funções da biblioteca de classes C# usando o Azure Functions.

O exemplo a seguir demonstra o uso da associação de saída de estado dapr para manter um novo estado no repositório de estado.

[FunctionName("StateOutputBinding")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] IAsyncCollector<string> state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    await state.AddAsync(requestBody);

    return new OkResult();
}

O exemplo a seguir cria uma "CreateNewOrderHttpTrigger" função usando a DaprStateOutput associação com um HttpTrigger:

@FunctionName("CreateNewOrderHttpTrigger")
public String run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
        @DaprStateOutput(
            stateStore = "%StateStoreName%",
            key = "product")
        OutputBinding<String> product,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger (CreateNewOrderHttpTrigger) processed a request.");
}

No exemplo a seguir, a associação de saída de estado dapr é emparelhada com um gatilho HTTP, que é registrado pelo app objeto:

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

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

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

        return { value : payload };
    }
});

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 output:

{
  "bindings": 
    {
      "type": "daprState",
      "stateStore": "%StateStoreName%",
      "direction": "out",
      "name": "order",
      "key": "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
)

# 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"]

O exemplo a seguir mostra uma associação de saída do Estado dapr, que usa o modelo de programação do Python v2. Para usar daprState em seu código do aplicativo de funções do Python:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="HttpTriggerFunc")
@app.route(route="req", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_state_output(arg_name="state", state_store="statestore", key="newOrder")
def main(req: func.HttpRequest, state: func.Out[str] ) -> str:
    # request body must be passed this way '{\"value\": { \"key\": \"some value\" } }'
    body = req.get_body()
    if body is not None:
        state.set(body.decode('utf-8'))
        logging.info(body.decode('utf-8'))
    else:
        logging.info('req body is none')
    return 'ok'

Attributes

In the in-process model, use the DaprState to define a Dapr state output binding, which supports these parameters:

Parameter Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
StateStore O nome do repositório de estado para salvar o estado. ✔️
Key O nome da chave para salvar o estado no repositório de estado. ✔️ ✔️
Value Required. O valor que está sendo armazenado. ✔️

Annotations

A DaprStateOutput anotação permite que você acesse um repositório de estado.

Element Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
stateStore O nome do repositório de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado no repositório de estado. ✔️ ✔️
value Required. O valor que está sendo armazenado. ✔️

Configuration

A tabela a seguir explica as propriedades de configuração de associação que você definiu no código.

Property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
stateStore O nome do repositório de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado no repositório de estado. ✔️ ✔️
value Required. O valor que está sendo armazenado. ✔️

The following table explains the binding configuration properties that you set in the function.json file.

function.json property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
stateStore O nome do repositório de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado no repositório de estado. ✔️ ✔️
value Required. O valor que está sendo armazenado. ✔️

A tabela a seguir explica as propriedades de configuração de associação para @dapp.dapr_state_output definidas no código do Python.

Property Description Pode ser enviado por meio de Atributo Pode ser enviado por meio de RequestBody
stateStore O nome do repositório de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado no repositório de estado. ✔️ ✔️
value Required. O valor que está sendo armazenado. ✔️

Se as propriedades forem definidas em Atributos e RequestBody, a prioridade será fornecida aos dados disponíveis em RequestBody.

See the Example section for complete examples.

Usage

Para usar a associação de saída de estado dapr, comece configurando um componente do repositório de estado dapr. Saiba mais sobre qual componente usar e como configurá-lo na documentação oficial do Dapr.

Para usar a opção daprState no Python v2, configure seu projeto com as dependências corretas.

  1. Criar e ativar um ambiente virtual.

  2. No arquivo requirements.text, adicione a seguinte linha:

    azure-functions==1.18.0b3
    
  3. No terminal, instale a biblioteca do Python.

    pip install -r .\requirements.txt
    
  4. Modifique seu arquivo local.setting.json com a seguinte configuração:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Saiba mais sobre o gerenciamento do Estado do Dapr.