Pemicu Azure Event Grid untuk Azure Functions

Gunakan pemicu fungsi untuk menanggapi peristiwa yang dikirim oleh sumber Event Grid. Anda harus memiliki langganan peristiwa ke sumber untuk menerima peristiwa. Untuk mempelajari cara membuat langganan peristiwa, lihat Membuat langganan. Untuk informasi terkait konfigurasi dan penyiapan pengikatan, lihat gambaran umum.

Catatan

Pemicu Event Grid tidak didukung secara bawaan di penyeimbang beban internal Lingkungan App Service (ASE). Pemicu ini menggunakan permintaan HTTP yang tidak dapat mencapai aplikasi fungsi tanpa gateway ke dalam jaringan virtual.

Penting

Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.

Azure Functions mendukung dua model pemrograman untuk Python. Cara Anda menentukan pengikatan tergantung pada model pemrograman yang Anda pilih.

Model pemrograman Python v2 memungkinkan Anda menentukan pengikatan menggunakan dekorator langsung dalam kode fungsi Python Anda. Untuk informasi selengkapnya, lihat panduan pengembang Python.

Artikel ini mendukung kedua model pemrograman.

Contoh

Untuk contoh pemicu HTTP, lihat Menerima peristiwa ke titik akhir HTTP.

Jenis parameter input yang digunakan dengan pemicu Event Grid bergantung pada tiga faktor ini:

  • Versi runtime Functions
  • Versi ekstensi pengikatan
  • Modalitas fungsi C#.

Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:

  • Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework. Ekstensi untuk fungsi proses pekerja yang terisolasi menggunakan Microsoft.Azure.Functions.Worker.Extensions.* namespace layanan.
  • Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions. Dalam variasi model ini, Functions dapat dijalankan menggunakan scripting C#, yang didukung terutama untuk pengeditan portal C#. Ekstensi untuk fungsi dalam proses menggunakan Microsoft.Azure.WebJobs.Extensions.* namespace layanan.

Penting

Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.

Saat menjalankan fungsi C# Anda dalam proses pekerja yang terisolasi, Anda perlu menentukan jenis kustom untuk properti peristiwa. Contoh berikut menentukan kelas MyEventType.

    public class MyEventType
    {
        public string Id { get; set; }

        public string Topic { get; set; }

        public string Subject { get; set; }

        public string EventType { get; set; }

        public DateTime EventTime { get; set; }

        public IDictionary<string, object> Data { get; set; }
    }
}

Contoh berikut menunjukkan cara penggunaan jenis kustom dalam pemicu dan pengikatan output Event Grid:

public static class EventGridFunction
{
    [Function(nameof(EventGridFunction))]
    [EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
    public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
    {
        var logger = context.GetLogger(nameof(EventGridFunction));

        logger.LogInformation(input.Data.ToString());

        var outputEvent = new MyEventType()
        {
            Id = "unique-id",
            Subject = "abc-subject",
            Data = new Dictionary<string, object>
            {
                { "myKey", "myValue" }
            }
        };

        return outputEvent;
    }
}

Bagian ini berisi contoh-contoh berikut:

Contoh berikut menunjukkan pengikatan pemicu di Java yang menggunakan pengikatan untuk mencetak peristiwa, peristiwa pada awalnya diterima sebagai String dan selanjutnya diterima sebagai POJO.

Pemicu Event Grid, parameter String

  @FunctionName("eventGridMonitorString")
  public void logEvent(
    @EventGridTrigger(
      name = "event"
    )
    String content,
    final ExecutionContext context) {
      context.getLogger().info("Event content: " + content);
  }

Pemicu Event Grid, parameter POJO

Contoh ini menggunakan POJO berikut, mewakili properti tingkat atas peristiwa Event Grid:

import java.util.Date;
import java.util.Map;

public class EventSchema {

  public String topic;
  public String subject;
  public String eventType;
  public Date eventTime;
  public String id;
  public String dataVersion;
  public String metadataVersion;
  public Map<String, Object> data;

}

Pada saat kedatangan, muatan JSON peristiwa diuraikan ke dalam EventSchema POJO untuk digunakan oleh fungsi. Proses ini memungkinkan fungsi untuk mengakses properti peristiwa dengan cara yang berorientasi objek.

  @FunctionName("eventGridMonitor")
  public void logEvent(
    @EventGridTrigger(
      name = "event"
    )
    EventSchema event,
    final ExecutionContext context) {
      context.getLogger().info("Event content: ");
      context.getLogger().info("Subject: " + event.subject);
      context.getLogger().info("Time: " + event.eventTime); // automatically converted to Date by the runtime
      context.getLogger().info("Id: " + event.id);
      context.getLogger().info("Data: " + event.data);
  }

Di pustaka runtime fungsi Java, gunakan anotasi EventGridTrigger pada parameter yang nilainya akan berasal dari Event Grid. Parameter dengan anotasi ini menyebabkan fungsi berjalan saat acara tiba. Anotasi ini dapat digunakan dengan jenis Java asli, POJO, atau nilai yang dapat diubah ke null menggunakan Optional<T>.

Contoh berikut menunjukkan fungsi TypeScript pemicu kisi peristiwa.

import { app, EventGridEvent, InvocationContext } from '@azure/functions';

export async function eventGridTrigger1(event: EventGridEvent, context: InvocationContext): Promise<void> {
    context.log('Event grid function processed event:', event);
}

app.eventGrid('eventGridTrigger1', {
    handler: eventGridTrigger1,
});

Contoh berikut menunjukkan fungsi JavaScript pemicu kisi peristiwa.

const { app } = require('@azure/functions');

app.eventGrid('eventGridTrigger1', {
    handler: (event, context) => {
        context.log('Event grid function processed event:', event);
    },
});

Contoh berikut menunjukkan cara mengonfigurasi pemicu Event Grid yang mengikat di function.json file.

{
  "bindings": [
    {
      "type": "eventGridTrigger",
      "name": "eventGridEvent",
      "direction": "in"
    }
  ]
}

Peristiwa Event Grid disediakan untuk fungsi melalui parameter bernama eventGridEvent, seperti yang ditunjukkan dalam contoh PowerShell berikut.

param($eventGridEvent, $TriggerMetadata)

# Make sure to pass hashtables to Out-String so they're logged correctly
$eventGridEvent | Out-String | Write-Host

Contoh berikut menunjukkan pengikatan pemicu Event Grid dan fungsi Python yang menggunakan pengikatan. Contohnya tergantung pada apakah Anda menggunakan model pemrograman Python v1 atau v2.

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="eventGridTrigger")
@app.event_grid_trigger(arg_name="event")
def eventGridTest(event: func.EventGridEvent):
    result = json.dumps({
        'id': event.id,
        'data': event.get_json(),
        'topic': event.topic,
        'subject': event.subject,
        'event_type': event.event_type,
    })

    logging.info('Python EventGrid trigger processed an event: %s', result)

Atribut

Pustaka C# proses dalam proses dan terisolasi menggunakan atribut EventGridTrigger. Skrip C# sebagai gantinya menggunakan file konfigurasi function.json seperti yang dijelaskan dalam panduan pembuatan skrip C#.

Berikut ini adalah atributEventGridTrigger dalam metode yang khas:

[Function(nameof(EventGridFunction))]
[EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
{

Anotasi

Anotasi EventGridTrigger memungkinkan Anda untuk mengonfigurasi pengikatan Event Grid secara deklaratif dengan memberikan nilai konfigurasi. Lihat bagian contoh dan konfigurasi untuk detail selengkapnya.

Konfigurasi

Objek options yang diteruskan ke app.eventGrid() metode saat ini tidak mendukung properti apa pun untuk model v4.

Konfigurasi

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json. Tidak ada parameter konstruktor atau properti yang diatur dalam EventGridTrigger atribut.

Properti function.json Deskripsi
jenis Wajib - harus diatur ke eventGridTrigger.
arah Wajib - harus diatur ke in.
nama Diperlukan - nama variabel yang digunakan dalam kode fungsi untuk parameter yang menerima data peristiwa.

Lihat Bagian contoh untuk contoh lengkapnya.

Penggunaan

Pemicu Event Grid menggunakan permintaan HTTP webhook, yang dapat dikonfigurasi menggunakan pengaturan host.json yang sama dengan Pemicu HTTP.

Jenis parameter yang didukung oleh pemicu Event Grid bergantung pada versi runtime Functions, versi paket ekstensi, dan modalitas C# yang digunakan.

Saat Anda ingin fungsi memproses satu peristiwa, pemicu Event Grid dapat mengikat ke jenis berikut:

Tipe Deskripsi
Jenis yang bisa diserialisasikan JSON Functions mencoba mendeserialisasi data JSON peristiwa ke dalam jenis objek CLR (POCO) yang berusia biasa.
string Peristiwa sebagai string.
BinaryData1 Byte pesan peristiwa.
CloudEvent1 Objek peristiwa. Gunakan saat Event Grid dikonfigurasi untuk mengirimkan menggunakan skema CloudEvents.
EventGridEvent1 Objek peristiwa. Gunakan saat Event Grid dikonfigurasi untuk mengirimkan menggunakan skema Event Grid.

Saat Anda ingin fungsi memproses batch peristiwa, pemicu Event Grid dapat mengikat ke jenis berikut:

Tipe Deskripsi
CloudEvent[]1,
EventGridEvent[]1,
string[],
BinaryData[]1
Array peristiwa dari batch. Setiap entri mewakili satu peristiwa.

1 Untuk menggunakan jenis ini, Anda perlu mereferensikan Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.3.0 atau yang lebih baru dan dependensi umum untuk pengikatan jenis SDK.

Instans peristiwa Event Grid tersedia melalui parameter yang terkait dengan EventGridTrigger atribut, diketik sebagai EventSchema.

Instance Grid Peristiwa tersedia melalui parameter yang dikonfigurasi di properti name file function.json.

Instans Bus Layanan tersedia melalui parameter yang dikonfigurasi dalam properti nama properti file namefunction.json dikelompokkan sebagai func.EventGridEvent.

Skema peristiwa

Data untuk peristiwa Grid Peristiwa diterima sebagai objek JSON dalam isi permintaan HTTP. JSON terlihat mirip dengan contoh berikut:

[{
  "topic": "/subscriptions/{subscriptionid}/resourceGroups/eg0122/providers/Microsoft.Storage/storageAccounts/egblobstore",
  "subject": "/blobServices/default/containers/{containername}/blobs/blobname.jpg",
  "eventType": "Microsoft.Storage.BlobCreated",
  "eventTime": "2018-01-23T17:02:19.6069787Z",
  "id": "{guid}",
  "data": {
    "api": "PutBlockList",
    "clientRequestId": "{guid}",
    "requestId": "{guid}",
    "eTag": "0x8D562831044DDD0",
    "contentType": "application/octet-stream",
    "contentLength": 2248,
    "blobType": "BlockBlob",
    "url": "https://egblobstore.blob.core.windows.net/{containername}/blobname.jpg",
    "sequencer": "000000000000272D000000000003D60F",
    "storageDiagnostics": {
      "batchId": "{guid}"
    }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

Contoh yang ditampilkan adalah array dari satu elemen. Event Grid selalu mengirim array dan dapat mengirim lebih dari satu peristiwa dalam array. Runtime memanggil fungsi Anda sekali untuk setiap elemen array.

Properti tingkat teratas jika data JSON sama di antara semua jenis peristiwa, sementara konten data properti khusus untuk setiap jenis peristiwa. Contoh yang ditampilkan adalah untuk peristiwa penyimpanan blob.

Untuk penjelasan tentang properti umum dan khusus peristiwa, lihat Properti peristiwa di dokumentasi Event Grid.

Langkah berikutnya