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:
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:
Se o Azure Function for implantado nos Aplicativos de Contêiner do Azure, consulte Instruções de habilitação do Dapr para a extensão Dapr para o Azure Functions.
Se o Azure Function for implantado no Kubernetes, verifique se a configuração YAML da 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 o Azure Function localmente, execute o seguinte comando para garantir que está executando 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
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:
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 ambienteDAPR_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.
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