Biblioteca de clientes EventGrid do Azure WebJobs para .NET – versão 3.3.0

Essa extensão fornece funcionalidade para receber chamadas de webhook da Grade de Eventos em Azure Functions, permitindo que você escreva facilmente funções que respondem a qualquer evento publicado na Grade de Eventos.

Introdução

Instalar o pacote

Instale a extensão da Grade de Eventos com o NuGet:

dotnet add package Microsoft.Azure.WebJobs.Extensions.EventGrid

Pré-requisitos

Você deve ter uma assinatura do Azure e um grupo de recursos do Azure com um tópico ou domínio personalizado da Grade de Eventos. Siga este tutorial passo a passo para registrar o provedor de recursos da Grade de Eventos e criar tópicos da Grade de Eventos usando o portal do Azure. Há um tutorial semelhante usando a CLI do Azure.

Autenticar o cliente

Para os eventos de publicação de extensão, você precisará do endpoint do tópico da Grade de Eventos e de um credential, que pode ser criado usando a chave de acesso do tópico.

Você pode encontrar o ponto de extremidade do tópico da Grade de Eventos no Portal do Azure ou usando o snippet da CLI do Azure abaixo.

az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"

A chave de acesso também pode ser encontrada por meio do portal ou usando o snippet da CLI do Azure abaixo:

az eventgrid topic key list --name <your-resource-name> --resource-group <your-resource-group-name> --query "key1"

Principais conceitos

Usando a associação de saída da Grade de Eventos

Siga o tutorial de associação para saber mais sobre como usar essa extensão para publicar eventos eventGrid.

Usando o gatilho da Grade de Eventos

Siga o tutorial para saber mais sobre como disparar uma função do Azure quando um evento é publicado.

Exemplos

Funções que usam a associação de saída da Grade de Eventos

Se você estiver usando o esquema EventGrid para seu tópico, poderá gerar EventGridEvents.

public static class EventGridEventBindingFunction
{
    [FunctionName("EventGridEventBindingFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<EventGridEvent> eventCollector)
    {
        EventGridEvent e = new EventGridEvent(await req.ReadAsStringAsync(), "IncomingRequest", "IncomingRequest", "1.0.0");
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

Se você estiver usando o esquema CloudEvent para seu tópico, poderá gerar CloudEvents.

public static class CloudEventBindingFunction
{
    [FunctionName("CloudEventBindingFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<CloudEvent> eventCollector)
    {
        CloudEvent e = new CloudEvent("IncomingRequest", "IncomingRequest", await req.ReadAsStringAsync());
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

Também é possível usar a Identidade do Azure com a associação de saída. Para fazer isso, defina a Connection propriedade como o nome da configuração do aplicativo que contém o ponto de extremidade do Tópico da Grade de Eventos, juntamente com um conjunto de informações opcionais de Identidade descritas em detalhes aqui. Ao definir a Connection propriedade , as TopicEndpointUri propriedades e TopicKeySetting NÃO devem ser definidas.

public static class CloudEventOutputBindingWithIdentityFunction
{
    [FunctionName("CloudEventOutputBindingWithIdentityFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(Connection = "MyConnection")] IAsyncCollector<CloudEvent> eventCollector)
    {
        CloudEvent e = new CloudEvent("IncomingRequest", "IncomingRequest", await req.ReadAsStringAsync());
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

Para desenvolvimento local, use o local.settings.json arquivo para armazenar as informações de conexão:

{
  "Values": {
    "myConnection__topicEndpointUri": "{topicEndpointUri}"
  }
}

Quando implantado, use as configurações do aplicativo para armazenar essas informações.

Você também pode gerar uma cadeia de caracteres ou JObject e a extensão tentará analisar o evento fortemente tipado correto.

Funções que usam o gatilho da Grade de Eventos

Você também pode criar uma função que será executada sempre que um evento for entregue ao tópico. Dependendo do esquema selecionado para sua assinatura de evento do Azure Functions, você pode associar a ou EventGridEventCloudEvent:

public static class EventGridEventTriggerFunction
{
    [FunctionName("EventGridEventTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] EventGridEvent e)
    {
        logger.LogInformation("Event received {type} {subject}", e.EventType, e.Subject);
    }
}

E se sua assinatura estiver configurada com o esquema CloudEvent:

public static class CloudEventTriggerFunction
{
    [FunctionName("CloudEventTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] CloudEvent e)
    {
        logger.LogInformation("Event received {type} {subject}", e.Type, e.Subject);
    }
}

Também é possível associar a uma matriz de eventos. Isso será útil se você tiver o envio em lote habilitado para sua Assinatura da Grade de Eventos.

public static class EventGridEventBatchTriggerFunction
{
    [FunctionName("EventGridEventBatchTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] EventGridEvent[] events)
    {
        foreach (EventGridEvent eventGridEvent in events)
        {
            logger.LogInformation("Event received {type} {subject}", eventGridEvent.EventType, eventGridEvent.Subject);
        }
    }
}

Da mesma forma, para assinaturas configuradas com o esquema CloudEvent:

public static class CloudEventBatchTriggerFunction
{
    [FunctionName("CloudEventBatchTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] CloudEvent[] events)
    {
        foreach (CloudEvent cloudEvent in events)
        {
            logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

Solução de problemas

Consulte Monitorar Azure Functions para obter diretrizes de solução de problemas.

Próximas etapas

Leia a introdução ao Azure Function ou crie um guia de função do Azure.

Participante

Confira nosso CONTRIBUTING.md para obter detalhes sobre como criar, testar e contribuir para essa biblioteca.

Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite cla.microsoft.com.

Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.

Impressões