Extensão Dapr para Azure Functions

A Extensão Dapr para Azure Functions é um conjunto de ferramentas e serviços que permitem que os desenvolvedores integrem facilmente o Azure Functions à plataforma do Dapr (Distributed Apps Runtime).

O Azure Functions é um serviço de computação controlado por eventos que fornece um conjunto de gatilhos e associações para facilitar a conexão com outros serviços do Azure. O Dapr fornece um conjunto de blocos de construção e melhores práticas para a criação de aplicativos distribuídos, incluindo microsserviços, gerenciamento de estado, mensagens pub/sub e muito mais.

Com a integração entre o Dapr e o Functions, você pode criar funções que reagem a eventos do Dapr ou de sistemas externos.

Ação Direção Tipo
Disparar em uma associação de entrada do Dapr N/D daprBindingTrigger
Disparar em uma invocação de serviço do Dapr N/D daprServiceInvocationTrigger
Disparar em uma assinatura de tópico do Dapr N/D daprTopicTrigger
Efetuar pull no estado do Dapr para uma execução In daprState
Efetuar pull nos segredos do Dapr para uma execução In daprSecret
Salvar um valor em um estado do Dapr Saída daprState
Invocar outro aplicativo do Dapr Saída daprInvoke
Publicar uma mensagem em um tópico do Dapr Saída daprPublish
Enviar um valor a uma associação de saída do Dapr Saída daprBinding

Instalar a extensão

O pacote NuGet de extensão instalado depende do processo ou do processo de trabalho isolado do C# que você estiver usando no seu aplicativo de funções:

Essa extensão está disponível instalando o pacote NuGet, versão 1.0.0.

Usando a CLI do .NET:

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

Instalar pacote

É possível adicionar a extensão adicionando ou substituindo a seguinte código no arquivo host.json:

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

Habilitação do Dapr

Você pode configurar o Dapr usando vários [argumentos e anotações] [dapr-args] com base no contexto de runtime. Você pode configurar o Dapr para o Azure Functions por dois canais:

  • Modelos de IaC (infraestrutura como código), como em modelos do Bicep ou do ARM (Azure Resource Manager)
  • O portal do Azure

Ao usar um modelo de IaC, especifique os seguintes argumentos na seção properties da definição de recurso do aplicativo de contêiner.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

Os valores de configuração do Dapr acima são considerados alterações no escopo do aplicativo. Quando você executa um aplicativo de contêiner em vários modos de revisão, as alterações nessas configurações não criarão uma nova revisão. Em vez disso, todas as revisões existentes serão reiniciadas para garantir que elas estejam configuradas com os valores mais atualizados.

Ao configurar o Dapr usando o portal do Azure, navegue até seu aplicativo de funções e selecione Dapr no menu esquerdo:

Captura de tela demonstrando onde localizar a habilitação do Dapr para um Aplicativo de Funções no portal do Azure.

Portas e ouvintes do Dapr

Quando você está disparando uma função do Dapr, a extensão expõe a porta 3001 automaticamente para escutar solicitações recebidas do sidecar do Dapr.

Importante

A porta 3001 só será exposta e escutada se um gatilho do Dapr for definido no aplicativo de funções. Ao usar o Dapr, o sidecar aguarda o recebimento de uma resposta da porta definida antes de concluir a instanciação. Não definir a anotação dapr.io/port nem --app-port, a menos que você tenha um gatilho. Isso pode bloquear seu aplicativo do sidecar do Dapr.

Se você estiver usando apenas associações de entrada e saída, a porta 3001 não precisará ser exposta nem definida.

Por padrão, quando o Azure Functions tenta se comunicar com o Dapr, ele chama o Dapr pela porta resolvida usando a variável de ambiente DAPR_HTTP_PORT. Se essa variável for nula, ela usará como padrão a porta 3500.

Você pode substituir o endereço do Dapr usado por associações de entrada e saída definindo a propriedade DaprAddress no function.json para a associação (ou o atributo). Por padrão, ele usa http://localhost:{DAPR_HTTP_PORT}.

O aplicativo de funções ainda expõe outra porta e ponto de extremidade para itens como gatilhos de HTTP, que localmente é 7071 por padrão. Mas em um contêiner, o padrão é 80.

Tipos de associação

Os tipos de associação com suporte para .NET dependem da versão da extensão e do modo de execução do C#, que pode ser um dos seguintes:

Uma biblioteca de classes em processo é uma função C# compilada no mesmo processo que o runtime do Functions.

A extensão do Dapr dá suporte a tipos de parâmetro de acordo com a tabela abaixo.

Associação Tipos de parâmetro
Gatilho do Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Entrada do Dapr daprState
daprSecret
Saída do Dapr daprState
daprInvoke
daprPublish
daprBinding

Para obter exemplos de como usar esses tipos, confira o repositório GitHub da extensão.

Experimentar a extensão do Dapr no Azure Functions

Saiba como usar a extensão do Dapr no Azure Functions pelos exemplos fornecidos.

Exemplos Descrição
Início rápido Introdução ao uso da associação de pub/sub do Dapr e HttpTrigger.
Dapr Kafka Saiba como usar a extensão do Dapr do Azure Functions com o componente do Dapr de associações do Kafka.
.NET em processo Saiba como usar o modelo em processo do Azure Functions para integrar com vários componentes do Dapr no .NET, como Invocação de Serviço, Pub/sub, Associações e Gerenciamento de Estado.
Isolado do .NET Integrar com componentes do Dapr no .NET usando o modelo de execução OOP (fora de processo) do Azure Functions.

Experimentar a extensão do Dapr no Azure Functions

Saiba como usar a extensão do Dapr no Azure Functions pelos exemplos fornecidos.

Exemplos Descrição
Funções do Java Saiba como usar a extensão do Dapr do Azure Functions com Java.

Experimentar a extensão do Dapr no Azure Functions

Saiba como usar a extensão do Dapr no Azure Functions pelos exemplos fornecidos.

Exemplos Descrição
Início rápido Introdução ao uso da associação de pub/sub do Dapr e HttpTrigger.
Dapr Kafka Saiba como usar a extensão do Dapr do Azure Functions com o componente do Dapr de associações do Kafka.
JavaScript Execute um aplicativo de função do Dapr do JavaScript e integre a Invocação de Serviço, Pub/sub, Associações e Gerenciamento de Estado do Dapr usando o Azure Functions.

Experimentar a extensão do Dapr no Azure Functions

Saiba como usar a extensão do Dapr no Azure Functions pelos exemplos fornecidos.

Exemplos Descrição
Funções do PowerShell Saiba como usar a extensão do Dapr do Azure Functions com PowerShell.

Experimentar a extensão do Dapr no Azure Functions

Saiba como usar a extensão do Dapr no Azure Functions pelos exemplos fornecidos.

Exemplos Descrição
Dapr Kafka Saiba como usar a extensão do Dapr do Azure Functions com o componente do Dapr de associações do Kafka.
Python v1 Execute um aplicativo Python do tipo Dapr e use o modelo de programação Python v1 do Azure Functions para integrar aos componentes do Dapr.
Python v2 Inicie um aplicativo Dapr usando o modelo de programação Python v2 do Azure Functions para integrar aos componentes do Dapr.

Solução de problemas

Esta seção descreve como solucionar problemas que podem ocorrer ao usar a extensão Dapr para o Azure Functions.

Verifique se o Dapr está habilitado em seu ambiente

Se você estiver usando associações e gatilhos do Dapr no Azure Functions e o Dapr não estiver habilitado em seu ambiente, você poderá receber a mensagem de erro: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.. Para habilitar o Dapr em seu ambiente:

Verificar o valor de porta do aplicativo na configuração do Dapr

A extensão Dapr do Azure Functions inicia um servidor HTTP na porta 3001 por padrão. Você pode configurar essa porta usando a DAPR_APP_PORT variável de ambiente.

Se você fornecer um valor de porta do aplicativo incorreto ao executar um aplicativo do Azure Functions, poderá receber a mensagem de erro: 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).. Para resolver essa mensagem de erro:

  1. Nas configurações de Dapr do aplicativo de contêiner:

    • Se você estiver usando um gatilho do Dapr em seu código, verifique se a porta do aplicativo está definida como 3001 ou com o valor da variável de ambiente DAPR_APP_PORT.

    • Se você não estiver usando um gatilho do Dapr em seu código, verifique se a porta do aplicativo não está definida. Ele deve estar vazio.

  2. Verifique se você forneceu o valor correto de porta do aplicativo na configuração do Dapr.

    • Se você estiver usando os Aplicativos de Contêiner do Azure, especifique a portal do aplicativo no Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Se você estiver usando um ambiente do Kubernetes, defina a anotação dapr.io/app-port:

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Se você estiver desenvolvendo localmente, verifique se definiu --app-port ao executar o aplicativo de funções com o Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

Próximas etapas

Saiba mais sobre o Dapr.