Utiliser le schéma CloudEvents v1.0 avec Event Grid
En plus de son schéma d’événement par défaut, Azure Event Grid prend en charge en mode natif les événements dans l’implémentation JSON de CloudEvents v1.0 et la liaison de protocole HTTP. CloudEvents est une spécification ouverte qui décrit les données d’événement.
CloudEvents simplifie l’interopérabilité grâce à un schéma d’événement commun pour la publication et la consommation d’événements informatiques. Ce schéma permet l’utilisation d’outils uniformes, la mise en œuvre de méthodes de routage et de gestion des événements standard, ainsi que de méthodes universelles pour désérialiser le schéma d’événement externe. Avec un schéma commun, vous pouvez plus facilement intégrer le travail entre plusieurs plateformes.
Plusieurs collaborateurs, dont Microsoft, travaillent à l’élaboration de CloudEvents par le biais de la Cloud Native Computing Foundation. Il est actuellement disponible en version 1.0.
Cet article décrit comment utiliser le schéma CloudEvents avec Event Grid.
Schéma CloudEvents
Voici un exemple d’événement Stockage Blob Azure dans le format CloudEvents :
{
"specversion": "1.0",
"type": "Microsoft.Storage.BlobCreated",
"source": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Storage/storageAccounts/{storage-account}",
"id": "9aeb0fdf-c01e-0131-0922-9eb54906e209",
"time": "2019-11-18T15:13:39.4589254Z",
"subject": "blobServices/default/containers/{storage-container}/blobs/{new-file}",
"dataschema": "#",
"data": {
"api": "PutBlockList",
"clientRequestId": "4c5dd7fb-2c48-4a27-bb30-5361b5de920a",
"requestId": "9aeb0fdf-c01e-0131-0922-9eb549000000",
"eTag": "0x8D76C39E4407333",
"contentType": "image/png",
"contentLength": 30699,
"blobType": "BlockBlob",
"url": "https://gridtesting.blob.core.windows.net/testcontainer/{new-file}",
"sequencer": "000000000000000000000000000099240000000000c41c18",
"storageDiagnostics": {
"batchId": "681fe319-3006-00a8-0022-9e7cde000000"
}
}
}
Pour obtenir une description détaillée des champs disponibles, de leur type et de leur définition, consultez CloudEvents v1.0.
Les valeurs des en-têtes pour les événements remis dans le schéma CloudEvents et le schéma Event Grid sont identiques, à l’exception de content-type
. Pour le schéma CloudEvents, cette valeur d’en-tête est "content-type":"application/cloudevents+json; charset=utf-8"
. Pour le schéma Event Grid, cette valeur d’en-tête est "content-type":"application/json; charset=utf-8"
.
Configurer pour CloudEvents
Vous pouvez utiliser Event Grid pour l’entrée et la sortie des événements dans le schéma CloudEvents. Le tableau suivant décrit les transformations possibles :
Ressource Event Grid | Schéma d’entrée | Schéma de remise |
---|---|---|
Rubriques sur le système | Schéma Event Grid | Schéma Event Grid ou CloudEvents |
Rubriques/domaines personnalisés | Schéma Event Grid | Schéma Event Grid ou CloudEvents |
Rubriques/domaines personnalisés | Schéma CloudEvents | Schéma CloudEvents |
Rubriques/domaines personnalisés | Schéma personnalisé | Schéma personnalisé, schéma Event Grid ou schéma CloudEvents |
Rubriques de partenaire | Schéma CloudEvents | Schéma CloudEvents |
Pour tous les schémas d’événement, Event Grid nécessite une validation lorsque vous publiez dans une rubrique Event Grid et lorsque vous créez un abonnement aux événements.
Pour en savoir plus, consultez la page Sécurité et authentification pour Event Grid.
Schéma d’entrée
Vous définissez le schéma d’entrée pour une rubrique personnalisée lorsque vous la créez.
Pour l’interface de ligne de commande Azure, utilisez :
az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0
Pour PowerShell, utilisez la commande suivante :
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0
Schéma de sortie
Vous définissez le schéma de sortie lorsque vous créez l’abonnement aux événements.
Pour l’interface de ligne de commande Azure, utilisez :
topicID=$(az eventgrid topic show --name demotopic -g gridResourceGroup --query id --output tsv)
az eventgrid event-subscription create --name demotopicsub --source-resource-id $topicID --endpoint <endpoint_URL> --event-delivery-schema cloudeventschemav1_0
Pour PowerShell, utilisez la commande suivante :
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id
New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0
Validation de point de terminaison avec CloudEvents v1.0
Si vous êtes déjà familiarisé avec Event Grid, vous pouvez être conscient de l’établissement d'une liaison de validation de point de terminaison pour empêcher les abus. CloudEvents v1.0 implémente sa propre sémantique de protection contre les abus à l’aide de la méthode HTTP OPTIONS. Pour en savoir plus à ce sujet, consultez Webhooks HTTP 1.1 pour la remise d’événements (version 1.0). Lorsque vous utilisez le schéma CloudEvents pour la sortie, Event Grid l’utilise avec la protection contre les abus CloudEvents v1.0 à la place du mécanisme d’événement de validation Event Grid.
Utiliser avec Azure Functions
Visual Studio ou Visual Studio Code
Si vous utilisez Visual Studio ou Visual Studio Code et le langage de programmation C# pour développer des fonctions, assurez-vous que vous utilisez le dernier package NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid (version 3.3.1 ou ultérieure).
Dans Visual Studio, utilisez la console Outils ->Gestionnaire de package NuGet ->Gestionnaire de package, puis exécutez la Install-Package
commande ().Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1
Vous pouvez également cliquer avec le bouton droit sur le projet dans la fenêtre Explorateur de solutions, puis sélectionner le menu Gérer les packages NuGet pour rechercher le package NuGet et l’installer ou le mettre à jour vers la dernière version.
Dans VS Code, mettez à jour le numéro de version du package Microsoft.Azure.WebJobs.Extensions.EventGrid dans le fichier csproj pour votre projet Azure Functions.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventGrid" Version="3.3.1" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
L’exemple suivant montre une fonction Azure Functions version 3.x développée dans Visual Studio ou Visual Studio Code. Il utilise un paramètre de liaison CloudEvent
et EventGridTrigger
.
using Azure.Messaging;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
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);
}
}
}
Expérience de développement Portail Azure
Si vous utilisez le Portail Azure pour développer une fonction Azure, procédez comme suit :
Remplacez le nom du paramètre dans le fichier
function.json
parcloudEvent
.{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
Mettez à jour le fichier
run.csx
comme indiqué dans l’exemple de code suivant.#r "Azure.Core" using Azure.Messaging; public static void Run(CloudEvent cloudEvent, ILogger logger) { logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject); }
Notes
Pour en savoir plus, consultez Déclencheur Azure Event Grid pour Azure Functions.
Étapes suivantes
- Pour plus d’information sur la surveillance des remises des événements, consultez Surveiller la remise des messages Event Grid.
- Nous vous encourageons à tester et à commenter CloudEvents, ainsi qu’à y contribuer.
- Pour plus d’informations sur la création d’un abonnement Azure Event Grid, consultez Schéma d’abonnement à Event Grid.