Azure Event Grid ile CloudEvents v1.0 şeması
Azure Event Grid, CloudEvents v1.0 ve HTTP protokol bağlamasının JSON uygulamasındaki olayları yerel olarak destekler. CloudEvents , olay verilerini açıklamaya yönelik açık bir belirtimdir . CloudEvents, bulut tabanlı olayları yayımlamak ve kullanmak için ortak bir olay şeması sağlayarak birlikte çalışabilirliği basitleştirir. Bu şema tekdüzen araçlara, olayları yönlendirmenin ve işlemenin standart yollarını ve dış olay şemasını seri durumdan çıkarmanın evrensel yollarını sağlar. Ortak bir şemayla, çalışmayı platformlar arasında daha kolay tümleştirebilirsiniz.
CloudEvents, Cloud Native Computing Foundation aracılığıyla Microsoft da dahil olmak üzere birçok ortak çalışan tarafından oluşturuluyor. Şu anda sürüm 1.0 olarak kullanılabilir.
Bu makalede, CloudEvents şemasının Event Grid ile kullanılması açıklanmaktadır.
CloudEvents şemasını kullanan örnek olay
CloudEvents biçiminde bir Azure Blob Depolama olayı örneği aşağıda verilmiştir:
{
"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"
}
}
}
CloudEvents v1.0'daki kullanılabilir alanların, türlerinin ve tanımlarının ayrıntılı açıklamasını burada bulabilirsiniz.
CloudEvents şemasında ve Event Grid şemasında teslim edilen olayların üst bilgi değerleri, dışında content-type
aynıdır. CloudEvents şeması için bu üst bilgi değeri şeklindedir "content-type":"application/cloudevents+json; charset=utf-8"
. Event Grid şeması için bu üst bilgi değeri şeklindedir "content-type":"application/json; charset=utf-8"
.
CloudEvents yapılandırması
Event Grid'i CloudEvents şemasındaki olayların hem girişi hem de çıkışı için kullanabilirsiniz. CloudEvents'i Blob Depolama olayları ve IoT Hub olayları gibi sistem olayları ve özel olaylar için kullanabilirsiniz. Event Grid, CloudEvents'i desteklemeye ek olarak özel, genişletilebilir olmayan ancak tamamen işlevsel bir Event Grid olay biçimini de destekler. Aşağıdaki tabloda, CloudEvents ve Event Grid biçimleri konu başlıklarında giriş şeması ve olay aboneliklerinde çıkış şeması olarak kullanılırken desteklenen dönüştürme açıklanmaktadır. CloudEvents, Event Grid şeması tarafından desteklenmeyen uzantı özniteliklerini desteklediğinden, giriş şeması olarak CloudEvents kullanılırken Event Grid çıkış şeması kullanılamaz.
Giriş şeması | Çıkış şeması |
---|---|
CloudEvents biçimi | CloudEvents biçimi |
Event Grid biçimi | CloudEvents biçimi |
Event Grid biçimi | Event Grid biçimi |
Tüm olay şemaları için, Event Grid bir Event Grid konusuna yayımlarken ve olay aboneliği oluştururken doğrulama gerektirir. Daha fazla bilgi için bkz . Event Grid güvenliği ve kimlik doğrulaması.
Giriş şeması
parametresini kullanarak özel konu oluştururken özel konu için giriş şemasını input-schema
ayarlarsınız.
Azure CLI için şunu kullanın:
az eventgrid topic create --name demotopic -l westcentralus -g gridResourceGroup --input-schema cloudeventschemav1_0
PowerShell için şunu kullanın:
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location westcentralus -Name demotopic -InputSchema CloudEventSchemaV1_0
Çıkış şeması
Olay aboneliğini oluştururken parametresini kullanarak çıkış şemasını event-delivery-schema
ayarlarsınız.
Azure CLI için şunu kullanın:
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 için şunu kullanın:
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name <topic-name>).Id
New-AzEventGridSubscription -ResourceId $topicid -EventSubscriptionName <event_subscription_name> -Endpoint <endpoint_URL> -DeliverySchema CloudEventSchemaV1_0
Azure İşlevleri ile kullanma
Visual Studio veya Visual Studio Code
İşlev geliştirmek için Visual Studio veya Visual Studio Code ve C# programlama dili kullanıyorsanız en son Microsoft.Azure.WebJobs.Extensions.EventGrid NuGet paketini (sürüm 3.3.1 veya üzeri) kullandığınızdan emin olun.
Visual Studio'da Araçlar ->NuGet Paket Yöneticisi ->Paket Yöneticisi Konsolu'nu Install-Package
kullanın ve komutunu (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1
) çalıştırın. Alternatif olarak, Çözüm Gezgini penceresinde projeye sağ tıklayın ve NuGet paketine göz atmak ve en son sürüme yüklemek veya güncelleştirmek için NuGet Paketlerini Yönet menüsünü seçin.
VS Code'da, Azure İşlevleri projenizin csproj dosyasındaki Microsoft.Azure.WebJobs.Extensions.EventGrid paketinin sürüm numarasını güncelleştirin.
<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>
Aşağıdaki örnekte Visual Studio veya Visual Studio Code'da geliştirilen Azure İşlevleri sürüm 3.x işlevi gösterilmektedir. bağlama parametresini ve EventGridTrigger
kullanırCloudEvent
.
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);
}
}
}
Azure portalı geliştirme deneyimi
Bir Azure işlevi geliştirmek için Azure portalını kullanıyorsanız şu adımları izleyin:
dosyasındaki
function.json
parametresinin adını olarakcloudEvent
güncelleştirin.{ "bindings": [ { "type": "eventGridTrigger", "name": "cloudEvent", "direction": "in" } ] }
run.csx
Aşağıdaki örnek kodda gösterildiği gibi dosyayı güncelleştirin.#r "Azure.Core" using Azure.Messaging; public static void Run(CloudEvent cloudEvent, ILogger logger) { logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject); }
Not
Daha fazla bilgi için bkz. Azure İşlevleri için Azure Event Grid tetikleyicisi.
İlgili içerik
Bulut Olayları ile uç nokta doğrulama hakkında bilgi için bkz . CloudEvents 1.0 ile uç nokta doğrulama.