A CloudEvents 1.0-s sémájának használata az Event Grid használatával

Az Alapértelmezett eseményséma mellett az Azure Event Grid natív módon támogatja a CloudEvents 1.0-s és HTTP-protokollkötés JSON-implementációjában lévő eseményeket. A CloudEvents egy nyílt specifikáció az eseményadatok leírásához.

A CloudEvents leegyszerűsíti az együttműködést azáltal, hogy egy gyakori eseménysémát biztosít a felhőalapú események közzétételéhez és felhasználásához. Ez a séma lehetővé teszi az egységes eszközkezelést, az események útválasztásának és kezelésének szabványos módjait, valamint a külső eseményséma deszerializálásának univerzális módjait. Egy közös sémával egyszerűbben integrálhatja a munkát a platformok között.

A CloudEvents-t több közreműködő, köztük a Microsoft is a Cloud Native Computing Foundationen keresztül építi fel. Jelenleg 1.0-s verzióban érhető el.

Ez a cikk bemutatja, hogyan használhatja a CloudEvents sémát az Event Grid használatával.

CloudEvent-séma

Íme egy példa egy Azure Blob Storage-eseményre CloudEvents formátumban:

{
    "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"
        }
    }
}

Az elérhető mezők, azok típusai és definíciói részletes leírását a CloudEvents 1.0-s verziójában találja.

A CloudEvents sémában és az Event Grid-sémában szállított események fejlécértékei megegyeznek, kivéve a content-type. A CloudEvents-séma esetében ez a "content-type":"application/cloudevents+json; charset=utf-8"fejléc értéke. Az Event Grid-séma esetében ez a "content-type":"application/json; charset=utf-8"fejléc értéke.

A CloudEvents konfigurálása

Az Event Gridet a CloudEvents sémában lévő események bemenetéhez és kimenetéhez is használhatja. Az alábbi táblázat a lehetséges átalakításokat ismerteti:

Event Grid-erőforrás Bemeneti séma Kézbesítési séma
Rendszerrel kapcsolatos témakörök Event Grid-séma Event Grid-séma vagy CloudEvents-séma
Egyéni témakörök/tartományok Event Grid-séma Event Grid-séma vagy CloudEvents-séma
Egyéni témakörök/tartományok CloudEvents-séma CloudEvents-séma
Egyéni témakörök/tartományok Egyéni séma Egyéni séma, Event Grid-séma vagy CloudEvents-séma
Partnertémakörök CloudEvents-séma CloudEvents-séma

Minden eseménysémához az Event Grid érvényesítést igényel, amikor egy Event Grid-témakörben tesz közzé, és amikor esemény-előfizetést hoz létre.

További információkért tekintse meg az Event Grid biztonságát és hitelesítését.

Bemeneti séma

Az egyéni témakör létrehozásakor beállítja az egyéni témakör bemeneti sémáját.

Az Azure CLI-hez használja a következőt:

az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0

PowerShell esetén használja az alábbi parancsot:

New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0

Kimeneti séma

Az esemény-előfizetés létrehozásakor beállítja a kimeneti sémát.

Az Azure CLI-hez használja a következőt:

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

PowerShell esetén használja az alábbi parancsot:

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id

New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0

Végpont-ellenőrzés a CloudEvents 1.0-s verzióval

Ha már ismeri az Event Gridet, lehet, hogy tisztában van a végpont-érvényesítési kézfogással a visszaélések megelőzéséhez. A CloudEvents 1.0-s verzió saját visszaélésvédelmi szemantikáját valósítja meg a HTTP OPTIONS metódus használatával. További információ: HTTP 1.1 Web Hooks for event delivery – Version 1.0. Amikor a CloudEvents sémát használja a kimenethez, az Event Grid az Event Grid érvényesítési eseménymechanizmus helyett a CloudEvents v1.0 visszaélés elleni védelmet használja.

Használat az Azure Functions használatával

Visual Studio vagy Visual Studio Code

Ha a Visual Studio vagy a Visual Studio Code és a C# programozási nyelvet használja a függvények fejlesztéséhez, győződjön meg arról, hogy a legújabb Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet csomagot használja (3.3.1-es vagy újabb verzió).

A Visual Studióban használja az Tools ->NuGet Csomagkezelő ->Csomagkezelő Console eszközt, és futtassa a Install-Package parancsot (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Másik lehetőségként kattintson a jobb gombbal a projektre a Megoldáskezelő ablakban, és válassza a NuGet-csomagok kezelése menüt a NuGet-csomag megkereséséhez, majd telepítse vagy frissítse a legújabb verzióra.

A VS Code-ban frissítse a Microsoft.Azure.WebJobs.Extensions.EventGrid csomag verziószámát az Azure Functions-projekt csproj fájljában.

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

Az alábbi példa egy Azure Functions 3.x-es verziójú függvényt mutat be, amely a Visual Studióban vagy a Visual Studio Code-ban készült. Egy kötési paramétert és EventGridTrigger.CloudEvent

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

Az Azure Portal fejlesztési élménye

Ha az Azure Portalt használja egy Azure-függvény fejlesztéséhez, kövesse az alábbi lépéseket:

  1. Frissítse a fájlban lévő function.json paraméter nevét a következőre cloudEvent: .

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. Frissítse a fájlt az run.csx alábbi mintakódban látható módon.

    #r "Azure.Core"
    
    using Azure.Messaging;
    
    public static void Run(CloudEvent cloudEvent, ILogger logger)
    {
        logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

Feljegyzés

További információ: Azure Event Grid-eseményindító az Azure Functionshez.

Következő lépések