Publicação do Durable Functions para a Grade de Eventos do Azure
Este artigo mostra como configurar o Durable Functions para publicar eventos de ciclo de vida de orquestração (como criado, concluído e com falha) em um tópico da Grade de Eventos do Azure personalizado.
A seguir, alguns cenários em que esse recurso é útil:
Cenários de DevOps como implantações verdes/azuis: Convém saber se as tarefas estão em execução antes de implementar a estratégia de implantação lado a lado.
Suporte avançado a monitoramento e diagnóstico: Você pode controlar as informações de status de orquestração em um repositório externo otimizado para consultas, como o Banco de Dados SQL do Azure ou o Azure Cosmos DB.
Atividade em segundo plano de execução longa: Se você usar as Durable Functions para uma atividade em segundo plano de execução longa, esse recurso o ajudará a saber o status atual.
Pré-requisitos
- Instale Microsoft.Azure.WebJobs.Extensions.DurableTask no seu projeto de Durable Functions.
- Instale o emulador de armazenamento Azurite ou use uma conta de Armazenamento do Azure.
- Instalar a CLI do Azure ou usar o Azure Cloud Shell
Criar um tópico de Grade de Eventos personalizado
Crie um tópico de Grade de Eventos para enviar eventos a partir de Funções Duráveis. As instruções a seguir mostram como criar um tópico usando a CLI do Azure. Você também pode criar o tópico usando o PowerShell ou usando o portal do Azure.
Criar um grupo de recursos
Crie um grupo de recursos com o comando az group create
. Atualmente, a Grade de Eventos do Azure não oferece suporte a todas as regiões. Para obter informações sobre quais regiões têm suporte, consulte a Visão geral da Grade de Eventos do Azure.
az group create --name eventResourceGroup --location westus2
Criar um tópico personalizado
Um tópico de Grade de Eventos fornece um ponto de extremidade definido pelo usuário no qual você posta seu evento. Substitua <topic_name>
por um nome exclusivo para o tópico. O nome do tópico deve ser exclusivo, pois se torna uma entrada DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Obter o ponto de extremidade e a chave
Obter o ponto de extremidade do tópico. Substitua <topic_name>
pelo nome escolhido.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Obtenha a chave do tópico. Substitua <topic_name>
pelo nome escolhido.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Agora, você pode enviar eventos para o tópico.
Configurar publicação da Grade de Eventos
No projeto de Funções Duráveis, encontre o arquivo host.json
.
Durable Functions 1.x
Adicione eventGridTopicEndpoint
e eventGridKeySettingName
em uma propriedade durableTask
.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Adicione uma seção notifications
à propriedade durableTask
do arquivo, substituindo <topic_name>
pelo nome que você escolher. Se a propriedade durableTask
ou extensions
não existir, crie-a como neste exemplo:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
As propriedades de configuração possível da Grade de Eventos do Azure estão na Documentação do host.json. Após a configuração do arquivo host.json
, seu aplicativo de funções envia eventos de ciclo de vida ao tópico da Grade de Eventos. Essa ação é iniciada quando você executa seu aplicativo de funções localmente e no Azure.
Defina a configuração do aplicativo para a chave do tópico no Aplicativo de Funções e local.settings.json
. O JSON a seguir é um exemplo do local.settings.json
para depuração local usando um emulador do Armazenamento do Azure. Substitua <topic_key>
pela chave do tópico.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Se você estiver usando o emulador de armazenamento em vez de uma conta real do Armazenamento do Azure, verifique se ele está em execução. É uma boa ideia limpar todos os dados de armazenamento existentes antes de executá-lo.
Se você estiver usando uma conta real do Armazenamento do Azure, substitua UseDevelopmentStorage=true
em local.settings.json
pela respectiva cadeia de conexão.
Criar funções que escutam eventos
Usando o portal do Azure, crie outro aplicativo de funções para escutar eventos publicados pelo seu aplicativo Durable Functions. É melhor localizá-lo na mesma região que o tópico de Grade de Eventos.
Criar uma função de gatilho de Grade de Eventos
No seu aplicativo de funções, escolha Funções e selecione + Adicionar.
Pesquise Grade de Eventos e, em seguida, selecione o modelo Gatilho da Grade de Eventos do Azure.
Nomeie o novo gatilho e, em seguida, selecione Criar Função.
Uma função com o código a seguir é criada:
#r "Newtonsoft.Json" using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Logging; public static void Run(JObject eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.ToString(Formatting.Indented)); }
Adicionar uma assinatura de Grade de Eventos
Agora você pode adicionar uma assinatura de Grade de Eventos ao tópico de Grade de Eventos que criou. Para obter mais informações, confira Conceitos na Grade de Eventos do Azure.
Na sua nova função, selecione Integração e, em seguida, escolha Gatilho da Grade de Eventos (eventGridEvent).
Selecione Criar Descrição da Grade de Eventos.
Nomeie sua assinatura do evento e selecione o tipo de tópico Tópicos de Grade de Eventos.
Selecione a assinatura. Em seguida, selecione o grupo de recursos e o recurso que você criou para o tópico de Grade de Eventos.
Selecione Criar.
Agora, você está pronto para receber eventos de ciclo de vida.
Executar aplicativo do Durable Functions para enviar os eventos
No projeto de Durable Functions que você configurou anteriormente, comece a depuração no computador local e inicie uma orquestração. O aplicativo publica eventos de ciclo de vida do Durable Functions na Grade de Eventos. Verifique se a Grade de Eventos dispara a função de ouvinte que você criou, consultando os logs no portal do Azure.
2019-04-20T09:28:21.041 [Info] Function started (Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d)
2019-04-20T09:28:21.104 [Info] {
"id": "054fe385-c017-4ce3-b38a-052ac970c39d",
"subject": "durable/orchestrator/Running",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Running"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:19.6492068Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:21.104 [Info] Function completed (Success, Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d, Duration=65ms)
2019-04-20T09:28:37.098 [Info] Function started (Id=36fadea5-198b-4345-bb8e-2837febb89a2)
2019-04-20T09:28:37.098 [Info] {
"id": "8cf17246-fa9c-4dad-b32a-5a868104f17b",
"subject": "durable/orchestrator/Completed",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Completed"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:36.5061317Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:37.098 [Info] Function completed (Success, Id=36fadea5-198b-4345-bb8e-2837febb89a2, Duration=0ms)
Esquema do evento
A lista a seguir explica o esquema de eventos de ciclo de vida:
id
: Identificador exclusivo para o evento de Grade de Eventos.subject
: Caminho para o assunto do evento.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
seráRunning
,Completed
,Failed
eTerminated
.data
: Parâmetros Específicos de Durable Functions.hubName
: o nome do TaskHub.functionName
: Nome de função do Orchestrator.instanceId
: instanceId de Durable Functions.reason
: dados adicionais associados ao evento de acompanhamento. Para obter mais informações, consulte Diagnóstico nas Funções Duráveis (Azure Functions)runtimeStatus
: Status de Runtime de Orquestração. Em Execução, Concluído, Falha, Cancelado.
eventType
: "orchestratorEvent"eventTime
: Hora do Evento (UTC).dataVersion
: Versão do esquema de evento do ciclo de vida.metadataVersion
: Valor dos metadados.topic
: recurso de tópico da Grade de Eventos.
Como testar localmente
Para fazer testes locais, leia Testes locais com o aplicativo Web visualizador.