CloudEvents v1.0 séma az Azure Event Grid használatával
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 közzétételhez és a felhőalapú események felhasználásához. Ez a séma lehetővé teszi az egységes eszközkezelést, az események kezelésének szabványos útválasztási módjait és 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 a CloudEvents-séma Event Griddel való használatát ismerteti.
Mintaesemény a CloudEvents-sémával
Í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}",
"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"
}
}
}
A CloudEvents 1.0-s verziójában elérhető mezők, azok típusai és definíciói részletes leírása itt érhető el.
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 fejlécérték."content-type":"application/cloudevents+json; charset=utf-8"
Event Grid-séma esetén 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. A CloudEvents rendszereseményekhez, például Blob Storage-eseményekhez, IoT Hub-eseményekhez és egyéni eseményekhez használható. A CloudEvents támogatása mellett az Event Grid egy védett, nem kiterjeszthető, de teljesen működőképes Event Grid-eseményformátumot is támogat. Az alábbi táblázat a CloudEvents és az Event Grid formátumok beviteli sémaként történő használata esetén támogatott átalakítást ismerteti témakörökben és kimeneti sémaként az esemény-előfizetésekben. Az Event Grid kimeneti sémája nem használható a CloudEvents bemeneti sémaként való használatakor, mivel a CloudEvents támogatja az Event Grid-séma által nem támogatott bővítményattribútumokat .
Bemeneti séma | Kimeneti séma |
---|---|
CloudEvents formátum | CloudEvents formátum |
Event Grid formátum | CloudEvents formátum |
Event Grid formátum | Event Grid formátum |
Minden eseményséma esetében az Event Grid érvényesítést igényel az Event Grid-témakörökben való közzétételkor és egy esemény-előfizetés létrehozásakor. 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örhöz tartozó bemeneti sémát akkor állítja be, amikor a paraméterrel hozza létre az egyéni témakört input-schema
.
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
A kimeneti sémát az esemény-előfizetés létrehozásakor a event-delivery-schema
paraméterrel állíthatja be.
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
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:
Frissítse a fájlban lévő
function.json
paraméter nevét a következőrecloudEvent
: .{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
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.
Kapcsolódó tartalom
A felhőeseményekkel történő végpontérvényesítésről további információt a CloudEvents 1.0-val történő végpontérvényesítés című témakörben talál.