Extensão Dapr para Azure Functions

Importante

A Extensão Dapr para Azure Functions está atualmente em pré-visualização e apenas tem suporte em ambientes de Aplicativos de Contêiner do Azure.

A Extensão Dapr para Azure Functions é um conjunto de ferramentas e serviços que permitem aos programadores integrar facilmente o Azure Functions com a plataforma Distributed Application Runtime (Dapr).

O Azure Functions é um serviço de computação controlado por eventos que fornece um conjunto de gatilhos e associações para se conectar facilmente a outros serviços do Azure. O Dapr fornece um conjunto de blocos de construção e práticas recomendadas 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 Dapr e Functions, você pode criar funções que reagem a eventos do Dapr ou de sistemas externos.

Ação Direção Type
Gatilho em uma ligação de entrada Dapr N/A daprBindingTrigger
Gatilho em uma invocação de serviço Dapr N/A daprServiceInvocationTrigger
Gatilho em uma assinatura de tópico do Dapr N/A daprTopicTrigger
Puxe o estado Dapr para uma execução Está presente em daprState
Puxe os segredos do Dapr para uma execução Está presente em daprSecret
Salvar um valor em um estado Dapr Do destino para a origem daprState
Invoque outro aplicativo Dapr Do destino para a origem daprInvoke
Publicar uma mensagem em um tópico do Dapr Do destino para a origem daprPublicar
Enviar um valor para uma ligação de saída Dapr Do destino para a origem daprBinding

Instalar a extensão

O pacote NuGet de extensão que você instala depende do processo de trabalho isolado ou em processo do modo C# que você está usando em seu aplicativo de função:

Esta extensão está disponível instalando o pacote NuGet, versão 0.17.0-preview01.

Usando a CLI do .NET:

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

Instalar pacote

Você pode adicionar a extensão de visualização adicionando ou substituindo o seguinte código em seu host.json arquivo:

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

Habilitação Dapr

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

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

Ao usar um modelo IaC, especifique os seguintes argumentos na properties seção da definição de recurso do aplicativo 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 contêiner no modo de várias revisões, as alterações nessas configurações não criam uma nova revisão. Em vez disso, todas as revisões existentes são reiniciadas para garantir que sejam configuradas com os valores mais atualizados.

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

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

Portas Dapr e ouvintes

Quando você aciona uma função do Dapr, a extensão expõe a porta 3001 automaticamente para ouvir as solicitações recebidas do sidecar do Dapr.

Importante

A porta 3001 só é exposta e ouvida se um gatilho Dapr for definido no aplicativo de função. Ao usar o Dapr, o sidecar aguarda receber uma resposta da porta definida antes de concluir a instanciação. Não defina a anotação ou --app-port a dapr.io/port menos que você tenha um gatilho. Se o fizer, poderá bloquear a sua aplicação a partir do sidecar Dapr.

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

Por padrão, quando o Azure Functions tenta se comunicar com o Dapr, ele chama o Dapr pela porta resolvida a partir da variável DAPR_HTTP_PORTde ambiente . Se essa variável for null, o padrão será port 3500.

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

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

Tipos de vinculação

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

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

A extensão Dapr suporta tipos de parâmetros de acordo com a tabela abaixo.

Enlace Tipos de parâmetros
Gatilho Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Entrada Dapr daprState
daprSecret
Saída Dapr daprState
daprInvoke
daprPublicar
daprBinding

Para obter exemplos usando esses tipos, consulte o repositório GitHub para a extensão.

Experimente a extensão Dapr para Azure Functions

Saiba como usar a Extensão Dapr para Azure Functions por meio dos exemplos fornecidos.

Exemplos Description
Início rápido Comece a usar a vinculação Dapr Pub/sub e HttpTrigger.
Dapr Kafka Saiba como usar a Extensão Dapr do Azure Functions com o componente Dapr de ligações 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 Chamada de Serviço, Pub/sub, Ligações e Gerenciamento de Estado.
.NET isolado Integre com componentes do Dapr no .NET usando o modelo de execução out-of-proc (OOP) do Azure Functions.

Experimente a extensão Dapr para Azure Functions

Saiba como usar a Extensão Dapr para Azure Functions por meio dos exemplos fornecidos.

Exemplos Description
Funções Java Saiba como usar a Extensão Dapr do Azure Functions usando Java.

Experimente a extensão Dapr para Azure Functions

Saiba como usar a Extensão Dapr para Azure Functions por meio dos exemplos fornecidos.

Exemplos Description
Início rápido Comece a usar a vinculação Dapr Pub/sub e HttpTrigger.
Dapr Kafka Saiba como usar a Extensão Dapr do Azure Functions com o componente Dapr de ligações Kafka.
JavaScript Execute um aplicativo de função JavaScript Dapr e integre-se ao Dapr Service Invocation, Pub/sub, Bindings e State Management usando o Azure Functions.

Experimente a extensão Dapr para Azure Functions

Saiba como usar a Extensão Dapr para Azure Functions por meio dos exemplos fornecidos.

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

Experimente a extensão Dapr para Azure Functions

Saiba como usar a Extensão Dapr para Azure Functions por meio dos exemplos fornecidos.

Exemplos Description
Dapr Kafka Saiba como usar a Extensão Dapr do Azure Functions com o componente Dapr de ligações Kafka.
Python v1 Execute um aplicativo Python Dapr-ized e use o modelo de programação Python v1 do Azure Functions para integrar com componentes do Dapr.
Python v2 Inicie um aplicativo Dapr usando o modelo de programação Python v2 do Azure Functions para integrar com componentes do Dapr.

Resolução de Problemas

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

Verifique se o Dapr está ativado 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ê receberá a mensagem de erro: Para habilitar o Dapr em seu ambiente: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.

  • Se o seu Azure Function for implantado em Aplicativos de Contêiner do Azure, consulte as instruções de habilitação do Dapr para a extensão do Dapr para o Azure Functions.

  • Se sua Função do Azure for implantada no Kubernetes, verifique se a configuração YAML da sua implantação tem as seguintes anotações:

    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 você estiver executando sua Função do Azure localmente, execute o seguinte comando para garantir que está executando o aplicativo de função com o Dapr:

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

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

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

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

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

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

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

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

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

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

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

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

Próximos passos

Saiba mais sobre o Dapr.