Pemicu Azure Event Grid untuk Azure Functions
Gunakan pemicu fungsi untuk merespons peristiwa yang dikirim ke topik Event Grid. Untuk mempelajari cara kerja pemicu Event Grid.
Untuk informasi tentang pengaturan dan detail konfigurasi, lihat Ikhtisar.
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.
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 menggunakan salah satu mode C# berikut:
- Pustaka kelas dalam proses: fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions.
- Pustaka kelas proses terisolasi: fungsi C# yang dikompilasi yang berjalan dalam proses yang terisolasi dari runtime. Proses terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada .NET 5.0.
- Skrip C#: digunakan terutama saat membuat fungsi C# di portal Microsoft Azure.
Contoh berikut menunjukkan fungsi Functions versi 3.x yang menggunakan parameter pengikatan CloudEvent:
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);
}
}
}
Contoh berikut menunjukkan fungsi Functions versi 3.x yang menggunakan parameter pengikatan EventGridEvent:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public static class EventGridTriggerDemo
{
[FunctionName("EventGridTriggerDemo")]
public static void Run([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log)
{
log.LogInformation(eventGridEvent.Data.ToString());
}
}
}
Contoh berikut menunjukkan fungsi yang menggunakan parameter pengikatan JObject:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public static class EventGridTriggerCSharp
{
[FunctionName("EventGridTriggerCSharp")]
public static void Run([EventGridTrigger] JObject eventGridEvent, ILogger log)
{
log.LogInformation(eventGridEvent.ToString(Formatting.Indented));
}
}
}
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 perpustakaan runtime fungsi Java, gunakan anotasi EventGridTrigger pada parameter yang nilainya akan berasal dari EventGrid. Parameter dengan anotasi ini menyebabkan fungsi berjalan saat peristiwa tiba. Anotasi ini dapat digunakan dengan jenis Java asli, POJO, atau nilai yang dapat diubah ke null menggunakan Optional<T>.
Contoh berikut menunjukkan pengikatan pemicu dalam file function.json dan fungsi JavaScript yang menggunakan pengikatan.
Berikut data pengikatan dalam file function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
],
"disabled": false
}
Berikut kode JavaScript:
module.exports = async function (context, eventGridEvent) {
context.log("JavaScript Event Grid function processed a request.");
context.log("Subject: " + eventGridEvent.subject);
context.log("Time: " + eventGridEvent.eventTime);
context.log("Data: " + JSON.stringify(eventGridEvent.data));
};
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 di file function.json dan fungsi Python yang menggunakan pengikatan.
Berikut data pengikatan dalam file function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "event",
"direction": "in"
}
],
"disabled": false,
"scriptFile": "__init__.py"
}
Berikut kode Python:
import json
import logging
import azure.functions as func
def main(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# yang berada dalam proses maupun yang berada dalam proses terisolasi menggunakan atribut EventGridTrigger. Skrip C# menggunakan file konfigurasi function.json sebagai gantinya.
Berikut ini adalah atributEventGridTrigger dalam metode yang khas:
[FunctionName("EventGridTest")]
public static void EventGridTest([EventGridTrigger] JObject eventGridEvent, ILogger log)
{
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
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 |
|---|---|
| tipe | Wajib - harus diatur ke eventGridTrigger. |
| petunjuk | Wajib - harus diatur ke in. |
| nama | Diperlukan - nama variabel yang digunakan dalam kode fungsi untuk parameter yang menerima data peristiwa. |
Lihat bagian Contoh untuk mengetahui contoh lengkapnya.
Penggunaan
Jenis parameter yang didukung oleh pemicu Event Grid bergantung pada versi runtime Functions, versi paket ekstensi, dan modalitas C# yang digunakan.
Fungsi pustaka kelas C# dalam proses mendukung jenis berikut:
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.