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 | 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 | Em | daprState |
Puxe os segredos do Dapr para uma execução | 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 1.0.0.
Usando a CLI do .NET:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
Instalar pacote
Você pode adicionar a extensão adicionando ou substituindo o seguinte código em seu host.json
arquivo:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"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:
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_PORT
de 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 7071
como 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: 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 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: 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 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 deDAPR_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.
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