Condividi tramite


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:

Screenshot che illustra dove trovare l'abilitazione dapr per un'app per le funzioni nel portale di Azure.

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:

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:

  1. 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 ambiente DAPR_APP_PORT.

    • Se non si usa un trigger Dapr nel codice, verificare che la porta dell'app non sia impostata. Deve essere vuoto.

  2. 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 
      

Passaggi successivi

Ulteriori informazioni su Dapr.