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-typeaynı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-Packagekullanı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 EventGridTriggerkullanı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:

  1. dosyasındaki function.json parametresinin adını olarak cloudEventgüncelleştirin.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. 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.

Bulut Olayları ile uç nokta doğrulama hakkında bilgi için bkz . CloudEvents 1.0 ile uç nokta doğrulama.