Azure Functions에 대한 Azure Event Hubs 출력 바인딩

이 문서에서는 Azure Functions에 Azure Event Hubs 바인딩을 사용하는 방법에 대해 설명합니다. Azure Functions는 Event Hubs에 대한 트리거 및 출력 바인딩을 지원합니다.

설정 및 구성 세부 정보에 대한 자세한 내용은 개요를 참조하세요.

Event Hubs 출력 바인딩을 사용하여 이벤트 스트림에 이벤트를 씁니다. 이벤트를 쓰려면 이벤트 허브에 대한 보내기 사용 권한이 있어야 합니다.

출력 바인딩을 구현하기 전에 필요한 패키지 참조가 있는지 확인합니다.

Important

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

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

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

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

예시

다음 예제에서는 메서드 반환 값을 출력으로 사용하여 이벤트 허브로 메시지 문자열을 쓰는 C# 함수를 보여줍니다.

{
    private readonly ILogger<EventHubsFunction> _logger;

    public EventHubsFunction(ILogger<EventHubsFunction> logger)
    {
        _logger = logger;
    }

    [Function(nameof(EventHubFunction))]
    [FixedDelayRetry(5, "00:00:10")]
    [EventHubOutput("dest", Connection = "EventHubConnection")]
    public string EventHubFunction(

다음 예에서는 5분마다 큐 메시지를 보내는 타이머 트리거 TypeScript 함수를 보여 줍니다.

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

export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<string> {
    const timeStamp = new Date().toISOString();
    return `Message created at: ${timeStamp}`;
}

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: output.eventHub({
        eventHubName: 'myeventhub',
        connection: 'MyEventHubSendAppSetting',
    }),
    handler: timerTrigger1,
});

여러 메시지를 출력하려면 단일 개체 대신 배열을 반환합니다. 예시:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

다음 예에서는 5분마다 큐 메시지를 보내는 타이머 트리거 JavaScript 함수를 보여 줍니다.

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

const eventHubOutput = output.eventHub({
    eventHubName: 'myeventhub',
    connection: 'MyEventHubSendAppSetting',
});

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    return: eventHubOutput,
    handler: (myTimer, context) => {
        const timeStamp = new Date().toISOString();
        return `Message created at: ${timeStamp}`;
    },
});

여러 메시지를 출력하려면 단일 개체 대신 배열을 반환합니다. 예시:

const timeStamp = new Date().toISOString();
const message = `Message created at: ${timeStamp}`;
return [`1: ${message}`, `2: ${message}`];

완전한 PowerShell 예제가 보류 중입니다.

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

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")
def eventhub_output(req: func.HttpRequest, event: func.Out[str]):
    body = req.get_body()
    if body is not None:
        event.set(body.decode('utf-8'))
    else:    
        logging.info('req body is none')
    return 'ok'

다음은 여러 메시지를 보내는 Python 코드입니다.

import logging
import azure.functions as func
from typing import List

app = func.FunctionApp()

@app.function_name(name="eventhub_output")
@app.route(route="eventhub_output")
@app.event_hub_output(arg_name="event",
                      event_hub_name="<EVENT_HUB_NAME>",
                      connection="<CONNECTION_SETTING>")

def eventhub_output(req: func.HttpRequest, event: func.Out[List[str]]) -> func.HttpResponse:
    my_messages=["message1", "message2","message3"]
    event.set(my_messages)
    return func.HttpResponse(f"Messages sent")

다음 예제에서는 Event Hub에 현재 시간을 포함하는 메시지를 작성하는 Java 함수를 보여줍니다.

@FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
   @TimerTrigger(name = "sendTimeTrigger", schedule = "0 */5 * * * *") String timerInfo)  {
     return LocalDateTime.now().toString();
 }

Java 함수 런타임 라이브러리에서 값이 Event Hub에 게시되는 매개 변수에 대한 @EventHubOutput 주석을 사용합니다. 매개 변수 형식은 OutputBinding<T>이어야 합니다. 여기서 T는 POJO 또는 원시 Java 형식입니다.

특성

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

[EventHubOutputAttribute]를 사용하여 다음 특성을 지원하는 이벤트 허브에 대한 출력 바인딩을 정의합니다.

매개 변수 설명
EventHubName 이벤트 허브의 이름입니다. 이벤트 허브 이름도 연결 문자열 있으면 해당 값은 런타임에 이 속성을 재정의합니다.
Connection Event Hubs에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 자세한 내용은 연결을 참조하세요.

데코레이터

Python v2 프로그래밍 모델에만 적용됩니다.

데코레이터를 사용하여 정의된 Python v2 함수의 경우 다음 속성은 cosmos_db_trigger다음과 같습니다.

속성 설명
arg_name 이벤트를 나타내는 함수 코드에 사용되는 변수 이름입니다.
event_hub_name 이벤트 허브의 이름입니다. 이벤트 허브 이름도 연결 문자열 있으면 해당 값은 런타임에 이 속성을 재정의합니다.
connection Event Hubs에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 자세한 내용은 연결을 참조하세요.

function.json을 사용하여 정의된 Python 함수의 경우 구성 섹션을 참조하세요.

주석

Java 함수 런타임 라이브러리에서 값이 Event Hub에 게시되는 매개 변수에 대한 EventHubOutput 주석을 사용합니다. 주석에서 지원되는 설정은 다음과 같습니다.

구성

Python v1 프로그래밍 모델에만 적용됩니다.

다음 표에서는 output.eventHub() 메서드에 전달된 options 개체에 설정할 수 있는 속성에 대해 설명합니다.

속성 설명
eventHubName 이벤트 허브의 이름입니다. 이벤트 허브 이름도 연결 문자열 있으면 해당 값은 런타임에 이 속성을 재정의합니다.
connection Event Hubs에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 자세한 내용은 연결을 참조하세요.

다음 표에서는 런타임 버전에 따라 다른 function.json 파일에서 설정한 바인딩 구성 속성을 설명합니다.

function.json 속성 설명
type eventHub로 설정해야 합니다.
direction out로 설정해야 합니다. 이 매개 변수는 Azure Portal에서 바인딩을 만들 때 자동으로 설정됩니다.
이름 이벤트를 나타내는 함수 코드에 사용되는 변수 이름입니다.
eventHubName Functions 2.x 이상. 이벤트 허브의 이름입니다. 이벤트 허브 이름도 연결 문자열 있으면 해당 값은 런타임에 이 속성을 재정의합니다.
connection Event Hubs에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 자세한 내용은 연결을 참조하세요.

로컬에서 개발하는 경우 Values 컬렉션의 local.settings.json 파일에 애플리케이션 설정을 추가합니다.

사용

Event Hubs 출력 바인딩에서 지원하는 매개 변수 형식은 Functions 런타임 버전, 확장 패키지 버전 및 사용된 C# 형식에 따라 다릅니다.

함수가 단일 이벤트를 작성하도록 하려는 경우 Event Hubs 출력 바인딩은 다음 형식에 바인딩될 수 있습니다.

Type 설명
string 이벤트를 문자열로 지정합니다. 이벤트가 간단한 텍스트일 때 사용합니다.
byte[] 이벤트의 바이트입니다.
JSON 직렬화 가능 형식 이벤트를 나타내는 개체입니다. 함수는 POCO(Plain Old CLR Object) 형식을 JSON 데이터로 직렬화하려고 시도합니다.

함수가 여러 이벤트를 작성하도록 하려는 경우 Event Hubs 출력 바인딩을 다음 형식에 바인딩할 수 있습니다.

Type 설명
T이(가) 단일 이벤트 유형 중 하나인 T[] 여러 이벤트를 포함하는 배열입니다. 각 항목은 하나의 이벤트를 나타냅니다.

다른 출력 시나리오의 경우 Microsoft.Azure.EventHubs에서 직접 형식을 만들고 사용합니다.

EventHubOutput 주석을 사용하여 함수에서 Event Hub 메시지를 출력하는 두 가지 옵션이 있습니다.

  • 반환 값: 함수 자체에 주석을 적용하면 함수의 반환 값이 Event Hub 메시지로 유지됩니다.

  • 명령적: 메시지 값을 명시적으로 설정하려면 주석을 POJO 또는 네이 T 티브 Java 형식인 형식OutputBinding<T>의 특정 매개 변수에 적용합니다. 이 구성을 사용하여 setValue 메서드에 값을 전달하면 값이 Event Hub 메시지로 유지됩니다.

완전한 PowerShell 예제가 보류 중입니다.

값을 직접 반환하거나 context.extraOutputs.set()를 사용하여 출력 메시지에 액세스합니다.

함수에서 Event Hub 메시지를 출력하는 두 가지 옵션이 있습니다.

  • 반환 값: function.json$returnname속성을 .로 설정합니다. 이 구성을 사용하면 함수의 반환 값이 Event Hub 메시지로 유지됩니다.

  • 명령적: Out 형식으로 선언된 매개 변수의 set 메서드에 값을 전달합니다. set에 전달되는 값은 Event Hub 메시지로 유지됩니다.

연결

connection 속성은 앱이 Event Hubs에 연결되어야 하는 방법을 지정하는 환경 구성에 대한 참조입니다. 다음을 지정할 수 있습니다.

  • 연결 문자열이 포함된 애플리케이션 설정의 이름
  • 함께 ID 기반 연결을 정의하는 여러 애플리케이션 설정에 대한 공유 접두사의 이름입니다.

구성된 값이 단일 설정에 대해 정확히 일치하고 다른 설정에 대해 접두사가 일치하는 경우 정확한 일치가 사용됩니다.

Connection string

이벤트 허브 자체가 아닌 네임스페이스에 대한 연결 정보 단추를 클릭하여 이 연결 문자열을 가져옵니다. 연결 문자열은 이벤트 허브 자체가 아니라 Event Hubs 네임스페이스용이어야 합니다.

트리거에 사용될 때 연결 문자열은 함수를 활성화하기 위해 최소한 "읽기" 권한이 있어야 합니다. 출력 바인딩에 사용되는 경우 연결 문자열에는 이벤트 스트림에 메시지를 보낼 수 있는 "보내기" 권한이 있어야 합니다.

이 연결 문자열은 바인딩 구성의 connection 속성에 지정된 값과 일치하는 이름으로 애플리케이션 설정에 저장해야 합니다.

ID 기반 연결

버전 5.x 이상을 사용하는 경우 비밀과 함께 연결 문자열 사용하는 대신 앱에서 Microsoft Entra ID사용하도록 할 수 있습니다. 이렇게 하려면 트리거 및 바인딩 구성의 connection 속성에 매핑되는 공통 접두사 아래에 설정을 정의합니다.

이 모드에서 확장에는 다음 속성이 필요합니다.

속성 환경 변수 템플릿 설명 예제 값
정규화된 네임스페이스 <CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace 정규화된 Event Hubs 네임스페이스입니다. myeventhubns.servicebus.windows.net

연결을 사용자 지정하기 위해 추가 속성을 설정할 수 있습니다. ID 기반 연결의 공통 속성을 참조하세요.

참고 항목

Azure App Configuration 또는 Key Vault를 사용하여 관리 ID 연결에 대한 설정을 제공하는 경우 설정 이름은 올바르게 확인되도록 __ 대신 : 또는 /와 같은 유효한 키 구분 기호를 사용해야 합니다.

예: <CONNECTION_NAME_PREFIX>:fullyQualifiedNamespace.

Azure Functions 서비스에서 호스트되는 경우 ID 기반 연결에 관리 ID가 사용됩니다. 사용자가 할당한 ID는 credentialclientID 속성을 사용하여 지정할 수 있지만 기본적으로 시스템 할당 ID가 사용됩니다. 리소스 ID를 사용하여 사용자가 할당한 ID를 구성하는 것은 지원되지 않습니다. 로컬 개발과 같은 다른 컨텍스트에서 실행할 때 사용자 지정할 수 있지만 대신 개발자 ID가 사용됩니다. ID 기반 연결을 사용하여 로컬 개발을 참조하세요.

ID에 권한 부여

사용되는 모든 ID에는 의도한 작업을 수행할 수 있는 권한이 있어야 합니다. 대부분 Azure 서비스의 경우 이는 해당 권한을 제공하는 기본 제공 또는 사용자 지정 역할을 사용하여 Azure RBAC에서 역할을 할당해야 함을 의미합니다.

Important

일부 사용 권한은 모든 컨텍스트에 필요하지 않은 대상 서비스에 의해 노출될 수 있습니다. 가능한 경우 최소 권한 원칙을 준수하여 ID에 필요한 권한만 부여하세요. 예를 들어 앱이 데이터 원본에서 읽을 수만 있으면 되는 경우 읽기 권한만 있는 역할을 사용합니다. 읽기 작업에 대한 과도한 권한이 될 수 있으므로 해당 서비스에 쓰기도 허용하는 역할을 할당하는 것은 부적절합니다. 마찬가지로 역할 할당이 읽어야 하는 리소스에 대해서만 범위가 할당되도록 할 수 있습니다.

런타임에 이벤트 허브에 대한 액세스를 제공하는 역할 할당을 만들어야 합니다. 역할 할당의 범위는 Event Hubs 네임스페이스 또는 이벤트 허브 자체에 대한 것일 수 있습니다. 소유자와 같은 관리 역할로는 충분하지 않습니다. 다음 표는 정상 작동에서 Event Hubs 확장을 사용할 때 권장되는 기본 제공 역할을 보여 줍니다. 작성하는 코드에 따라 애플리케이션에 추가 권한이 필요할 수 있습니다.

바인딩 유형 기본 제공 역할 예
트리거 Azure Event Hubs 데이터 수신기, Azure Event Hubs 데이터 소유자
출력 바인딩 Azure Event Hubs 데이터 보낸 사람

예외 및 반환 코드

바인딩 참조
Event Hubs 작업 가이드

다음 단계