다음을 통해 공유


Azure Functions의 Azure Event Grid 트리거

함수 트리거를 사용하여 Event Grid 원본에서 보낸 이벤트에 응답합니다. 이벤트를 받으려면 원본에 대한 이벤트 구독이 있어야 합니다. 이벤트 구독을 만드는 방법을 알아보려면 구독 만들기를 참조하세요. 바인딩을 설정하고 구성하는 방법에 대한 자세한 내용은 개요를 참조하세요.

참고 항목

Event Grid 트리거는 내부 부하 분산 장치 ASE(App Service Environment)에서 기본적으로 지원되지 않습니다. 트리거는 가상 네트워크에 게이트웨이 없이 함수 앱에 연결할 수 없는 HTTP 요청을 사용합니다.

Important

이 문서에서는 탭을 사용하여 여러 버전의 Node.js 프로그래밍 모델을 지원합니다. v4 모델은 일반적으로 사용 가능하며 JavaScript 및 TypeScript 개발자를 위해 보다 유연하고 직관적인 환경을 제공하도록 설계되었습니다. v4 모델의 작동 방식에 대한 자세한 내용은 Azure Functions Node.js 개발자 가이드를 참조하세요. v3과 v4의 차이점에 대해 자세히 알아보려면 마이그레이션 가이드를 참조하세요.

Azure Functions는 Python에 대해 두 가지 프로그래밍 모델을 지원합니다. 바인딩을 정의하는 방법은 선택한 프로그래밍 모델에 따라 달라집니다.

Python v2 프로그래밍 모델을 사용하면 Python 함수 코드에서 직접 데코레이터를 사용하여 바인딩을 정의할 수 있습니다. 자세한 내용은 Python 개발자 가이드참조하세요.

이 문서에서는 두 프로그래밍 모델을 모두 지원합니다.

예시

HTTP 트리거 예제는 HTTP 엔드포인트에 대한 수신 이벤트를 참조 하세요.

Event Grid 트리거와 함께 사용되는 입력 매개 변수의 형식은 다음 세 가지 요인에 따라 다릅니다.

  • Functions 런타임 버전
  • 바인딩 확장 버전
  • C# 함수의 형식입니다.

C# 함수는 다음 C# 모드 중 하나를 사용하여 만들 수 있습니다.

  • 격리된 작업자 모델: 런타임에서 격리된 작업자 프로세스에서 실행되는 컴파일된 C# 함수입니다. LTS 및 비 LTS 버전 .NET 및 .NET Framework에서 실행되는 C# 함수를 지원하려면 격리된 작업자 프로세스가 필요합니다. 격리된 작업자 프로세스 함수에 대한 확장은 Microsoft.Azure.Functions.Worker.Extensions.* 네임스페이스를 사용합니다.
  • In Process 모델: Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다. 이 모델의 변형에서는 주로 C# 포털 편집에 지원되는 C# 스크립팅을 사용하여 Functions를 실행할 수 있습니다. In Process 함수에 대한 확장은 Microsoft.Azure.WebJobs.Extensions.* 네임스페이스를 사용합니다.

격리된 작업자 프로세스에서 C# 함수를 실행할 때 이벤트 속성에 대한 사용자 지정 형식을 정의해야 합니다. 다음 예제는 MyEventType 클래스를 정의합니다.


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

다음 예제에서는 트리거 및 Event Grid 출력 바인딩 모두에서 사용자 지정 형식이 사용되는 방법을 보여 줍니다.

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

public class MyEventType
{

이 섹션에는 다음 예제가 포함되어 있습니다.

다음 예제에서는 바인딩을 사용하고 이벤트를 생성한 후 처음에는 이벤트를 String으로 수신하고, 두 번째로는 POJO로 수신하는 Java 함수의 트리거 바인딩을 보여 줍니다.

Event Grid 트리거, 문자열 매개 변수

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

Event Grid 트리거, POJO 매개 변수

이 예제에서는 Event Grid 이벤트의 최상위 속성을 나타내는 다음 POJO를 사용합니다.

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;

}

도착 시 이벤트의 JSON 페이로드는 함수에서 사용하기 위해 POJO로 EventSchema 직렬화되지 않습니다. 이 프로세스에서 함수는 개체 지향 방식으로 이벤트의 속성에 액세스할 수 있습니다.

  @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 함수 런타임 라이브러리에서 값이 Event Grid에서 제공되는 매개 변수에 대한 EventGridTrigger 주석을 사용합니다. 이러한 주석이 있는 매개 변수는 이벤트가 도착할 때 함수가 실행되도록 합니다. 이 주석은 을 사용하여 네이티브 Java 형식, POJO 또는 nullable 값과 함께 사용할 Optional<T>수 있습니다.

다음 예에서는 이벤트 그리드 트리거 TypeScript 함수를 보여 줍니다.

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

다음 예에서는 이벤트 그리드 트리거 JavaScript 함수를 보여 줍니다.

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

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

다음 예제에서는 function.json 파일에서 Event Grid 트리거 바인딩을 구성하는 방법을 보여줍니다.

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

Event Grid 이벤트는 다음 PowerShell 예제와 같이 명명된 eventGridEvent매개 변수를 통해 함수에서 사용할 수 있습니다.

param($eventGridEvent, $TriggerMetadata)

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

다음 예제에서는 Event Grid 트리거 바인딩 및 바인딩을 사용하는 Python 함수를 보여 줍니다. 이 예제는 v1 또는 v2 Python 프로그래밍 모델을 사용하는지 여부에 따라 달라집니다.

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)

특성

In Process격리된 작업자 프로세스 C# 라이브러리는 모두 EventGridTrigger 특성을 사용합니다. 대신 C# 스크립트는 C# 스크립팅 가이드에 설명된 대로 function.json 구성 파일을 사용합니다.

다음은 메서드 서명의 EventGridTrigger 특성입니다.

public static MyEventType Run([EventGridTrigger] MyEventType input, FunctionContext context)
{
    var logger = context.GetLogger(nameof(EventGridFunction));
    logger.LogInformation(input.Data?.ToString());

주석

EventGridTrigger 주석을 사용하면 구성 값을 제공하여 Event Grid 바인딩을 선언적으로 구성할 수 있습니다. 자세한 내용은 예제구성 섹션을 참조하세요.

구성

app.eventGrid() 메서드에 전달된 options 개체는 현재 모델 v4에 대한 속성을 지원하지 않습니다.

구성

다음 표에서는 function.json 파일에 설정된 바인딩 구성 속성을 설명합니다. EventGridTrigger 특성에서 설정할 생성자 매개 변수 또는 속성은 없습니다.

function.json 속성 설명
type 필수 - eventGridTrigger으로 설정해야 합니다.
direction 필수 - in으로 설정해야 합니다.
이름 필수 - 이벤트 데이터를 수신하는 매개 변수에 대한 함수 코드에 사용되는 변수 이름입니다.

전체 예제는 예제 섹션을 참조하세요.

사용

Event Grid 트리거는 HTTP 트리거와 동일한 host.json 설정을 사용하여 구성할 수 있는 웹후크 HTTP 요청을 사용합니다.

Event Grid 트리거에서 지원하는 매개 변수 형식은 Functions 런타임 버전, 확장 패키지 버전 및 사용된 C# 형식에 따라 다릅니다.

함수가 단일 이벤트를 처리하도록 하려는 경우 Event Grid 트리거는 다음 형식에 바인딩될 수 있습니다.

Type 설명
JSON 직렬화 가능 형식 함수는 이벤트의 JSON 데이터를 POCO(Plain Old CLR Object) 형식으로 역직렬화하려고 합니다.
string 이벤트를 문자열로 지정합니다.
BinaryData1 이벤트 메시지의 바이트입니다.
CloudEvent1 이벤트 개체입니다. CloudEvents 스키마를 사용하여 Event Grid를 제공하도록 구성된 경우에 사용합니다.
EventGridEvent1 이벤트 개체입니다. Event Grid 스키마를 사용하여 Event Grid를 제공하도록 구성된 경우에 사용합니다.

함수가 이벤트 일괄 처리를 수행하려는 경우 Event Grid 트리거는 다음 형식에 바인딩될 수 있습니다.

Type 설명
CloudEvent[]1,
EventGridEvent[]1,
string[],
BinaryData[]1
일괄 처리의 이벤트 배열입니다. 각 항목은 하나의 이벤트를 나타냅니다.

1 이러한 형식을 사용하려면 Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.3.0 이상SDK 형식 바인딩에 대한 공통 종속성을 참조해야 합니다.

Event Grid 이벤트 인스턴스는 특성EventSchema에 연결된 매개 변수를 EventGridTrigger 통해 사용할 수 있습니다.

Event Grid 인스턴스는 function.json 파일의 name 속성에 구성된 매개 변수를 통해 사용할 수 있습니다.

Event Grid 인스턴스는 function.json 파일의 name 속성func.EventGridEvent구성된 매개 변수를 통해 사용할 수 있습니다.

이벤트 스키마

Event Grid 이벤트에 대한 데이터는 HTTP 요청 본문에서 JSON 개체로 수신됩니다. JSON은 다음 예제와 유사합니다.

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

표시된 예제는 한 요소의 배열입니다. Event Grid는 항상 배열을 전송하며 배열에 둘 이상의 이벤트를 보낼 수 있습니다. 런타임은 각 배열 요소에 대해 한 번씩 함수를 호출합니다.

이벤트 JSON 데이터의 최상위 속성은 모든 이벤트 유형에서 동일하지만, data 속성의 내용은 이벤트 유형마다 다릅니다. 표시된 예제는 Blob Storage 이벤트에 대한 것입니다.

일반적인 속성 및 이벤트별 속성에 대한 설명은 Event Grid 설명서의 이벤트 속성을 참조하세요.

다음 단계