바인딩을 사용하여 Azure 서비스에 함수 연결

함수를 만들 때 트리거 템플릿 집합에서 언어별 트리거 코드가 프로젝트에 추가됩니다. 입력 또는 출력 바인딩을 사용하여 함수를 다른 서비스에 연결하려면 함수에 특정 바인딩 정의를 추가해야 합니다. 바인딩에 대한 자세한 내용은 Azure Functions 트리거 및 바인딩 개념 참조하세요.

로컬 개발

함수를 로컬로 개발할 때 바인딩을 추가하려면 함수 코드를 업데이트해야 합니다. function.json사용하는 언어의 경우 Visual Studio Code 함수에 바인딩을 추가하는 도구를 제공합니다.

예제에 따라 수동으로 바인딩 추가

기존 함수에 바인딩을 추가할 때 코드의 함수 정의에 바인딩별 특성을 추가해야 합니다.

기존 함수에 바인딩을 추가할 때 코드의 함수 정의에 바인딩별 주석을 추가해야 합니다.

기존 함수에 바인딩을 추가할 때 함수 코드를 업데이트하고 function.json 구성 파일에 정의를 추가해야 합니다.

기존 함수에 바인딩을 추가할 때 모델에 따라 함수 정의를 업데이트해야 합니다.

코드에서 함수 정의에 바인딩별 주석을 추가해야 합니다.

Go에서는 main() 함수에서 플루언트 등록 API를 사용해 지원되는 트리거를 구성합니다. 각 트리거 유형에는 구성에 대한 기능 옵션이 있는 전용 등록 방법이 있습니다. 별도의 바인딩 구성 파일이 필요하지 않습니다.

다음 예제에서는 HTTP 트리거 함수를 보여줍니다. Go 함수에서 Queue Storage에 기록해야 하는 경우 Queue Storage 출력 바인딩이 현재 Go 작업자에서 지원되지 않으므로 Go용 Azure SDK 직접 사용합니다.

package main

import (
    "encoding/json"
    "fmt"
    "net/http"

    "github.com/azure/azure-functions-golang-worker/sdk"
    "github.com/azure/azure-functions-golang-worker/worker"
)

func main() {
    app := sdk.FunctionApp()
    app.HTTP("HttpExample", httpHandler,
        sdk.WithMethods("GET", "POST"),
        sdk.WithAuth("anonymous"),
    )
    worker.Start(app)
}

func httpHandler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
        var body struct{ Name string }
        json.NewDecoder(r.Body).Decode(&body)
        name = body.Name
    }
    if name == "" {
        w.WriteHeader(http.StatusBadRequest)
        fmt.Fprint(w, "Please pass a name on the query string or in the request body.")
        return
    }
    // Queue output bindings are not yet supported in the Go worker.
    // Use the Azure SDK for Go to write to Queue Storage directly.
    fmt.Fprintf(w, "Hello, %s!", name)
}

메모

Go 작업자는 현재 트리거만 지원합니다. 큐 스토리지 출력 바인딩과 같은 입력 및 출력 바인딩은 아직 사용할 수 없습니다. Go용 Azure SDK 사용하여 함수 코드에서 직접 다른 Azure 서비스와 상호 작용합니다.

Go 작업자는 현재 다음 트리거 유형을 지원합니다.

트리거 유형 등록 방법 예시
HTTP app.HTTP() HTTP 샘플
타이머 app.Timer() 타이머 예제
Azure Cosmos DB app.CosmosDB() Cosmos DB 샘플
Azure Service Bus(큐) app.ServiceBusQueue() Service Bus 큐 예제
Azure Service Bus (토픽) app.ServiceBusTopic() Service Bus 토픽 샘플
이벤트 허브 app.EventHub() Event Hubs 샘플
이벤트 그리드 app.EventGrid() Event Grid 샘플
Blob Storage app.Blob() Blob 예제

자세한 내용은 Go 개발자 참조를 참조하세요.

다음 예제에서는 Queue Storage 출력 바인딩HTTP 트리거 함수에 추가되어, 함수 정의가 어떻게 되는지를 보여줍니다.

HTTP 트리거 함수도 HTTP 응답을 반환하므로 함수는 HTTP 및 큐 출력을 모두 나타내는 MultiResponse 개체를 반환합니다.

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)

이 예제는 출력 바인딩을 포함하는 MultiResponse 개체의 정의입니다.

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

이 예제에서는 ASP.NET Core 통합 사용합니다. ASP.NET Core 통합을 사용하지 않는 경우 HttpRequestHttpRequestData, IActionResultHttpResponseData 변경해야 합니다.

함수가 완료되면 큐에 메시지가 전송됩니다. 출력 바인딩을 정의하는 방법은 프로세스 모델에 따라 다릅니다. 참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

@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) {

참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

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

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

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  extraOutputs: [sendToQueue],
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (name) {
        const msg = `Name passed to the function ${name}`;
        context.extraOutputs.set(sendToQueue, [msg]);
        return { body: msg };
      } else {
        context.log('Missing required data');
        return { status: 404, body: 'Missing required data' };
      }
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

출력 바인딩을 정의하는 방법은 Node.js 모델의 버전에 따라 달라집니다. 참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

@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.')

출력 바인딩을 정의하는 방법은 Python 모델의 버전에 따라 달라집니다. 참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

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

const sendToQueue: StorageQueueOutput = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

export async function HttpExample(
  request: HttpRequest,
  context: InvocationContext,
): Promise<HttpResponseInit> {
  try {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text());
    context.log(`Name: ${name}`);

    if (name) {
      const msg = `Name passed to the function ${name}`;
      context.extraOutputs.set(sendToQueue, [msg]);
      return { body: msg };
    } else {
      context.log('Missing required data');
      return { status: 404, body: 'Missing required data' };
    }
  } catch (error) {
    context.log(`Error: ${error}`);
    return { status: 500, body: 'Internal Server Error' };
  }
}

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

출력 바인딩을 정의하는 방법은 Node.js 모델의 버전에 따라 달라집니다. 참조할 수 있는 예제 바인딩 코드에 대한 링크를 비롯한 자세한 내용은 함수에 바인딩 추가를 참조하세요.

다음 표를 사용하여 기존 함수를 업데이트하는 데 사용할 수 있는 특정 바인딩 형식의 예를 찾을 수 있습니다. 먼저 project 해당하는 언어 탭을 선택합니다.

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

서비스 예시 샘플
Blob Storage 트리거
인푸트
Output
Link
Azure Cosmos DB 트리거
인푸트
Output
Link
Azure Data Explorer 인푸트
Output
Link
Azure SQL 트리거
인푸트
Output
Link
이벤트 그리드 (Event Grid) 트리거
Output
Link
이벤트 허브 (Event Hubs) 트리거
Output
IoT Hub 트리거
Output
HTTP 트리거 Link
Queue Storage 트리거
Output
Link
RabbitMQ 트리거
Output
SendGrid Output
서비스 버스 트리거
Output
Link
Azure SignalR Service 트리거
인푸트
Output
테이블 스토리지 인푸트
Output
Timer 트리거 Link
Twilio Output Link
서비스 예시 샘플
Blob Storage 트리거
인푸트
Output
Link
Azure Cosmos DB 트리거
인푸트
Output
Link
Azure Data Explorer 인푸트
Output
Link
Azure SQL 트리거
인푸트
Output
이벤트 그리드 (Event Grid) 트리거
Output
Link
이벤트 허브 (Event Hubs) 트리거
Output
IoT Hub 트리거
Output
HTTP 트리거 Link
Queue Storage 트리거
Output
Link
RabbitMQ 트리거
Output
SendGrid Output
서비스 버스 트리거
Output
Link
Azure SignalR Service 트리거
인푸트
Output
테이블 스토리지 인푸트
Output
Timer 트리거 Link
Twilio Output
서비스 예시 샘플
Blob Storage 트리거
인푸트
Output
Link
Azure Cosmos DB 트리거
인푸트
Output
Link
Azure Data Explorer 인푸트
Output
Azure SQL 트리거
인푸트
Output
Link
이벤트 그리드 (Event Grid) 트리거
Output
이벤트 허브 (Event Hubs) 트리거
Output
IoT Hub 트리거
Output
HTTP 트리거 Link
Queue Storage 트리거
Output
Link
RabbitMQ 트리거
Output
SendGrid Output
서비스 버스 트리거
Output
Link
Azure SignalR Service 트리거
인푸트
Output
테이블 스토리지 인푸트
Output
Timer 트리거
Twilio Output
서비스 예시 샘플
Blob Storage 트리거
인푸트
Output
Azure Cosmos DB 트리거
인푸트
Output
Azure SQL 트리거
인푸트
Output
이벤트 그리드 (Event Grid) 트리거
Output
이벤트 허브 (Event Hubs) 트리거
Output
IoT Hub 트리거
Output
HTTP 트리거 Link
Queue Storage 트리거
Output
RabbitMQ 트리거
Output
SendGrid Output
서비스 버스 트리거
Output
Azure SignalR Service 트리거
인푸트
Output
테이블 스토리지 인푸트
Output
Timer 트리거
Twilio Output

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

서비스 예시 샘플
Blob Storage 트리거
인푸트
Output
Link
Azure Cosmos DB 트리거
인푸트
Output
Link
Azure Data Explorer 인푸트
Output
Azure SQL 트리거
인푸트
Output
Link
이벤트 그리드 (Event Grid) 트리거
Output
이벤트 허브 (Event Hubs) 트리거
Output
IoT Hub 트리거
Output
HTTP 트리거 Link
Queue Storage 트리거
Output
RabbitMQ 트리거
Output
SendGrid Output
서비스 버스 트리거
Output
Link
Azure SignalR Service 트리거
인푸트
Output
테이블 스토리지 인푸트
Output
Timer 트리거
Twilio Output

Visual Studio 코드

Visual Studio Code를 사용하여 함수를 개발하고 함수가 function.json 파일을 사용하는 경우 Azure Functions 확장 프로그램에서 기존 function.json 파일에 바인딩을 자동으로 추가할 수 있습니다. 자세한 내용은 입력 및 출력 바인딩 추가를 참조하세요.

Azure portal

Azure portal 함수를 개발할 때 지정된 함수의 인테그레이션 탭에 입력 및 출력 바인딩을 추가합니다. 새 바인딩은 언어에 따라 function.json 파일 또는 메서드 특성에 추가됩니다. 다음 문서에서는 포털에서 기존 함수에 바인딩을 추가하는 방법의 예를 보여 줍니다.

다음 단계