Durable Functions publicação no Azure Event Grid
Este artigo mostra como configurar Durable Functions para publicar eventos de ciclo de vida de orquestração (como criados, concluídos e falhados) num Tópico de Azure Event Grid personalizado.
Seguem-se alguns cenários em que esta funcionalidade é útil:
Cenários de DevOps como implementações azuis/verdes: poderá querer saber se existem tarefas em execução antes de implementar a estratégia de implementação lado a lado.
Suporte avançado de monitorização e diagnóstico: pode controlar as informações de estado de orquestração num arquivo externo otimizado para consultas, como SQL do Azure Base de Dados ou Azure Cosmos DB.
Atividade em segundo plano de execução prolongada: se utilizar Durable Functions para uma atividade em segundo plano de execução prolongada, esta funcionalidade ajuda-o a saber o estado atual.
Pré-requisitos
- Instale Microsoft.Azure.WebJobs.Extensions.DurableTask no seu projeto de Durable Functions.
- Instale o emulador de armazenamento do Azurite ou utilize uma conta de Armazenamento do Azure existente.
- Instalar a CLI do Azure ou utilizar o Azure Cloud Shell
Criar um tópico personalizado do Event Grid
Crie um tópico do Event Grid para enviar eventos a partir de Durable Functions. As seguintes instruções mostram como criar um tópico com a CLI do Azure. Também pode criar o tópico com o PowerShell ou com o portal do Azure.
Criar um grupo de recursos
Crie um grupo de recursos com o comando az group create
. Atualmente, Azure Event Grid não suporta todas as regiões. Para obter informações sobre as regiões suportadas, veja a descrição geral do Azure Event Grid.
az group create --name eventResourceGroup --location westus2
Criar um tópico personalizado
Um tópico do Event Grid fornece um ponto final definido pelo utilizador ao qual publica o evento. Substitua <topic_name>
por um nome exclusivo para o seu tópico. O nome do tópico tem de ser exclusivo porque se torna uma entrada DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Obter o ponto final e a chave
Obtenha o ponto final do tópico. Substitua <topic_name>
pelo nome que escolheu.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Obtenha a chave do tópico. Substitua <topic_name>
pelo nome que escolheu.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Agora pode enviar eventos para o tópico.
Configurar a publicação do Event Grid
No seu projeto de Durable Functions, localize o host.json
ficheiro.
Durable Functions 1.x
Adicionar eventGridTopicEndpoint
e eventGridKeySettingName
numa durableTask
propriedade.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Adicione uma notifications
secção à durableTask
propriedade do ficheiro, substituindo <topic_name>
pelo nome que escolheu. Se as durableTask
propriedades ou extensions
não existirem, crie-as como este exemplo:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
As possíveis propriedades de configuração Azure Event Grid podem ser encontradas na documentação host.json. Depois de configurar o ficheiro, a host.json
aplicação de funções envia eventos de ciclo de vida para o tópico Event Grid. Esta ação começa quando executa a sua aplicação de funções localmente e no Azure.
Defina a definição da aplicação para a chave de tópico na Aplicação de Funções e local.settings.json
. O seguinte JSON é uma amostra da depuração local.settings.json
local com um emulador do Armazenamento do Azure. Substitua <topic_key>
pela chave de tópico.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Se estiver a utilizar o Emulador de Armazenamento em vez de uma conta de Armazenamento real do Azure, certifique-se de que está em execução. Recomendamos que limpe os dados de armazenamento existentes antes de serem executados.
Se estiver a utilizar uma conta de Armazenamento real do Azure, substitua-a UseDevelopmentStorage=true
local.settings.json
pela respetiva cadeia de ligação.
Criar funções que ouvem eventos
Com o portal do Azure, crie outra aplicação de funções para escutar eventos publicados pela sua aplicação Durable Functions. É melhor localizá-lo na mesma região que o tópico do Event Grid.
Criar uma função de acionador do Event Grid
Na sua aplicação de funções, selecione Funções e, em seguida, selecione + Adicionar
Procure Event Grid e, em seguida, selecione o modelo de acionador Azure Event Grid.
Atribua um nome ao novo acionador e, em seguida, selecione Criar Função.
É criada uma função com o seguinte código:
#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 subscrição do Event Grid
Agora, pode adicionar uma subscrição do Event Grid para o tópico do Event Grid que criou. Para obter mais informações, veja Conceitos no Azure Event Grid.
Na nova função, selecione Integração e, em seguida, selecione Acionador do Event Grid (eventGridEvent).
Selecione Criar Descrição do Event Grid.
Atribua um nome à sua subscrição de evento e selecione o tipo de tópico Tópicos do Event Grid .
Selecione uma subscrição. Em seguida, selecione o grupo de recursos e o recurso que criou para o tópico Event Grid.
Selecione Criar.
Agora, está pronto para receber eventos de ciclo de vida.
Executar Durable Functions aplicação para enviar os eventos
No Durable Functions projeto que configurou anteriormente, comece a depurar no seu computador local e inicie uma orquestração. A aplicação publica Durable Functions eventos de ciclo de vida no Event Grid. Verifique se o Event Grid aciona a função de serviço de escuta que criou ao verificar os registos 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 de Eventos
A lista seguinte explica o esquema de eventos de ciclo de vida:
id
: Identificador exclusivo para o evento do Event Grid.subject
: Caminho para o assunto do evento.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
seráRunning
,Completed
,Failed
eTerminated
.data
: Durable Functions Parâmetros Específicos.hubName
: Nome do TaskHub .functionName
: nome da função orchestrator.instanceId
: Durable Functions instanceId.reason
: Dados adicionais associados ao evento de controlo. Para obter mais informações, veja Diagnósticos no Durable Functions (Funções do Azure)runtimeStatus
: Estado do Runtime de Orquestração. Em execução, Concluído, Com Falha, Cancelado.
eventType
: "orchestratorEvent"eventTime
: Hora do evento (UTC).dataVersion
: Versão do esquema do evento de ciclo de vida.metadataVersion
: versão dos metadados.topic
: recurso do tópico da grelha de eventos.
Como testar localmente
Para testar localmente, leia Testes locais com a aplicação Web do visualizador. Também pode utilizar o utilitário ngrok , conforme mostrado neste tutorial.