Trigger Služby Azure Event Grid pro Azure Functions
Pomocí triggeru funkce můžete reagovat na událost odeslanou zdrojem Event Gridu. Abyste mohli přijímat události, musíte mít odběr události zdroje. Informace o vytvoření odběru událostí najdete v tématu Vytvoření odběru. Informace o nastavení vazby a konfiguraci najdete v přehledu.
Poznámka:
Triggery služby Event Grid nejsou nativně podporovány v interním prostředí služby App Service Environment (ASE) nástroje pro vyrovnávání zatížení. Trigger používá požadavek HTTP, který se nemůže spojit s aplikací funkcí bez brány do virtuální sítě.
Důležité
Tento článek používá karty pro podporu více verzí programovacího modelu Node.js. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.
Azure Functions podporuje dva programovací modely pro Python. Způsob, jakým definujete vazby, závisí na zvoleném programovacím modelu.
Programovací model Pythonu v2 umožňuje definovat vazby pomocí dekorátorů přímo v kódu funkce Pythonu. Další informace najdete v příručce pro vývojáře Pythonu.
Tento článek podporuje oba programovací modely.
Příklad
Příklad triggeru HTTP najdete v tématu Příjem událostí do koncového bodu HTTP.
Typ vstupního parametru použitého s triggerem Event Gridu závisí na těchto třech faktorech:
- Verze modulu runtime služby Functions
- Verze rozšíření vazby
- Způsob fungování funkce jazyka C#.
Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:
- Izolovaný model pracovního procesu: Kompilovaná funkce jazyka C#, která běží v pracovním procesu, který je izolovaný od modulu runtime. Izolovaný pracovní proces je nutný pro podporu funkcí C# spuštěných na LTS a jiných verzích než LTS .NET a rozhraní .NET Framework. Rozšíření pro izolované funkce pracovních procesů používají
Microsoft.Azure.Functions.Worker.Extensions.*
obory názvů. - Model v procesu: Zkompilovaná funkce jazyka C#, která běží ve stejném procesu jako modul runtime služby Functions. Ve variantě tohoto modelu je možné spouštět funkce pomocí skriptování jazyka C#, což je podporováno především pro úpravy portálu C#. Rozšíření pro procesní funkce používají
Microsoft.Azure.WebJobs.Extensions.*
obory názvů.
Důležité
Podpora modelu v procesu skončí 10. listopadu 2026. Důrazně doporučujeme migrovat aplikace do izolovaného modelu pracovního procesu pro plnou podporu.
Při spuštění funkce jazyka C# v izolovaném pracovním procesu je potřeba definovat vlastní typ pro vlastnosti události. Následující příklad definuje MyEventType
třídu.
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; }
}
Následující příklad ukazuje, jak se vlastní typ používá v triggeru i ve výstupní vazbě Event Gridu:
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;
}
}
Tato část obsahuje následující příklady:
Následující příklady ukazují vazbu triggeru v Javě , která používá vazbu a vygeneruje událost, nejprve přijímá událost jako String
pojo a druhou jako POJO.
Trigger Event Gridu, parametr String
@FunctionName("eventGridMonitorString")
public void logEvent(
@EventGridTrigger(
name = "event"
)
String content,
final ExecutionContext context) {
context.getLogger().info("Event content: " + content);
}
Trigger Event Gridu, parametr POJO
V tomto příkladu se používá následující POJO představující vlastnosti nejvyšší úrovně události Event Gridu:
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;
}
Při příjezdu se datová část JSON události de serializuje do EventSchema
POJO pro použití funkcí. Tento proces umožňuje funkci přistupovat k vlastnostem události objektově orientovaným způsobem.
@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);
}
V knihovně modulu runtime funkcí Java použijte poznámku EventGridTrigger
k parametrům, jejichž hodnota pochází z Event Gridu. Parametry s těmito poznámkami způsobí, že se funkce spustí při příchodu události. Tuto poznámku lze použít s nativními typy Javy, POJOs nebo hodnotami null s použitím Optional<T>
.
Následující příklad ukazuje funkci TypeScript triggeru event gridu.
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,
});
Následující příklad ukazuje, jak nakonfigurovat vazbu triggeru Event Gridu v souboru function.json .
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
]
}
Událost Event Gridu je k dispozici funkci prostřednictvím parametru s názvem eventGridEvent
, jak je znázorněno v následujícím příkladu PowerShellu.
param($eventGridEvent, $TriggerMetadata)
# Make sure to pass hashtables to Out-String so they're logged correctly
$eventGridEvent | Out-String | Write-Host
Následující příklad ukazuje vazbu triggeru Event Gridu a funkci Pythonu, která tuto vazbu používá. Tento příklad závisí na tom, jestli používáte programovací model v1 nebo v2 Pythonu.
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)
Atributy
Knihovny C# v procesu i izolovaného pracovního procesu používají atribut EventGridTrigger. Skript jazyka C# místo toho používá konfigurační soubor function.json, jak je popsáno v průvodci skriptováním jazyka C#.
Tady je EventGridTrigger
atribut v podpisu metody:
[Function(nameof(EventGridFunction))]
[EventGridOutput(TopicEndpointUri = "MyEventGridTopicUriSetting", TopicKeySetting = "MyEventGridTopicKeySetting")]
public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
{
Poznámky
Poznámka EventGridTrigger umožňuje deklarativní konfiguraci vazby Event Gridu poskytnutím hodnot konfigurace. Další podrobnosti najdete v příkladu a částech konfigurace.
Konfigurace
Konfigurace
Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json . V atributu nejsou nastaveny žádné parametry ani vlastnosti konstruktoru EventGridTrigger
.
vlastnost function.json | Popis |
---|---|
type | Povinné – musí být nastaveno na eventGridTrigger hodnotu . |
direction | Povinné – musí být nastaveno na in hodnotu . |
Jméno | Povinné – název proměnné použité v kódu funkce pro parametr, který přijímá data události. |
Kompletní příklady najdete v části Příklad.
Využití
Trigger služby Event Grid používá požadavek HTTP webhooku, který lze nakonfigurovat pomocí stejného nastavení host.json jako trigger HTTP.
Typ parametru podporovaný triggerem Event Gridu závisí na verzi modulu runtime služby Functions, verzi balíčku rozšíření a použitém způsobu použití jazyka C#.
Pokud chcete, aby funkce zpracovávala jednu událost, trigger Event Gridu může svázat s následujícími typy:
Typ | Popis |
---|---|
Serializovatelné typy JSON | Funkce se pokusí deserializovat data JSON události do prostého typu objektu CLR (POCO). |
string |
Událost jako řetězec. |
BinaryData1 | Bajty zprávy události. |
CloudEvent1 | Objekt události. Používá se, když je Event Grid nakonfigurovaný tak, aby doručoval pomocí schématu CloudEvents. |
EventGridEvent1 | Objekt události. Používá se, když je Event Grid nakonfigurovaný tak, aby doručoval pomocí schématu Event Gridu. |
Pokud chcete, aby funkce zpracovávala dávku událostí, trigger Event Gridu může svázat s následujícími typy:
Typ | Popis |
---|---|
CloudEvent[] 1,EventGridEvent[] 1,string[] ,BinaryData[] 1 |
Pole událostí z dávky. Každá položka představuje jednu událost. |
1 Pokud chcete použít tyto typy, musíte odkazovat na Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.3.0 nebo novější a běžné závislosti pro vazby typu sady SDK.
Instance události Event Gridu je k dispozici prostřednictvím parametru přidruženého k atributuEventGridTrigger
, který je zadán jako .EventSchema
Instance Event Gridu je k dispozici prostřednictvím parametru nakonfigurovaného ve vlastnosti souboru function.jsonname
.
Instance Event Gridu je k dispozici prostřednictvím parametru nakonfigurovaného ve vlastnosti souboru function.jsonname
, která je zadána jako func.EventGridEvent
.
Schéma událostí
Data události Event Gridu se přijímají jako objekt JSON v textu požadavku HTTP. Json vypadá podobně jako v následujícím příkladu:
[{
"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"
}]
Zobrazený příklad je pole jednoho prvku. Event Grid vždy odesílá pole a může posílat více než jednu událost v poli. Modul runtime vyvolá vaši funkci jednou pro každý prvek pole.
Vlastnosti nejvyšší úrovně v datech JSON události jsou stejné mezi všemi typy událostí, zatímco obsah data
vlastnosti je specifický pro každý typ události. Příklad je určený pro událost úložiště objektů blob.
Vysvětlení běžných vlastností a vlastností specifických pro události najdete v dokumentaci k Event Gridu.
Další kroky
- Pokud máte dotazy, odešlete problém týmu sem.
- Odeslání události Event Gridu