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

Action Direction TIPO
Trigger in un'associazione di input dapr N/A daprBindingTrigger
Trigger in una chiamata al servizio Dapr N/A daprServiceInvocationTrigger
Attivare in una sottoscrizione dell'argomento Dapr N/A 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 Out daprState
Richiamare un'altra app Dapr Out daprInvoke
Pubblicare un messaggio in un argomento dapr Out daprPublish
Inviare un valore a un'associazione di output dapr Out 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 1.0.0.

Uso dell'interfaccia della riga di comando di .NET:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr

Installare il bundle

Per poter usare questa estensione di associazione nell'app, assicurarsi che il file host.json nella radice del progetto contenga questo extensionBundle riferimento:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

In questo esempio, il version valore di indica all'host di Funzioni di [4.0.0, 5.0.0) usare una versione del bundle che è almeno 4.0.0 ma minore di 5.0.0, che include tutte le versioni potenziali di 4.x. Questa notazione mantiene l'app nella versione secondaria più recente disponibile del bundle di estensione v4.x.

Quando possibile, è consigliabile usare la versione principale del bundle di estensione più recente e consentire al runtime di mantenere automaticamente la versione secondaria più recente. È possibile visualizzare il contenuto del bundle più recente nella pagina di rilascio dei bundle di estensioni. Per altre informazioni, vedere Bundle di estensioni di Funzioni di Azure.

Abilitazione dapr

È 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)
  • Ilportale 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ù up-to-date.

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. 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_PORTdi 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 associazione

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

Samples Description
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.
Isolato .NET 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 gli esempi forniti.

Samples Description
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 gli esempi forniti.

Samples Description
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 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.

Samples Description
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 gli esempi forniti.

Samples Description
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 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, è 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: 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).

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

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

Passaggi successivi

Altre informazioni su Dapr.