Share via


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

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=truelocal.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

  1. Na sua aplicação de funções, selecione Funções e, em seguida, selecione + Adicionar

    Adicione uma função no portal do Azure.

  2. Procure Event Grid e, em seguida, selecione o modelo de acionador Azure Event Grid.

    Selecione o modelo de acionador da grelha de eventos no portal do Azure.

  3. Atribua um nome ao novo acionador e, em seguida, selecione Criar Função.

    Atribua um nome ao acionador da grelha de eventos no portal do Azure.

    É 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.

  1. Na nova função, selecione Integração e, em seguida, selecione Acionador do Event Grid (eventGridEvent).

    Selecione a ligação Acionador do Event Grid.

  2. Selecione Criar Descrição do Event Grid.

    Crie a subscrição do Event Grid.

  3. Atribua um nome à sua subscrição de evento e selecione o tipo de tópico Tópicos do Event Grid .

  4. Selecione uma subscrição. Em seguida, selecione o grupo de recursos e o recurso que criou para o tópico Event Grid.

  5. Selecione Criar.

    Criar uma subscrição do Event Grid.

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, Failede Terminated.
  • 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.

Passos seguintes