Bagikan melalui


Skema CloudEvents v1.0 dengan Azure Event Grid

Azure Event Grid secara asli mendukung peristiwa dalam implementasi JSON cloudEvents v1.0 dan pengikatan protokol HTTP. CloudEvents adalah spesifikasi terbuka untuk menjelaskan data peristiwa. CloudEvents menyederhanakan interoperabilitas dengan menyediakan skema peristiwa umum untuk menerbitkan dan mengonsumsi peristiwa berbasis cloud. Skema ini memungkinkan alat seragam, cara standar perutean & penanganan peristiwa, dan cara universal deserialisasi skema peristiwa luar. Dengan skema umum, Anda dapat lebih mudah mengintegrasikan pekerjaan di seluruh platform.

CloudEvents sedang dibangun oleh beberapa kolaborator, termasuk Microsoft, melalui Cloud Native Computing Foundation. Saat ini tersedia sebagai versi 1.0.

Artikel ini menjelaskan penggunaan skema CloudEvents dengan Event Grid.

Sampel kejadian menggunakan skema CloudEvents

Berikut adalah contoh peristiwa Azure Blob Storage dalam format CloudEvents:

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

Penjelasan mendetail tentang kolom yang tersedia, jenis, dan definisinya di CloudEvents v1.0 tersedia di sini.

Nilai header untuk kejadian yang dikirimkan dalam skema CloudEvents dan skema Azure Event Grid sama kecuali untuk content-type. Untuk skema CloudEvents, nilai header tersebut adalah "content-type":"application/cloudevents+json; charset=utf-8". Untuk skema Event Grid, nilai header tersebut adalah "content-type":"application/json; charset=utf-8".

Konfigurasi untuk CloudEvents

Anda dapat menggunakan Event Grid untuk input dan output peristiwa dalam skema CloudEvents. Anda dapat menggunakan CloudEvents untuk peristiwa sistem, seperti peristiwa Blob Storage dan peristiwa IoT Hub, serta peristiwa kustom. Selain mendukung CloudEvents, Event Grid mendukung format peristiwa Event Grid eksklusif, tidak dapat diperluas, namun berfungsi penuh. Tabel berikut menjelaskan transformasi yang didukung saat menggunakan format CloudEvents dan Event Grid sebagai skema input dalam topik dan sebagai skema output dalam langganan peristiwa. Skema output Event Grid tidak dapat digunakan saat menggunakan CloudEvents sebagai skema input karena CloudEvents mendukung atribut ekstensi yang tidak didukung oleh skema Event Grid.

Skema input Skema output
Format CloudEvents Format CloudEvents
Format Event Grid Format CloudEvents
Format Event Grid Format Event Grid

Untuk semua skema peristiwa, Event Grid memerlukan validasi saat menerbitkan ke topik Event Grid dan saat membuat langganan peristiwa. Untuk mengetahui informasi selengkapnya, lihat Keamanan dan autentikasi Event Grid.

Skema input

Anda mengatur skema input untuk topik kustom saat membuat topik kustom dengan menggunakan input-schema parameter .

Untuk Azure CLI, gunakan:

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

Untuk PowerShell, gunakan:

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

Skema output

Anda mengatur skema output saat membuat langganan peristiwa dengan menggunakan event-delivery-schema parameter .

Untuk Azure CLI, gunakan:

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

Untuk PowerShell, gunakan:

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

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

Gunakan dengan Azure Functions

Visual Studio atau Visual Studio Code

Jika Anda menggunakan Visual Studio atau Visual Studio Code, dan bahasa pemrograman C# untuk mengembangkan fungsi, pastikan Anda menggunakan paket NuGet Microsoft.Azure.WebJobs.Extensions.EventGrid terbaru (versi 3.3.1 atau lebih tinggi).

Di Visual Studio, gunakan Alat ->NuGet Package Manager ->Package Manager Console, dan jalankan Install-Package perintah (Install-Package Microsoft.Azure.WebJobs.Extensions.EventGrid -Version 3.3.1). Atau, klik kanan proyek di jendela Penjelajah Solusi, dan pilih menu Kelola Paket NuGet untuk menelusuri paket NuGet, dan menginstal atau memperbaruinya ke versi terbaru.

Di Visual Studio Code, perbarui nomor versi untuk paket Microsoft.Azure.WebJobs.Extensions.EventGrid dalam file csproj untuk proyek Azure Functions Anda.

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

Contoh berikut menunjukkan fungsi Azure Functions versi 3.x yang dikembangkan di Visual Studio atau Visual Studio Code. Ini menggunakan CloudEvent parameter pengikatan dan EventGridTrigger.

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

pengalaman pengembangan portal Azure

Jika Anda menggunakan portal Azure untuk mengembangkan fungsi Azure, ikuti langkah-langkah berikut:

  1. Perbarui nama parameter dalam function.json file ke cloudEvent.

    {
      "bindings": [
        {
          "type": "eventGridTrigger",
          "name": "cloudEvent",
          "direction": "in"
        }
      ]
    }    
    
  2. Perbarui file seperti yang run.csx ditunjukkan dalam kode sampel berikut.

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

Catatan

Untuk informasi selengkapnya, lihat Pemicu Azure Event Grid untuk Azure Functions.

Untuk informasi tentang validasi titik akhir dengan Peristiwa Cloud, lihat Validasi titik akhir dengan CloudEvents 1.0.