Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra como configurar Funções Duráveis para publicar eventos do ciclo de vida da orquestração (como criados, concluídos e falhados) num tópico personalizado do Azure Event Grid.
Seguem-se alguns cenários em que esta funcionalidade é útil:
Cenários DevOps como implementações azuis/verdes: Pode querer saber se há tarefas a decorrer antes de implementar a estratégia de implementação lado a lado.
Suporte avançado de monitorização e diagnóstico: Pode acompanhar a informação de estado da orquestração numa loja externa otimizada para consultas, como Azure SQL Database ou Azure Cosmos DB.
Atividade em segundo plano de longa duração: Se usar Funções Duráveis para uma atividade em segundo plano de longa duração, esta funcionalidade ajuda-o a conhecer o estado atual.
Pré-requisitos
- Instale o Microsoft.Azure.WebJobs.Extensions.DurableTask no seu projeto Durable Functions.
- Instale o emulador de armazenamento Azurite ou use uma conta Azure Storage existente.
- Install Azure CLI ou use Azure Cloud Shell
Crie um tópico personalizado para a Grelha de Eventos
Crie um tópico do Event Grid para enviar eventos a partir de Durable Functions. As instruções seguintes mostram como criar um tópico usando Azure CLI. Também pode criar o tema usando o PowerShell ou utilizando o portal Azure.
Criar um grupo de recursos
Crie um grupo de recursos com o comando az group create. Atualmente, o Azure Event Grid não suporta todas as regiões. Para informações sobre quais as regiões suportadas, consulte a visão geral do Azure Event Grid.
az group create --name eventResourceGroup --location westus2
Criar um tópico personalizado
Um tópico de Grelha de Eventos fornece um endpoint definido pelo utilizador onde publica o seu evento. Substitua <topic_name> por um nome exclusivo para o seu tópico. O nome do tópico tem de ser único porque se torna uma entrada DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Obtenha o endpoint e a chave
Percebe o ponto final do tema. Substitui <topic_name> pelo nome que escolheste.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Obtenha a chave do tópico se estiver a usar autenticação baseada em chaves. Substitui <topic_name> pelo nome que escolheste.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Agora podes enviar eventos sobre o tema.
Configurar a publicação em Grade de Eventos com autenticação baseada em chaves
No seu projeto de Funções Duradouras, encontre o ficheiro host.json.
Funções Duráveis 1.x
Adicione eventGridTopicEndpoint e eventGridKeySettingName numa propriedade durableTask.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Funções Duráveis 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 do Azure Event Grid podem ser encontradas na documentaçãohost.json. Depois de configurar o host.json ficheiro, a sua aplicação de funções envia eventos do ciclo de vida para o tópico Grelha de Eventos. Esta ação começa quando executa a sua aplicação de funções, tanto localmente como no Azure.
Defina a configuração da aplicação para a chave de tópico na Function App e local.settings.json. Este JSON é um exemplo para local.settings.json de depuração local usando um emulador do Azure Storage. Substitui <topic_key> pela chave do tópico.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Se estiveres a usar o Emulador de Armazenamento em vez de uma conta real do Azure Storage, certifica-te de que está a correr. É uma boa ideia limpar quaisquer dados de armazenamento existentes antes de executar.
Se estiveres a usar uma conta real do Azure Storage, substitui UseDevelopmentStorage=true em local.settings.json pela sua string de ligação.
Configurar a publicação em Event Grid com Identidade Gerida
As identidades geridas no Azure permitem que os recursos se autentiquem nos serviços Azure sem armazenar credenciais, simplificando a segurança e a gestão de identidades. A identidade gerida atribuída ao sistema é criada automaticamente quando a ativa num recurso Azure e está ligada ao ciclo de vida desse recurso. Se o recurso for eliminado, a identidade também é removida. A identidade gerida atribuída pelo utilizador é criada como um recurso Azure autónomo e pode ser atribuída a múltiplos recursos. Persiste independentemente de qualquer recurso, oferecendo flexibilidade para acesso partilhado e gestão centralizada de identidades. Recomenda-se que use a identidade atribuída pelo utilizador porque não está ligada ao ciclo de vida da aplicação.
Para mais informações, visite Usar identidades geridas para App Service e Azure Functions.
Identidade Atribuída ao Sistema
Para configurar a identidade atribuída ao sistema, siga as instruções abaixo:
Configuração
Ativar a identidade atribuída ao sistema para a aplicação de funções
Vai à secção Identidade da aplicação de funções e, no separador Sistema Atribuído, ativa o interruptor de Estado.
No recurso tópico do Event Grid, atribua à aplicação da função o papel de Remetente de Dados do EventGrid.
Vai à secção de Controlo de Acesso (IAM ), clica + Adicionar.
Selecione o papel de Remetente de Dados EventGrid , clique em Próximo.
Escolha Identidade Gerida na secção Atribuir acesso a, clique + Selecionar Membros na secção Membros, selecione a identidade gerida e depois clique em Rever + Atribuir.
Definições da Aplicação
Adicione uma EventGrid__topicEndpoint configuração de aplicação com o valor definido como o endpoint do tópico da Grade de Eventos.
Pode usar o seguinte comando: az functionapp config appsettings set --name <function app name> --resource-group <resource group name> --settings EventGrid__topicEndpoint="<topic endpoint>"
Identidade atribuída pelo usuário
Para configurar a identidade gerida atribuída pelo utilizador, siga as instruções abaixo:
Configuração
Crie uma identidade gerida atribuída pelo utilizador.
No portal Azure, pesquise por Identidades Geridas na barra de pesquisa global.
Crie uma identidade gerida atribuída pelo utilizador (UAMI) e selecione Rever + criar.
Anexe o UAMI ao recurso da aplicação de funções
Vai à aplicação de funções, secção Identidade , clica em Adicionar +.
Escolha o UAMI criado acima, depois clique em Adicionar.
Anexe o UAMI ao recurso de tópicos da grade de eventos.
Vai ao recurso do tópico da grelha de eventos, secção Identidade , escolhe o separador Utilizador atribuído e depois clica em Adicionar +. Escolha a identidade gerida atribuída pelo utilizador e depois clique em Adicionar.
Crie uma subscrição ao Event Grid e selecione um endpoint.
No separador Overview do recurso Event Grid Topic, selecione + Event Subscribe e crie a subscrição do evento.
Com base no endpoint que escolher em Detalhes do Endpoint, verá uma secção de Identidade Gerida para Entrega . Escolha Utilizador Atribuído para o tipo de Identidade Gerida e selecione o UAMI.
No recurso tópico Event Grid, atribua o papel de Remetente de Dados EventGrid ao UAMI.
Vai à secção de Controlo de Acesso (IAM ), clica + Adicionar.
Selecione o papel de Remetente de Dados EventGrid , clique em Próximo.
Escolha Identidade Gerida na secção Atribuir acesso a, clique + Selecionar Membros na secção Membros, selecione o UAMI e depois clique em Rever + Atribuir.
Definições do Aplicativo
- Adicione uma
EventGrid__topicEndpointdefinição de aplicação com o valor como endpoint do tópico da Grade de Eventos. - Adicione uma
EventGrid__credentialdefinição de aplicação com o valormanagedidentity. - Adicione uma
EventGrid__clientIddefinição de aplicação com o valor do ID de cliente de identidade gerida atribuído pelo utilizador.
Crie funções que escutem eventos
Usando o portal Azure, crie outra aplicação de funções para ouvir eventos publicados pela sua aplicação Durable Functions. É melhor localizá-lo na mesma região do tópico da Grelha de Eventos.
Criar uma função de ativação do Event Grid
Na tua aplicação de funções, seleciona Funções e depois seleciona + Adicionar
Procure Event Grid e depois selecione o template do gatilho Azure Event Grid.
Nomeie o novo gatilho e depois 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 Event Grid para o tópico Event Grid que criou. Para mais informações, consulte Conceitos no Azure Event Grid.
Na sua nova função, escolha Integração e depois selecione Event Grid Trigger (eventGridEvent).
Selecione Criar Descrição da Grelha de Eventos.
Nomeie a subscrição do seu evento e selecione o tipo de tópico Event Grid Topics.
Selecione uma subscrição. Depois, selecione o grupo de recursos e o recurso que criou para o tópico da Grelha de Eventos.
Selecione Criar.
Agora está pronto para receber eventos do ciclo de vida.
Execute a aplicação Durable Functions para enviar os eventos
No projeto Durable Functions que configuraste anteriormente, começa a depurar na tua máquina local e inicia uma orquestração. A aplicação publica eventos do ciclo de vida das Funções Duradouras na Grade de Eventos. Verifica se o Event Grid ativa a função de ouvinte que criaste, verificando os seus registos no portal 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 dos eventos do ciclo de vida:
-
id: Identificador único para o evento da Grelha de Eventos. -
subject: Caminho para o assunto do evento.durable/orchestrator/{orchestrationRuntimeStatus}.{orchestrationRuntimeStatus}serãoRunning,Completed,Failed, eTerminated. -
data: Parâmetros Específicos das Funções Duradouras.-
hubName: Nome TaskHub . -
functionName: Nome da função Orchestrator. -
instanceId: ID da instância das Funções Duradouras. -
reason: Dados adicionais associados ao evento de rastreamento. Para mais informações, consulte Diagnósticos em Funções Duráveis (Azure Functions) -
runtimeStatus: Estado de Execução da Orquestração. Em execução, Concluído, Falha, Cancelado.
-
-
eventType: "eventoOrquestrador" -
eventTime: Hora do evento (UTC). -
dataVersion: Versão do esquema de eventos do ciclo de vida. -
metadataVersion: Versão dos metadados. -
topic: Recurso temático da Grelha de Eventos.
Como testar localmente
Para testar localmente, leia Local testing com a aplicação web do visualizador.