Compartir a través de


Biblioteca cliente de EventGrid de Azure WebJobs para .NET: versión 3.3.0

Esta extensión proporciona funcionalidad para recibir llamadas de webhook de Event Grid en Azure Functions, lo que le permite escribir fácilmente funciones que responden a cualquier evento publicado en Event Grid.

Introducción

Instalar el paquete

Instale la extensión de Event Grid con NuGet:

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

Requisitos previos

Debe tener una suscripción de Azure y un grupo de recursos de Azure con un tema o dominio personalizado de Event Grid. Siga este tutorial paso a paso para registrar el proveedor de recursos de Event Grid y crear temas de Event Grid mediante el Azure Portal. Hay un tutorial similar con la CLI de Azure.

Autenticación del cliente

Para los eventos de publicación de la extensión, necesitará el endpoint del tema de Event Grid y un credential, que se puede crear mediante la clave de acceso del tema.

Puede encontrar el punto de conexión del tema de Event Grid en Azure Portal o mediante el fragmento de código de la CLI de Azure siguiente.

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

La clave de acceso también se puede encontrar a través del portal o mediante el fragmento de código de la CLI de Azure siguiente:

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

Conceptos clave

Uso del enlace de salida de Event Grid

Siga el tutorial de enlace para obtener información sobre el uso de esta extensión para publicar eventos de EventGrid.

Uso del desencadenador de Event Grid

Siga el tutorial para obtener información sobre cómo desencadenar una función de Azure cuando se publica un evento.

Ejemplos

Funciones que usan el enlace de salida de Event Grid

Si usa el esquema EventGrid para el tema, puede generar 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();
    }
}

Si usa el esquema CloudEvent para el tema, puede generar 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();
    }
}

También es posible usar Azure Identity con el enlace de salida. Para ello, establezca la Connection propiedad en el nombre de la configuración de la aplicación que contiene el punto de conexión del tema de Event Grid junto con un conjunto de información opcional de identidad que se describe en detalle aquí. Al establecer la Connection propiedad , no se deben establecer las TopicEndpointUri propiedades y TopicKeySetting .

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 el desarrollo local, use el local.settings.json archivo para almacenar la información de conexión:

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

Cuando se implemente, use la configuración de la aplicación para almacenar esta información.

También puede generar una cadena o JObject y la extensión intentará analizar en el evento fuertemente tipado correcto.

Funciones que usan el desencadenador de Event Grid

También puede crear una función que se ejecutará cada vez que se entregue un evento al tema. En función del esquema seleccionado para la suscripción de eventos de Azure Functions, puede enlazar a o CloudEventa EventGridEvent :

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);
    }
}

Y si la suscripción está configurada con el 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);
    }
}

También es posible enlazar a una matriz de eventos. Esto es útil si tiene habilitado el procesamiento por lotes para la suscripción de Event Grid.

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);
        }
    }
}

Del mismo modo, para las suscripciones configuradas con el 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);
        }
    }
}

Solución de problemas

Consulte Monitor Azure Functions para obtener instrucciones de solución de problemas.

Pasos siguientes

Lea la introducción a La función de Azure o cree una guía de funciones de Azure.

Contribuir

Consulte nuestra CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a esta biblioteca.

Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más información, visite cla.microsoft.com.

Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.

Impresiones