Extensão dapr para a Azure Functions

Warning

A extensão Dapr para Azure Functions se aposenta em 20 de abril de 2027 e está programada para remoção dos pacotes de extensão nessa data. A remoção se aplica ao pacote principal de extensões versão 4.42.0 e posteriores e ao pacote de extensão de visualização versão 4.60.0 e posteriores.

Essa remoção também se aplica àquelas versões pré-instaladas ou armazenadas em cache no Linux hospedadas por imagens ou distribuídas via hospedagem do Windows.

Migre diretamente para SDKs de clientes Dapr ou APIs HTTP Dapr a partir do seu código de função, e substitua os gatilhos Dapr por funções disparadas por HTTP que recebam callbacks Dapr. Aplicativos existentes podem fixar temporariamente o pacote principal em [4.*, 4.42.0) ou o bundle de pré-visualização em [4.*, 4.60.0) em host.json. Os aplicativos .NET podem continuar usando diretamente os pacotes NuGet correspondentes da extensão Dapr. Nem fixar um pacote mais antigo nem continuar usando os pacotes NuGet estende o suporte além de 20 de abril de 2027 ou altera a data de remoção.

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 Dapr (Distributed Application Runtime ).

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 com 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, pub/sub-mensagens e muito mais.

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

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

Instalar extensão

O pacote NuGet de extensão instalado depende do processo de trabalho isolado ou no modo C# que você está usando em 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 o pacote

Para aplicativos existentes que usam a extensão Dapr, que se aposenta em 20 de abril de 2027, selecione o pacote que seu app usa e adicione ou substitua o código a seguir no seu host.json arquivo. Essas faixas de versões excluem as versões programadas para remover a extensão Dapr.

O pacote antigo selecionado deve estar disponível no seu aplicativo. Definir um intervalo de versões não altera o conteúdo dos pacotes pré-instalados nas imagens Linux ou disponíveis no disco nas SKUs do Windows. Continuar a fixar um pacote antigo não estende o suporte além de 20 de abril de 2027 nem altera a data de remoção.

A extensão Dapr está programada para remoção em 20 de abril de 2027, a partir da versão 4.42.0 do pacote principal de extensão.

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

Migrar da extensão Dapr

Você pode continuar usando o Dapr no Aplicativos de Contêiner do Azure sem a extensão Azure Functions Dapr. Essa migração exige mudanças no código da função e na configuração de callback Dapr; instalar um SDK cliente sozinho não substitui os gatilhos Dapr.

  1. Substitua as vinculações de entrada e saída Dapr por chamadas para um SDK cliente Dapr ou para as APIs HTTP Dapr. Use as APIs correspondentes para leituras e gravações de estado, recuperação secreta, invocação de serviços, publicação de mensagens e vinculações de saída. Preserve nomes de componentes, IDs de app, chaves de estado e metadados exigidos pelo seu app existente. Selecione APIs e pacotes SDK suportados no Aplicativos de Contêiner do Azure.

  2. Substitua os gatilhos específicos da extensão por funções ativadas por HTTP e configure o Dapr para chamar os novos endpoints:

    Gatilho existente Substituição
    daprServiceInvocationTrigger Um endpoint HTTP que lida com o método invocado. Veja invocação de serviço Dapr.
    daprTopicTrigger Um endpoint HTTP que recebe mensagens de tópico, com uma assinatura Dapr declarativa ou programática que roteia mensagens para ele.
    daprBindingTrigger Um endpoint HTTP que aceita os callbacks e OPTIONS requisições de descoberta do POST binding. Veja callbacks de ligação de entrada Dapr.
  3. Atualize a configuração Dapr no Aplicativos de Contêiner do Azure para usar a porta de escuta HTTP do app de função e o protocolo HTTP do app, em vez do ouvinte da extensão na porta3001. Corresponda rotas de callback aos endpoints de função, levando em conta o prefixo padrão /api da rota. Se você usar assinaturas programáticas de publicação/sub, exponha o endpoint de descoberta exatamente no /dapr/subscribe caminho. Garanta que o Dapr possa alcançar os endpoints necessários enquanto preserva a autenticação e os controles de acesso do seu app.

  4. Verifique o acesso de estado e secreto, invocação de serviço, publicação, cargas úteis de retorno de chamada, confirmações, tentativas e tratamento de eventos duplicados antes de trocar o tráfego. Após todos os bindings e triggers específicos da extensão serem substituídos, remova o pacote ou registro de extensão Dapr e o pino temporário do bundle. Use a configuração normal de bundles exigida pelas suas ligações restantes.

As seções a seguir descrevem a configuração para aplicativos existentes que ainda utilizam a extensão Dapr antes de sua aposentadoria em 20 de abril de 2027.

Habilitação de 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 meio de dois canais:

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

Ao usar um modelo de IaC, especifique os seguintes argumentos na properties seção 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 de Dapr acima são considerados alterações no escopo do aplicativo. Quando você executa um aplicativo de contêiner no modo de revisão múltipla, as alterações nessas configurações não criarão uma nova revisão. Em vez disso, todas as revisões existentes são reiniciadas para garantir que elas estejam configuradas com os valores mais up-todata.

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 dapr

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

Importante

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

Se você estiver usando apenas associaçõ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 Dapr pela porta resolvida da variável DAPR_HTTP_PORTde ambiente. Se essa variável for nula, ela usará como padrão a porta 3500.

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

O aplicativo de funções ainda expõe outra porta e um ponto de extremidade para itens como gatilhos HTTP, que padrão localmente são 7071, 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 C#, que pode ser um dos seguintes:

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

A Extensão dapr dá suporte a tipos de parâmetro de acordo com a tabela abaixo.

Binding Tipos de parâmetro
Gatilho dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Entrada dapr daprState
daprSecret
Saída dapr daprState
daprInvoke
daprPublish
daprBinding

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

Experimentar a extensão dapr para o Azure Functions

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

Samples Description
Início Rápido Comece a usar a associação Dapr Pub/sub e HttpTrigger.
Dapr Kafka Saiba como usar a Extensão dapr do Azure Functions com o componente Dapr de associações kafka.
.NET em processo Saiba como usar o modelo em processo do Azure Functions para integrar com vários componentes da Dapr no .NET, como Invocação de Serviço, Pub/sub, Associações e Gerenciamento de Estado.
.NET Isolado Integre com componentes dapr no .NET usando o modelo de execução OOP (out-of-proc) do Azure Functions.

Experimentar a extensão dapr para o Azure Functions

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

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

Experimentar a extensão dapr para o Azure Functions

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

Samples Description
Início Rápido Comece a usar a associação Dapr Pub/sub e HttpTrigger.
Dapr Kafka Saiba como usar a Extensão dapr do Azure Functions com o componente Dapr de associaçõ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.

Experimentar a extensão dapr para o Azure Functions

Saiba como usar a Extensão dapr para o 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.

Experimentar a extensão dapr para o Azure Functions

Saiba como usar a Extensão dapr para o 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 associações kafka.
Python v1 Execute um aplicativo Python do tamanho de dapr e use o modelo de programação python v1 do Azure Functions para se integrar aos componentes do Dapr.
Python v2 Inicie um aplicativo Dapr usando o modelo de programação do Python v2 do Azure Functions para se integrar aos componentes do Dapr.

Resoluçã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 de Dapr e gatilhos 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 da 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 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 esta mensagem de erro:

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

    • Se você estiver usando um gatilho dapr em seu código, verifique se a porta do aplicativo está definida 3001 como 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 da 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 do 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çõ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.