Partilhar via


Extensão Dapr para Azure Functions

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 Direction Tipo
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 In daprState
Puxe os segredos do Dapr para uma execução In daprSecret
Salvar um valor em um estado Dapr Out daprState
Invoque outro aplicativo Dapr Out daprInvoke
Publicar uma mensagem em um tópico do Dapr Out daprPublicar
Enviar um valor para uma ligação de saída Dapr Out daprBinding

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

Usando a CLI do .NET:

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

Instalar pacote

Para poder usar essa extensão de associação em seu aplicativo, certifique-se de que o arquivo dehost.json na raiz do seu projeto contém esta extensionBundle referência:

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

Neste exemplo, o version valor de instrui o host Functions a usar uma versão de [4.0.0, 5.0.0) pacote que seja pelo menos 4.0.0 , mas menor que 5.0.0, que inclui todas as versões potenciais do 4.x. Essa notação mantém efetivamente seu aplicativo na versão secundária mais recente disponível do pacote de extensão v4.x.

Quando possível, você deve usar a versão principal mais recente do pacote de extensão e permitir que o tempo de execução mantenha automaticamente a versão secundária mais recente. Você pode visualizar o conteúdo do pacote mais recente na página de lançamento dos pacotes de extensão. Para obter mais informações, consulte Pacotes de extensão do Azure Functions.

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 de data mais up-to.

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

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

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 dapr.io/port a --app-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 DaprAddress propriedade no function.json para a 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.

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

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

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

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

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

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

Soluçã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: 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 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 deDAPR_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: 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 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. Deve 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.