Delen via


Dapr Secret-invoerbinding voor Azure Functions

Met de Dapr-geheime invoerbinding kunt u geheimengegevens lezen als invoer tijdens de uitvoering van de functie.

Zie het overzicht van de Dapr-extensie voor meer informatie over het instellen en configureren van de Dapr-extensie.

Example

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

Execution model Description
Geïsoleerde werkrolmodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie Handleiding voor het uitvoeren van C# Azure Functions in het geïsoleerde werkrolmodel voor meer informatie.
In-process model Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie C#-klassebibliotheekfuncties ontwikkelen met behulp van Azure Functions voor meer informatie.
[FunctionName("RetrieveSecret")]
public static void Run(
    [DaprServiceInvocationTrigger] object args,
    [DaprSecret("kubernetes", "my-secret", Metadata = "metadata.namespace=default")] IDictionary<string, string> secret,
    ILogger log)
{
    log.LogInformation("C# function processed a RetrieveSecret request from the Dapr Runtime.");
}

In het volgende voorbeeld wordt een "RetrieveSecret" functie gemaakt met behulp van de DaprSecretInput binding met de DaprServiceInvocationTrigger:

@FunctionName("RetrieveSecret")
public void run(
    @DaprServiceInvocationTrigger(
        methodName = "RetrieveSecret") Object args,
    @DaprSecretInput(
        secretStoreName = "kubernetes", 
        key = "my-secret", 
        metadata = "metadata.namespace=default") 
        Map<String, String> secret,
    final ExecutionContext context)

In het volgende voorbeeld wordt de Dapr-geheime invoerbinding gekoppeld aan een Dapr-aanroeptrigger, die is geregistreerd door het app object:

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

app.generic('RetrieveSecret', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    extraInputs: [daprSecretInput],
    handler: async (request, context) => {
        context.log("Node function processed a RetrieveSecret request from the Dapr Runtime.");
        const daprSecretInputValue = context.extraInputs.get(daprSecretInput);

        // print the fetched secret value
        for (var key in daprSecretInputValue) {
            context.log(`Stored secret: Key=${key}, Value=${daprSecretInputValue[key]}`);
        }
    }
});

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

{
  "bindings": 
    {
      "type": "daprSecret",
      "direction": "in",
      "name": "secret",
      "key": "my-secret",
      "secretStoreName": "localsecretstore",
      "metadata": "metadata.namespace=default"
    }
}

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, $secret
)

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

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

Write-Host "$jsonString"

In het volgende voorbeeld ziet u een Dapr Secret-invoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. De binding naast de daprSecret code van uw Python-functie-app gebruikendaprServiceInvocationTrigger:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveSecret")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveSecret")
@app.dapr_secret_input(arg_name="secret", secret_store_name="localsecretstore", key="my-secret", metadata="metadata.namespace=default")
def main(payload, secret: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveSecret  --data '{}'
    logging.info('Python function processed a RetrieveSecret request from the Dapr Runtime.')
    secret_dict = json.loads(secret)

    for key in secret_dict:
        logging.info("Stored secret: Key = " + key +
                     ', Value = ' + secret_dict[key])

Attributes

In the in-process model, use the DaprSecret to define a Dapr secret input binding, which supports these parameters:

Parameter Description
SecretStoreName De naam van de geheime opslag om het geheim op te halen.
Key De sleutel die de naam van het geheim aandued.
Metadata Optional. Een matrix met metagegevenseigenschappen in het formulier "key1=value1&key2=value2".

Annotations

Met de DaprSecretInput aantekening hebt u toegang tot een geheim voor uw functie.

Element Description
secretStoreName De naam van het Dapr-geheimarchief.
key De geheime sleutelwaarde.
metadata Optional. De metagegevenswaarden.

Configuration

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in de code hebt ingesteld.

Property Description
key De geheime sleutelwaarde.
secretStoreName Name of the secret store as defined in the local-secret-store.yaml component file.
metadata De naamruimte van de metagegevens.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json property Description
key De geheime sleutelwaarde.
secretStoreName Name of the secret store as defined in the local-secret-store.yaml component file.
metadata De naamruimte van de metagegevens.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen @dapp.dapr_secret_input uitgelegd die u in uw Python-code hebt ingesteld.

Property Description
secret_store_name De naam van het geheime archief.
key De geheime sleutelwaarde.
metadata De naamruimte van de metagegevens.

See the Example section for complete examples.

Usage

Als u de dapr-geheime invoerbinding wilt gebruiken, begint u met het instellen van een Dapr-onderdeel voor het geheimarchief. Meer informatie over welk onderdeel u moet gebruiken en hoe u dit kunt instellen in de officiële Dapr-documentatie.

To use the daprSecret in Python v2, set up your project with the correct dependencies.

  1. Een virtuele omgeving maken en activeren.

  2. Voeg in het requirements.text bestand de volgende regel toe:

    azure-functions==1.18.0b3
    
  3. Installeer de Python-bibliotheek in de terminal.

    pip install -r .\requirements.txt
    
  4. Wijzig uw local.setting.json bestand met de volgende configuratie:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Next steps

Meer informatie over Dapr-geheimen.