Estensione Dapr per Funzioni di Azure
L'estensione Dapr per Funzioni di Azure è un set di strumenti e servizi che consentono agli sviluppatori di integrare facilmente Funzioni di Azure con la piattaforma Distributed Application Runtime (Dapr).
Funzioni di Azure è un servizio di calcolo basato su eventi che fornisce un set di trigger e binding per connettersi facilmente ad altri servizi di Azure. Dapr offre un set di blocchi predefiniti e procedure consigliate per la creazione di applicazioni distribuite, tra cui microservizi, gestione dello stato, messaggistica pub/sub e altro ancora.
Grazie all'integrazione tra Dapr e Funzioni, è possibile creare funzioni che reagiscono ad eventi da Dapr o da sistemi esterni.
Azione | Direzione | Type |
---|---|---|
Trigger in binding di input Dapr | N/D | daprBindingTrigger |
Trigger in una chiamata al servizio Dapr | N/D | daprServiceInvocationTrigger |
Attivare in una sottoscrizione dell'argomento Dapr | N/D | daprTopicTrigger |
Eseguire il pull dello stato Dapr per un'esecuzione | In | daprState |
Eseguire il pull dei segreti Dapr per un'esecuzione | In | daprSecret |
Salvare un valore in uno stato Dapr | Verso l'esterno | daprState |
Richiamare un'altra app Dapr | Verso l'esterno | daprInvoke |
Pubblicare un messaggio in un argomento Dapr | Verso l'esterno | daprPublish |
Inviare un valore a un binding di output Dapr | Verso l'esterno | daprBinding |
Installare l'estensione
Il pacchetto NuGet di estensione installato dipende dal processo di lavoro in-process o isolato in modalità C# in uso nell'app per le funzioni:
Questa estensione è disponibile installando il pacchetto NuGet versione 1.0.0.
Uso dell'interfaccia della riga di comando di .NET:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
Installare il bundle
È possibile aggiungere l'estensione aggiungendo o sostituendo il codice seguente nel file host.json
:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Abilitazione Distributed Apps Runtime
È possibile configurare Dapr usando diversi [argomenti e annotazioni][dapr-args] in base al contesto di runtime. È possibile configurare Dapr per Funzioni di Azure tramite due canali:
- Modelli IaC (Infrastructure as Code), come nei modelli Bicep o Azure Resource Manager (ARM)
- Il portale di Azure
Quando si usa un modello IaC, specificare gli argomenti seguenti nella sezione properties
della definizione della risorsa dell'app contenitore.
DaprConfig: {
enabled: true
appId: '${envResourceNamePrefix}-funcapp'
appPort: 3001
httpReadBufferSize: ''
httpMaxRequestSize: ''
logLevel: ''
enableApiLogging: true
}
I valori di configurazione di Dapr appena citati sono considerati modifiche all'ambito dell'applicazione. Quando si esegue un'app contenitore in modalità di revisione multipla, le modifiche apportate a queste impostazioni non creeranno una nuova revisione. Tutte le revisioni esistenti vengono invece riavviate per assicurarsi che siano configurate con i valori più aggiornati.
Quando si configura Dapr usando il portale di Azure, passare all'app per le funzioni e selezionare Dapr dal menu a sinistra:
Porte e listener Dapr
Quando si attiva una funzione da Dapr, l'estensione espone automaticamente la porta 3001
per ascoltare le richieste in ingresso dal sidecar Dapr.
Importante
La porta 3001
viene esposta e ascoltata solo se nell'app per le funzioni è definito un trigger Dapr. Quando si usa Dapr, il sidecar attende di ricevere una risposta dalla porta definita prima di completare la creazione di istanze. Non definire l'annotazione dapr.io/port
o --app-port
a meno che non si disponga di un trigger. Questo potrebbe far bloccare l'applicazione dal sidecar Dapr.
Se si usano solo associazioni di input e output, la porta 3001
non deve essere esposta o definita.
Per impostazione predefinita, quando Funzioni di Azure tenta di comunicare con Dapr, chiama Dapr dalla porta risolta dalla variabile di ambiente DAPR_HTTP_PORT
. Per impostazione predefinita, se tale variabile è Null, viene usata la porta 3500
.
È possibile eseguire l'override dell'indirizzo Dapr usato dalle associazioni di input e output impostando la proprietà DaprAddress
in function.json
per il binding (o l'attributo). Per impostazione predefinita, usa http://localhost:{DAPR_HTTP_PORT}
.
L'app per le funzioni espone ancora un'altra porta e un altro endpoint per elementi come i trigger HTTP, che per impostazione predefinita in locale è 7071
, ma in un contenitore, per impostazione predefinita è 80
.
Tipi di associazioni
I tipi di associazione supportati per .NET dipendono sia dalla versione dell'estensione che dalla modalità di esecuzione di C#, che può essere una delle seguenti:
Una libreria di classi in-process è una funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
L'estensione Dapr supporta i tipi di parametro in base alla tabella seguente.
Binding | Tipi di parametro |
---|---|
Trigger Dapr | daprBindingTrigger daprServiceInvocationTrigger daprTopicTrigger |
Input Dapr | daprState daprSecret |
Output Dapr | daprState daprInvoke daprPublish daprBinding |
Per esempi relativi all'uso di questi tipi, vedere il repository GitHub per l'estensione.
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite i campioni forniti.
Esempi | Descrizione |
---|---|
Guida introduttiva | Introduzione all'uso dell'associazione Dapr Pub/sub e HttpTrigger . |
Dapr Kafka | Informazioni su come usare l'estensione Dapr di Funzioni di Azure con il componente Dapr binding Kafka. |
In-process .NET | Informazioni su come usare il modello in-process di Funzioni di Azure per l'integrazione con più componenti Dapr in .NET, ad esempio chiamata al servizio, pub/sub, associazioni e gestione dello stato. |
.NET Isolato | Eseguire l'integrazione con i componenti Dapr in .NET usando il modello di esecuzione out-of-proc (OOP) di Funzioni di Azure. |
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite i campioni forniti.
Esempi | Descrizione |
---|---|
Funzioni Java | Informazioni su come usare l'estensione Dapr di Funzioni di Azure con Java. |
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite i campioni forniti.
Esempi | Descrizione |
---|---|
Guida introduttiva | Introduzione all'uso dell'associazione Dapr Pub/sub e HttpTrigger . |
Dapr Kafka | Informazioni su come usare l'estensione Dapr di Funzioni di Azure con il componente Dapr binding Kafka. |
JavaScript | Eseguire un'applicazione di funzione Dapr JavaScript e integrarla con Dapr Service Invocation, Pub/sub, Binding e State Management usando Funzioni di Azure. |
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite i campioni forniti.
Esempi | Descrizione |
---|---|
Funzioni di PowerShell | Informazioni su come usare l'estensione Dapr di Funzioni di Azure con PowerShell. |
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite i campioni forniti.
Esempi | Descrizione |
---|---|
Dapr Kafka | Informazioni su come usare l'estensione Dapr di Funzioni di Azure con il componente Dapr binding Kafka. |
Python v1 | Eseguire un'applicazione Python con Dapr e usare il modello di programmazione Python v1 di Funzioni di Azure per l'integrazione con i componenti Dapr. |
Python v2 | Avviare un'applicazione Dapr usando il modello di programmazione Python v2 di Funzioni di Azure per l'integrazione con i componenti Dapr. |
Risoluzione dei problemi
Questa sezione descrive come risolvere i problemi che potrebbero verificarsi quando si usa l'estensione Dapr per Funzioni di Azure.
Verificare che Dapr sia abilitato nell'ambiente
Se si usano binding e trigger Dapr in Funzioni di Azure e Dapr non è abilitato nell'ambiente, è possibile che venga visualizzato il messaggio di errore: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.
; per abilitare Dapr nell'ambiente:
Se la funzione di Azure viene distribuita in App Contenitore di Azure, vedere istruzioni di abilitazione Dapr per l'estensione Dapr per Funzioni di Azure.
Se la funzione di Azure viene distribuita in Kubernetes, verificare che la configurazione YAML della distribuzione abbia le annotazioni seguenti:
annotations: ... dapr.io/enabled: "true" dapr.io/app-id: "functionapp" # You should only set app-port if you are using a Dapr trigger in your code. dapr.io/app-port: "<DAPR_APP_PORT>" ...
Se si esegue la funzione di Azure in locale, eseguire il comando seguente per assicurarsi di eseguire l'app per le funzioni con Dapr:
dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
Verificare il valore della porta dell'app nella configurazione Dapr
L'estensione Dapr per Funzioni di Azure avvia un server HTTP sulla porta 3001
per impostazione predefinita. È possibile configurare questa porta usando la DAPR_APP_PORT
variabile di ambiente.
Se si specifica un valore di porta dell'app non corretto durante l'esecuzione di un'app funzioni di Azure, è possibile che venga visualizzato il messaggio di errore: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error).
; per risolvere questo messaggio di errore:
Nelle impostazioni Dapr dell'app contenitore:
Se si usa un trigger Dapr nel codice, verificare che la porta dell'app sia impostata su
3001
o sul valore della variabile di ambienteDAPR_APP_PORT
.Se non si usa un trigger Dapr nel codice, verificare che la porta dell'app non sia impostata. Deve essere vuoto.
Verificare di aver specificato il valore corretto della porta dell'app nella configurazione Dapr.
Se si usano app di Azure Container, specificare la porta dell'app in Bicep:
DaprConfig: { ... appPort: <DAPR_APP_PORT> ... }
Se si usa un ambiente Kubernetes, impostare l'annotazione
dapr.io/app-port
:annotations: ... dapr.io/app-port: "<DAPR_APP_PORT>" ...
Se si sviluppa in locale, verificare di aver impostato
--app-port
quando si esegue l'app per le funzioni con Dapr:dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start