Estensione Dapr per Funzioni di Azure
Importante
L'estensione Dapr per Funzioni di Azure è attualmente in anteprima e supportata solo negli ambienti di App Azure Container.
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 Dapr (Distributed Application Runtime).
Funzioni di Azure è un servizio di calcolo basato su eventi che fornisce un set di trigger e associazioni 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.
Con l'integrazione tra Dapr e Funzioni, è possibile creare funzioni che reagiscono agli eventi da dapr o da sistemi esterni.
Azione | Direzione | Type |
---|---|---|
Trigger in un'associazione 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 | Tra | daprState |
Eseguire il pull dei segreti dapr per un'esecuzione | Tra | 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'associazione di output dapr | Verso l'esterno | daprBinding |
Installare l'estensione
Il pacchetto NuGet di estensione installato dipende dal processo di lavoro isolato o in modalità C# in uso nell'app per le funzioni:
Questa estensione è disponibile installando il pacchetto NuGet versione 0.17.0-preview01.
Uso dell'interfaccia della riga di comando di .NET:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr --prerelease
Installare il bundle
È possibile aggiungere l'estensione di anteprima aggiungendo o sostituendo il codice seguente nel host.json
file:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
"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 properties
sezione 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 precedenti 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 creerà 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. In questo modo l'applicazione può essere bloccata 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 sulla porta risolta dalla variabile DAPR_HTTP_PORT
di ambiente . Se tale variabile è Null, per impostazione predefinita viene usata la porta 3500
.
È possibile eseguire l'override dell'indirizzo Dapr usato dalle associazioni di input e output impostando la DaprAddress
proprietà in function.json
per l'associazione (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 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 gli esempi forniti.
Esempi | Descrizione |
---|---|
Guida introduttiva | Introduzione all'uso dell'associazione Dapr Pub/sub e HttpTrigger . |
Dapr Kafka | Informazioni su come usare l'estensione dapr Funzioni di Azure con il componente Dapr binding Kafka. |
In-process .NET | Informazioni su come usare Funzioni di Azure modello in-process per l'integrazione con più componenti Dapr in .NET, ad esempio Chiamata al servizio, Pub/sub, Binding e State Management. |
Isolato .NET | Eseguire l'integrazione con i componenti Dapr in .NET usando il modello di esecuzione out-of-proc (OOP) Funzioni di Azure. |
Provare l'estensione Dapr per Funzioni di Azure
Informazioni su come usare l'estensione Dapr per Funzioni di Azure tramite gli esempi forniti.
Esempi | Descrizione |
---|---|
Funzioni Java | Informazioni su come usare l'estensione dapr 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 gli esempi forniti.
Esempi | Descrizione |
---|---|
Guida introduttiva | Introduzione all'uso dell'associazione Dapr Pub/sub e HttpTrigger . |
Dapr Kafka | Informazioni su come usare l'estensione dapr Funzioni di Azure con il componente Dapr binding Kafka. |
JavaScript | Eseguire un'applicazione di funzione Dapr JavaScript e integrarsi 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 gli esempi forniti.
Esempi | Descrizione |
---|---|
Funzioni di PowerShell | Informazioni su come usare l'estensione dapr 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 gli esempi forniti.
Esempi | Descrizione |
---|---|
Dapr Kafka | Informazioni su come usare l'estensione dapr Funzioni di Azure con il componente Dapr binding Kafka. |
Python v1 | Eseguire un'applicazione Python con crittografia dapr e usare il modello di programmazione Python v1 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 possono verificarsi quando si usa l'estensione Dapr per Funzioni di Azure.
Verificare che Dapr sia abilitato nell'ambiente
Se si usano associazioni e trigger dapr in Funzioni di Azure e Dapr non è abilitato nell'ambiente in uso, è 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 Azure Container, fare riferimento alle 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: Per risolvere questo 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).
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 dellaDAPR_APP_PORT
variabile di ambiente.Se non si usa un trigger Dapr nel codice, verificare che la porta dell'app non sia impostata. Deve essere vuoto.
Verificare di specificare 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 impostare
--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