Partilhar via


Vinculação de saída de Estado de Dapr para o Azure Functions

A ligação de saída de estado Dapr permite salvar um valor em um estado Dapr durante a execução de uma função.

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

Exemplo

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

Modelo de execução Description
Modelo de trabalhador isolado Seu código de função é executado em um processo de trabalho .NET separado. Use com versões suportadas do .NET e .NET Framework. Para saber mais, consulte Desenvolver funções de processo de trabalho isoladas do .NET.
Modelo em processo Seu código de função é executado no mesmo processo que o processo de host de funções. Suporta apenas versões LTS (Long Term Support) do .NET. Para saber mais, consulte Desenvolver funções de biblioteca de classes .NET.

O exemplo a seguir demonstra o uso da ligação de saída de estado Dapr para persistir um novo estado no armazenamento 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 ligação de saída de estado Dapr é emparelhada com um gatilho app HTTP, que é registrado pelo 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 };
    }
});

Os exemplos a seguir mostram gatilhos Dapr em um arquivo function.json e código PowerShell que usa essas associações.

Aqui está o arquivo function.json para daprState saída:

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

Para obter mais informações sobre function.json propriedades do arquivo, consulte a seção Configuração .

No código:

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 ligação de saída Dapr State, que usa o modelo de programação Python v2. Para usar daprState no código do aplicativo de função 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'

Atributos

No modelo em processo, use o DaprState para definir uma ligação de saída de estado Dapr, que suporta estes parâmetros:

Parâmetro Description Pode ser enviado via Atributo Pode ser enviado via RequestBody
StateStore O nome do armazenamento de estado para salvar o estado. ✔️
Chave O nome da chave para salvar o estado dentro do armazenamento de estado. ✔️ ✔️
Valor Obrigatório. O valor que está sendo armazenado. ✔️

Anotações

A DaprStateOutput anotação permite que você funcione acessar um armazenamento de estado.

Elemento Description Pode ser enviado via Atributo Pode ser enviado via RequestBody
stateStore O nome do armazenamento de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado dentro do armazenamento de estado. ✔️ ✔️
valor Obrigatório. O valor que está sendo armazenado. ✔️

Configuração

A tabela a seguir explica as propriedades de configuração de vinculação definidas no código.

Property Description Pode ser enviado via Atributo Pode ser enviado via RequestBody
stateStore O nome do armazenamento de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado dentro do armazenamento de estado. ✔️ ✔️
valor Obrigatório. O valor que está sendo armazenado. ✔️

A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json .

function.json propriedade Description Pode ser enviado via Atributo Pode ser enviado via RequestBody
stateStore O nome do armazenamento de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado dentro do armazenamento de estado. ✔️ ✔️
valor Obrigatório. O valor que está sendo armazenado. ✔️

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

Property Description Pode ser enviado via Atributo Pode ser enviado via RequestBody
stateStore O nome do armazenamento de estado para salvar o estado. ✔️
key O nome da chave para salvar o estado dentro do armazenamento de estado. ✔️ ✔️
valor Obrigatório. O valor que está sendo armazenado. ✔️

Se as propriedades forem definidas em Atributos e RequestBody, será dada prioridade aos dados fornecidos em RequestBody.

Consulte a seção Exemplo para obter exemplos completos.

Utilização

Para usar a ligação de saída de estado Dapr, comece configurando um componente de armazenamento de estado Dapr. Você pode saber mais sobre qual componente usar e como configurá-lo na documentação oficial do Dapr.

Para usar o daprState em Python v2, configure seu projeto com as dependências corretas.

  1. Crie e ative um ambiente virtual.

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

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

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

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Próximos passos

Saiba mais sobre a gestão estadual do Dapr.