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:

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

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

  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.