Bibliothèque de client Azure WebJobs EventGrid pour .NET - version 3.3.0

Cette extension fournit des fonctionnalités pour recevoir des appels de webhook Event Grid dans Azure Functions, ce qui vous permet d’écrire facilement des fonctions qui répondent à n’importe quel événement publié dans Event Grid.

Prise en main

Installer le package

Installez l’extension Event Grid avec NuGet :

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

Prérequis

Vous devez disposer d’un abonnement Azure et d’un groupe de ressources Azure avec une rubrique ou un domaine Event Grid personnalisé. Suivez ce tutoriel pas à pas pour inscrire le fournisseur de ressources Event Grid et créer des rubriques Event Grid à l’aide du Portail Azure. Il existe un tutoriel similaire à l’aide d’Azure CLI.

Authentifier le client

Pour les événements de publication de l’extension, vous aurez besoin de la endpoint rubrique Event Grid et d’un credential, qui peut être créé à l’aide de la clé d’accès de la rubrique.

Vous trouverez le point de terminaison de votre rubrique Event Grid dans le portail Azure ou à l’aide de l’extrait de code Azure CLI ci-dessous.

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

La clé d’accès peut également être trouvée via le portail ou à l’aide de l’extrait de code Azure CLI ci-dessous :

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

Concepts clés

Utilisation de la liaison de sortie Event Grid

Suivez le tutoriel de liaison pour en savoir plus sur l’utilisation de cette extension pour la publication d’événements EventGrid.

Utilisation du déclencheur Event Grid

Suivez le tutoriel pour en savoir plus sur le déclenchement d’une fonction Azure lors de la publication d’un événement.

Exemples

Fonctions qui utilisent la liaison de sortie Event Grid

Si vous utilisez le schéma EventGrid pour votre rubrique, vous pouvez générer 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 vous utilisez le schéma CloudEvent pour votre rubrique, vous pouvez générer 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();
    }
}

Il est également possible d’utiliser Azure Identity avec la liaison de sortie. Pour ce faire, définissez la propriété sur Connection le nom de votre paramètre d’application qui contient votre point de terminaison de rubrique Event Grid, ainsi qu’un ensemble d’informations d’identité facultatives décrites en détail ici. Lors de la définition de la Connection propriété, les TopicEndpointUri propriétés et TopicKeySetting ne doivent PAS être définies.

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

Pour le développement local, utilisez le local.settings.json fichier pour stocker les informations de connexion :

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

Lors du déploiement, utilisez les paramètres de l’application pour stocker ces informations.

Vous pouvez également générer une chaîne ou un objet JObject et l’extension tentera d’analyser l’événement fortement typé correct.

Fonctions qui utilisent le déclencheur Event Grid

Vous pouvez également créer une fonction qui sera exécutée chaque fois qu’un événement est remis à votre rubrique. En fonction du schéma que vous avez sélectionné pour votre abonnement aux événements Azure Function, vous pouvez vous lier à EventGridEvent ou CloudEvent:

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

Et si votre abonnement est configuré avec le schéma 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);
    }
}

Il est également possible de lier à un tableau d’événements. Cela est utile si vous avez activé le traitement par lots pour votre abonnement 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);
        }
    }
}

De même, pour les abonnements configurés avec le schéma 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);
        }
    }
}

Résolution des problèmes

Reportez-vous à Monitor Azure Functions pour obtenir des conseils de résolution des problèmes.

Étapes suivantes

Lisez l’introduction d’Azure Function ou la création d’un guide de fonction Azure.

Contribution

Consultez notre CONTRIBUTING.md pour plus d’informations sur la création, le test et la contribution à cette bibliothèque.

Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, consultez cla.microsoft.com.

Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.

Impressions