다음을 통해 공유


Azure Functions 트리거 및 바인딩 개념

이 문서에서는 함수 트리거 및 바인딩에 관한 개략적인 개념에 대해 알아봅니다.

트리거는 함수가 실행되도록 합니다. 트리거는 함수가 호출되는 방식을 정의합니다. 하나의 함수는 하나의 트리거만 가져야 합니다. 트리거는 메서드 호출과 마찬가지로 함수에 데이터를 전달할 수도 있습니다.

함수에 바인딩하는 것은 함수를 다른 리소스에 선언적으로 연결하는 방법입니다. 바인딩은 함수(입력 바인딩)에 데이터를 전달하거나 바인딩 매개 변수를 사용하여 함수(출력 바인딩)에서 데이터를 쓸 수 있도록 합니다. 함수 트리거는 기본적으로 특수한 유형의 입력 바인딩입니다.

함수의 특정 시나리오에 맞게 서로 다른 바인딩을 혼합하고 일치시킬 수 있습니다. 바인딩은 선택 사항이며 함수는 여러 개의 입력 및 출력 바인딩을 가질 수 있습니다.

트리거와 바인딩을 사용하면 다른 서비스에 대한 액세스를 하드 코딩하는 것을 방지할 수 있습니다. 함수는 함수 매개 변수에서 데이터를 수신합니다(예: 큐 메시지의 콘텐츠). 함수의 반환 값을 사용하여 데이터를 보냅니다(예를 들어 큐 메시지를 만들기 위해).

여러 함수를 구현하는 다음과 같은 예제를 살펴보세요.

예제 시나리오 트리거 입력 바인딩 출력 바인딩
메시지를 다른 큐에 쓰는 함수를 실행하는 새 큐 메시지가 도착합니다. * 없음 *
예약된 작업이 Blob Storage 콘텐츠를 읽고 새 Azure Cosmos DB 문서를 만듭니다. 타이머 Blob Storage Azure Cosmos DB
Blob Storage에서 이미지를 읽고 Azure Cosmos DB에서 문서를 읽어서 메일을 보내는 데 Event Grid가 사용됩니다. Event Grid Blob Storage 및 Azure Cosmos DB SendGrid

* 다른 큐를 나타냄

위에는 몇 가지 예제만 나와 있지만 이를 통해 트리거와 바인딩을 함께 사용하는 방법을 알아볼 수 있습니다. 보다 포괄적인 시나리오 집합은 Azure Functions 시나리오를 참조하세요.

함수는 입력 및 출력 바인딩을 사용하여 Azure 서비스에 연결할 필요가 없습니다. 항상 코드에서 Azure SDK 클라이언트를 만들고 데이터 전송에 대신 사용할 수 있습니다. 자세한 내용은 서비스에 연결을 참조하세요.

트리거 및 바인딩 정의

함수에는 단일 트리거와 하나 이상의 바인딩이 있습니다. 바인딩 유형은 입력 또는 출력입니다. 모든 서비스가 입력 및 출력 바인딩을 모두 지원하는 것은 아닙니다. 특정 바인딩 코드 예제는 특정 바인딩 확장을 참조하세요.

트리거와 바인딩은 개발 언어에 따라 다르게 정의됩니다. 기사 상단에서 언어를 선택하세요.

이 예제에서는 Azure Storage 큐에 메시지를 쓰는 출력 바인딩이 있는 HTTP 트리거 함수를 보여 줍니다.

C# 클래스 라이브러리 함수의 경우 트리거와 바인딩은 C# 특성으로 메서드와 매개변수를 장식하여 구성되며, 적용되는 특정 특성은 C# 런타임 모델에 따라 달라질 수 있습니다.

HTTP 트리거(HttpTrigger)는 MultiResponse 개체를 반환하는 HttpExample(이)라는 함수의 Run 메서드에 정의됩니다.

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
    FunctionContext executionContext)
{

이 예제에서는 HTTP 요청에 대한 HttpResponse을(를) 반환하고 QueueOutput 바인딩을 사용하여 스토리지 큐에 메시지를 쓰는 MultiResponse 개체 정의를 보여 줍니다.

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

자세한 내용은 C# 격리 작업자 모델 가이드를 참조하세요.

레거시 C# 스크립트 함수는 function.json 정의 파일을 사용합니다. 자세한 내용은 Azure Functions C# 스크립트(.csx) 개발자 참조를 참조하세요.

Java 함수의 경우 트리거 및 바인딩은 특정 메서드 및 매개 변수에 주석을 추가하여 구성됩니다. 이 HTTP 트리거(@HttpTrigger)는 message 매개 변수의 @QueueOutput 주석으로 정의된 스토리지 큐에 쓰는 HttpTriggerQueueOutput(이)라는 함수의 run 메서드에 정의됩니다.

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

자세한 내용은 Java 개발자 가이드를 참조하세요.

Node.js 함수에 대해 트리거 및 바인딩을 정의하는 방법은 Functions에 대한 특정 버전의 Node.js에 따라 달라집니다.

Functions 버전 4용 Node.js에서는 @azure/functions 모듈에서 내보낸 개체를 사용하여 트리거 및 바인딩을 구성합니다. 자세한 내용은 Node.js 개발자 가이드를 참조하세요.

이 예제는 수신된 각 HTTP 요청에 대한 큐 항목을 만드는 HTTP 트리거 함수입니다.

내보낸 app 개체의 http 메서드는 HTTP 트리거를 정의하고 outputstorageQueue 메서드는 이 트리거에 대한 출력 바인딩을 정의합니다.

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

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: async (request, context) => {
        const body = await request.text();
        context.extraOutputs.set(queueOutput, body);
        return { body: 'Created queue item.' };
    },
});

내보낸 app 개체의 http 메서드는 HTTP 트리거를 정의하고 outputstorageQueue 메서드는 이 트리거에 대한 출력 바인딩을 정의합니다.

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

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const body = await request.text();
    context.extraOutputs.set(queueOutput, body);
    return { body: 'Created queue item.' };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: httpTrigger1,
});

이 예제 function.json 파일은 함수를 정의합니다.

    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

자세한 내용은 PowerShell 개발자 가이드를 참조하세요.

함수가 정의되는 방법은 Functions용 Python 버전에 따라 달라집니다.

Functions용 Python 버전 2에서는 데코레이터를 사용하여 코드에서 직접 함수를 정의합니다.

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

함수에 바인딩 추가

입력 또는 출력 바인딩을 사용하여 함수를 다른 서비스에 연결할 수 있습니다. 함수에 특정 정의를 추가하여 바인딩을 추가합니다. 방법을 알아보려면 바인딩을 사용하여 Azure 서비스에 함수 연결을 참조하세요.

Azure Functions는 올바르게 구성되어야 하는 여러 바인딩을 지원합니다. 예를 들어 함수는 큐(입력 바인딩)에서 데이터를 읽고 데이터베이스(출력 바인딩)에 데이터를 동시에 쓸 수 있습니다.

지원되는 바인딩

이 표는 Azure Functions 런타임의 주요 버전에서 지원되는 바인딩을 보여 줍니다.

Type 1.x1 2.x 이상2 트리거 입력 출력
Blob Storage
Azure Cosmos DB
Azure Data Explorer
Azure SQL
Dap4
Event Grid
Event Hubs
HTTP 및 웹후크
IoT Hub
Kafka3
Mobile Apps
Notification Hubs
Queue Storage
Redis
RabbitMQ3
SendGrid
Service Bus
SignalR
Table Storage
타이머
Twilio

참고:

  1. 2026년 9월 14일에 Azure Functions 런타임 버전 1.x에 대한 지원이 종료됩니다. 완전한 지원을 받으려면 앱을 버전 4.x로 마이그레이션하는 것이 좋습니다.
  2. 버전 2.x 런타임부터는 HTTP 및 타이머를 제외한 모든 바인딩이 등록되어야 합니다. 바인딩 확장 등록을 참조하세요.
  3. 트리거는 소비 계획에서 지원되지 않습니다. 런타임 기반 트리거가 필요합니다.
  4. Kubernetes, IoT Edge 및 기타 자체 호스팅 모드에서만 지원됩니다.

미리 보기 상태 바인딩 또는 프로덕션 용도로 승인된 바인딩에 대한 자세한 내용은 지원되는 언어를 참조하세요.

특정 바인딩 확장 버전은 기본 서비스 SDK가 지원되는 동안에만 지원됩니다. 기본 서비스 SDK 버전의 지원에 대한 변경 내용은 소비 확장에 대한 지원에 영향을 미칩니다.

바인딩 코드 예제

다음 표를 사용하여 함수에서 바인딩을 사용하는 방법을 보여 주는 특정 바인딩 형식의 더 많은 예제를 찾을 수 있습니다. 먼저 작업 중인 프로젝트에 해당하는 언어 탭을 선택하세요.

C#용 바인딩 코드는 특정 프로세스 모델에 따라 다릅니다.

서비스 예제 샘플
Blob Storage 트리거
입력
출력
링크
Azure Cosmos DB 트리거
입력
출력
링크
Azure Data Explorer 입력
출력
링크
Azure SQL 트리거
입력
출력
링크
Event Grid 트리거
출력
링크
Event Hubs 트리거
출력
IoT Hub 트리거
출력
HTTP 트리거 링크
Queue Storage 트리거
출력
링크
RabbitMQ 트리거
출력
SendGrid 출력
Service Bus 트리거
출력
링크
SignalR 트리거
입력
출력
Table Storage 입력
출력
타이머 트리거 링크
Twilio 출력 링크
서비스 예제 샘플
Blob Storage 트리거
입력
출력
링크
Azure Cosmos DB 트리거
입력
출력
링크
Azure Data Explorer 입력
출력
링크
Azure SQL 트리거
입력
출력
Event Grid 트리거
출력
링크
Event Hubs 트리거
출력
IoT Hub 트리거
출력
HTTP 트리거 링크
Queue Storage 트리거
출력
링크
RabbitMQ 트리거
출력
SendGrid 출력
Service Bus 트리거
출력
링크
SignalR 트리거
입력
출력
Table Storage 입력
출력
타이머 트리거 링크
Twilio 출력 링크
서비스 예제 샘플
Blob Storage 트리거
입력
출력
링크
Azure Cosmos DB 트리거
입력
출력
링크
Azure Data Explorer 입력
출력
Azure SQL 트리거
입력
출력
링크
Event Grid 트리거
출력
링크
Event Hubs 트리거
출력
IoT Hub 트리거
출력
HTTP 트리거 링크
Queue Storage 트리거
출력
링크
RabbitMQ 트리거
출력
SendGrid 출력
Service Bus 트리거
출력
링크
SignalR 트리거
입력
출력
Table Storage 입력
출력
타이머 트리거 링크
Twilio 출력 링크
서비스 예제 샘플
Blob Storage 트리거
입력
출력
링크
Azure Cosmos DB 트리거
입력
출력
링크
Azure SQL 트리거
입력
출력
Event Grid 트리거
출력
링크
Event Hubs 트리거
출력
IoT Hub 트리거
출력
HTTP 트리거 링크
Queue Storage 트리거
출력
링크
RabbitMQ 트리거
출력
SendGrid 출력
Service Bus 트리거
출력
링크
SignalR 트리거
입력
출력
Table Storage 입력
출력
타이머 트리거 링크
Twilio 출력 링크

Python용 바인딩 코드는 Python 모델 버전에 따라 다릅니다.

서비스 예제 샘플
Blob Storage 트리거
입력
출력
링크
Azure Cosmos DB 트리거
입력
출력
링크
Azure Data Explorer 입력
출력
Azure SQL 트리거
입력
출력
링크
Event Grid 트리거
출력
링크
Event Hubs 트리거
출력
IoT Hub 트리거
출력
HTTP 트리거 링크
Queue Storage 트리거
출력
링크
RabbitMQ 트리거
출력
SendGrid 출력
Service Bus 트리거
출력
링크
SignalR 트리거
입력
출력
Table Storage 입력
출력
타이머 트리거 링크
Twilio 출력 링크

사용자 지정 바인딩

사용자 지정 입력 및 출력 바인딩을 만들 수 있습니다. 바인딩은 .NET으로 작성해야 하지만 모든 지원되는 언어에서 사용할 수 있습니다. 사용자 지정 바인딩을 만드는 방법은 Creating custom input and output bindings(사용자 지정 입력 및 출력 바인딩 만들기)를 참조하세요.