CloudEvents v1.0 şemasını Event Grid ile kullanma

Azure Event Grid, varsayılan olay şemasına ek olarak 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önlendirme ve işlemenin standart yollarına ve dış olay şemasının seri durumdan çıkarılmasının evrensel yollarına olanak tanır. 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 nasıl kullanılacağı açıklanmaktadır.

CloudEvent şeması

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

Kullanılabilir alanların, türlerinin ve tanımlarının ayrıntılı açıklaması için bkz . CloudEvents v1.0.

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 için yapılandırma

Event Grid'i CloudEvents şemasındaki olayların hem girişi hem de çıkışı için kullanabilirsiniz. Aşağıdaki tabloda olası dönüştürmeler açıklanmaktadır:

Event Grid kaynağı Giriş şeması Teslim şeması
Sistem konuları Event Grid şeması Event Grid şeması veya CloudEvents şeması
Özel konular/etki alanları Event Grid şeması Event Grid şeması veya CloudEvents şeması
Özel konular/etki alanları CloudEvents şeması CloudEvents şeması
Özel konular/etki alanları Özel şema Özel şema, Event Grid şeması veya CloudEvents şeması
İş ortağı konuları CloudEvents şeması CloudEvents şeması

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ı

Özel konuyu oluştururken özel bir konu için giriş şemasını 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 çıkış şemasını 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

CloudEvents v1.0 ile uç nokta doğrulaması

Event Grid'i zaten biliyorsanız kötüye kullanımı önlemeye yönelik uç nokta doğrulama el sıkışmasının farkında olabilirsiniz. CloudEvents v1.0, HTTP OPTIONS yöntemini kullanarak kendi kötüye kullanım koruma semantiğini uygular. Bu konuda daha fazla bilgi edinmek için bkz . Olay teslimi için HTTP 1.1 Web Kancaları - Sürüm 1.0. Çıkış için CloudEvents şemasını kullandığınızda Event Grid, Event Grid doğrulama olay mekanizması yerine CloudEvents v1.0 kötüye kullanım korumasını kullanır.

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.

Sonraki adımlar