Compartilhar via


Extensão dapr para a 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 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 poder usar essa extensão de associação em seu aplicativo, verifique se o arquivo host.json na raiz do 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 instrui o host do [4.0.0, 5.0.0) Functions a usar uma versão de pacote pelo menos 4.0.0 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 do pacote de extensão mais recente e permitir que o runtime mantenha automaticamente a versão secundária mais recente. Você pode exibir o conteúdo do pacote mais recente na página de lançamento dos pacotes de extensão. Para obter mais informações, consulte os pacotes de extensão do Azure Functions.

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.