Associazione di input del segreto dapr per Funzioni di Azure
L'associazione di input del segreto Dapr consente di leggere i dati dei segreti come input durante l'esecuzione della funzione.
Per informazioni sull'installazione e sulla configurazione dell'estensione Dapr, vedere panoramica dell'estensione Dapr.
È possibile creare una funzione C# usando una delle modalità C# seguenti:
Modello di esecuzione | Descrizione |
---|---|
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 Sviluppare funzioni di processo di lavoro isolato .NET. |
Modello di processo | 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 .NET. |
[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.");
}
Nell'esempio seguente viene creata una funzione "RetreveSecret"
usando l'associazione DaprSecretInput
con 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)
Nell'esempio seguente, l'associazione di input del segreto Dapr viene associata a un trigger Dapr invoke, registrato dall'oggetto app
:
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]}`);
}
}
});
Gli esempi seguenti illustrano i trigger Dapr in un file function.json e nel codice di PowerShell che usano tali associazioni.
Ecco il file function.json per daprServiceInvocationTrigger
:
{
"bindings":
{
"type": "daprSecret",
"direction": "in",
"name": "secret",
"key": "my-secret",
"secretStoreName": "localsecretstore",
"metadata": "metadata.namespace=default"
}
}
Per altre informazioni sulle proprietà dei file function.json, vedere la sezione configurazione.
Nel codice:
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"
L'esempio seguente illustra un'associazione di input dapr Secret, che usa il modello di programmazione Python v2. Per usare l'associazione daprSecret
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="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])
Nel modello in-process usare il DaprSecret
per definire un'associazione di input segreto Dapr, che supporta questi parametri:
Parametro | Descrizione |
---|---|
SecretStoreName | Nome dell'archivio segreto per ottenere il segreto. |
Chiave | Chiave che identifica il nome del segreto da ottenere. |
Metadati UFX | Facoltativo. Matrice di proprietà dei metadati nel formato "key1=value1&key2=value2" . |
L'annotazione DaprSecretInput
consente di avere accesso alla funzione a un segreto.
Elemento | Descrizione |
---|---|
secretStoreName | Nome dell'archivio segreto Dapr. |
key | Valore della chiave privata. |
metadata | Facoltativo. Valori dei metadati. |
Nella tabella seguente vengono illustrate le proprietà di configurazione dell'associazione impostate nel codice.
Proprietà | Descrizione |
---|---|
key | Valore della chiave privata. |
secretStoreName | Nome dell'archivio segreto come definito nel file del componente local-secret-store.yaml. |
metadata | Spazio dei nomi dei metadati. |
Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.
Proprietà di function.json | Descrizione |
---|---|
key | Valore della chiave privata. |
secretStoreName | Nome dell'archivio segreto come definito nel file del componente local-secret-store.yaml. |
metadata | Spazio dei nomi dei metadati. |
Per esempi completi, vedere la sezione di esempio.
Per usare l'associazione di input del segreto Dapr, iniziare configurando un componente dell'archivio segreti Dapr. Per altre informazioni sul componente da usare e su come configurarlo, vedere la documentazione ufficiale di Dapr.
Per usare daprSecret
in Python v2, configurare il progetto con le dipendenze corrette.
Nel file
requirements.text
aggiungere la riga seguente:azure-functions==1.18.0b3
Nel terminale installare la libreria Python.
pip install -r .\requirements.txt
Modificare il file
local.setting.json
con la configurazione seguente:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1