Azure İşlevleri için Azure Event Grid tetikleyicisi

Event Grid kaynağı tarafından gönderilen bir olaya yanıt vermek için işlev tetikleyicisini kullanın. Olayları almak için kaynakta bir olay aboneliğiniz olmalıdır. Olay aboneliği oluşturmayı öğrenmek için bkz . Abonelik oluşturma. Bağlama kurulumu ve yapılandırması hakkında bilgi için genel bakışa bakın.

Not

Event Grid tetikleyicileri iç yük dengeleyici App Service Ortamı (ASE) içinde yerel olarak desteklenmez. Tetikleyici, sanal ağa ağ geçidi olmadan işlev uygulamasına erişemez bir HTTP isteği kullanır.

Önemli

Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Azure İşlevleri, Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.

Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.

Bu makale her iki programlama modelini de destekler.

Örnek

HTTP tetikleyicisi örneği için bkz . Olayları HTTP uç noktasına alma.

Event Grid tetikleyicisiyle kullanılan giriş parametresinin türü şu üç faktöre bağlıdır:

  • İşlevler çalışma zamanı sürümü
  • Uzantı sürümünü bağlama
  • C# işlevinin kalıcılığı.

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar ad alanlarını kullanır Microsoft.Azure.Functions.Worker.Extensions.* .
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları ad alanlarını kullanır Microsoft.Azure.WebJobs.Extensions.* .

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.

C# işlevinizi yalıtılmış bir çalışan işleminde çalıştırırken, olay özellikleri için özel bir tür tanımlamanız gerekir. Aşağıdaki örnek bir MyEventType sınıf tanımlar.

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

Aşağıdaki örnekte, özel türün hem tetikleyicide hem de Event Grid çıkış bağlamasında nasıl kullanıldığı gösterilmektedir:

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

Bu bölüm aşağıdaki örnekleri içerir:

Aşağıdaki örneklerde Java'da bağlamayı kullanan ve önce olayı POJO olarak, ikincisini ise POJO olarak String alan bir olay oluşturan tetikleyici bağlaması gösterilmektedir.

Event Grid tetikleyicisi, Dize parametresi

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

Event Grid tetikleyicisi, POJO parametresi

Bu örnekte, event grid olayının üst düzey özelliklerini temsil eden aşağıdaki POJO kullanılır:

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;

}

Olay geldiğinde, olayın JSON yükü işlev tarafından kullanılmak üzere POJO'da EventSchema seri hale getirilir. Bu işlem, işlevin olay özelliklerine nesne odaklı bir şekilde erişmesini sağlar.

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

Java işlevleri çalışma zamanı kitaplığında, değeri Event Grid'den gelecek parametrelerde ek açıklamayı kullanınEventGridTrigger. Bu ek açıklamalara sahip parametreler, bir olay geldiğinde işlevin çalışmasına neden olur. Bu ek açıklama kullanılarak yerel Java türleri, POJO'lar veya null atanabilir değerlerle Optional<T>kullanılabilir.

Aşağıdaki örnekte bir olay kılavuzu tetikleyici TypeScript işlevi gösterilmektedir.

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

Aşağıdaki örnekte bir olay kılavuzu tetikleyicisi JavaScript işlevi gösterilmektedir.

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

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

Aşağıdaki örnekte, function.json dosyasında Event Grid tetikleyici bağlamasının nasıl yapılandırılır gösterilmektedir.

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

Event Grid olayı, aşağıdaki PowerShell örneğinde gösterildiği gibi adlı eventGridEventbir parametre aracılığıyla işlevin kullanımına sunulur.

param($eventGridEvent, $TriggerMetadata)

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

Aşağıdaki örnekte Event Grid tetikleyici bağlaması ve bağlamayı kullanan bir Python işlevi gösterilmektedir. Örnek, v1 veya v2 Python programlama modelini kullanıp kullanmadığınıza bağlıdır.

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)

Özellikler

Hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları EventGridTrigger özniteliğini kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.

Yöntem EventGridTrigger imzasında bir öznitelik aşağıdadır:

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

Ek Açıklamalar

EventGridTrigger ek açıklaması, yapılandırma değerleri sağlayarak bir Event Grid bağlamasını bildirimli olarak yapılandırmanıza olanak tanır. Daha fazla ayrıntı için örnek ve yapılandırma bölümlerine bakın.

Yapılandırma

options yöntemine app.eventGrid() geçirilen nesne şu anda v4 modeli için herhangi bir özelliği desteklemiyor.

Yapılandırma

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır. Özniteliğinde EventGridTrigger ayarlanacağı oluşturucu parametresi veya özelliği yok.

function.json özelliği Açıklama
type Gerekli - olarak eventGridTriggerayarlanmalıdır.
direction Gerekli - olarak inayarlanmalıdır.
Adı Gerekli - olay verilerini alan parametre için işlev kodunda kullanılan değişken adı.

Tam örnekler için Örnek bölümüne bakın.

Kullanım

Event Grid tetikleyicisi, HTTP Tetikleyicisi ile aynı host.json ayarları kullanılarak yapılandırılabilir bir web kancası HTTP isteği kullanır.

Event Grid tetikleyicisi tarafından desteklenen parametre türü İşlevler çalışma zamanı sürümüne, uzantı paketi sürümüne ve kullanılan C# modalitesine bağlıdır.

İşlevin tek bir olayı işlemesini istediğinizde Event Grid tetikleyicisi aşağıdaki türlere bağlanabilir:

Type Açıklama
JSON serileştirilebilir türler İşlevler, olayın JSON verilerini düz eski bir CLR nesnesi (POCO) türünde seri durumdan çıkarmaya çalışır.
string Dize olarak olay.
BinaryData1 Olay iletisinin baytları.
CloudEvent1 Olay nesnesi. Event Grid, CloudEvents şemasını kullanarak teslim edecek şekilde yapılandırıldığında kullanın.
EventGridEvent1 Olay nesnesi. Event Grid, Event Grid şemasını kullanarak teslim edecek şekilde yapılandırıldığında kullanın.

İşlevin bir toplu olayları işlemesini istediğinizde Event Grid tetikleyicisi aşağıdaki türlere bağlanabilir:

Type Açıklama
CloudEvent[]1,
EventGridEvent[]1,
string[],
BinaryData[]1
Toplu işlemden olay dizisi. Her girdi bir olayı temsil eder.

1 Bu türleri kullanmak için Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.3.0 veya sonraki sürümlerine ve SDK türü bağlamaları için ortak bağımlılıklara başvurmanız gerekir.

Event Grid olay örneği, özniteliğiyle ilişkili EventGridTrigger parametresi aracılığıyla kullanılabilir ve olarak EventSchemayazılır.

Event Grid örneği, function.json dosyasının name özelliğinde yapılandırılan parametre aracılığıyla kullanılabilir.

Event Grid örneği, function.json dosyasının name özelliğinde yapılandırılmış ve olarak func.EventGridEventyazılan parametresi aracılığıyla kullanılabilir.

Olay şeması

Event Grid olayının verileri, HTTP isteğinin gövdesinde JSON nesnesi olarak alınır. JSON aşağıdaki örneğe benzer:

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

Gösterilen örnek bir öğe dizisidir. Event Grid her zaman bir dizi gönderir ve dizide birden fazla olay gönderebilir. Çalışma zamanı, her dizi öğesi için işlevinizi bir kez çağırır.

Olay JSON verilerindeki en üst düzey özellikler tüm olay türleri arasında aynıdır, özelliğin data içeriği ise her olay türüne özeldir. Gösterilen örnek bir blob depolama olayına yöneliktir.

Ortak ve olaya özgü özelliklerin açıklamaları için Event Grid belgelerindeki Olay özellikleri'ne bakın.

Sonraki adımlar