Azure Functions HTTP 트리거 및 바인딩Azure Functions HTTP triggers and bindings

이 문서에서는 Azure Functions에서 HTTP 트리거 및 출력 바인딩을 사용하는 방법에 대해 설명합니다.This article explains how to work with HTTP triggers and output bindings in Azure Functions.

HTTP 트리거는 웹후크에 응답하도록 사용자 지정할 수 있습니다.An HTTP trigger can be customized to respond to webhooks.

이는 Azure Functions 개발자에 대한 참조 정보입니다.This is reference information for Azure Functions developers. Azure Functions를 처음 접하는 경우 다음 리소스부터 시작합니다.If you're new to Azure Functions, start with the following resources:

HTTP 또는 WebHook를 사용할 계획인 경우 HttpClient의 부적절한 인스턴스화로 인해 발생할 수 있는 포트 소모를 피하도록 계획합니다.If you plan to use the HTTP or WebHook bindings, plan to avoid port exhaustion that can be caused by improper instantiation of HttpClient. 자세한 내용은 Azure Functions에서 연결을 관리하는 방법을 참조하세요.For more information, see How to manage connections in Azure Functions.

이 문서의 코드는 기본적으로 .NET Core를 사용하는 Functions 2.x 구문으로 설정됩니다.The code in this article defaults to Functions 2.x syntax which uses .NET Core. 1.x 구문에 대한 자세한 내용은 1.x 기능 템플릿을 참조하세요.For information on the 1.x syntax, see the 1.x functions templates.

패키지 - Functions 1.xPackages - Functions 1.x

HTTP 바인딩은 Microsoft.Azure.WebJobs.Extensions.Http NuGet 패키지 버전 1.x에 제공됩니다.The HTTP bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Http NuGet package, version 1.x. 이 패키지에 대한 소스 코드는 azure-webjobs-sdk-extensions GitHub 리포지토리에 있습니다.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

이 바인딩에 대한 지원은 모든 개발 환경에서 자동으로 제공됩니다.Support for this binding is automatically provided in all development environments. 패키지를 수동으로 설치하거나 확장을 등록할 필요는 없습니다.You don't have to manually install the package or register the extension.

패키지 - Functions 2.xPackages - Functions 2.x

HTTP 바인딩은 Microsoft.Azure.WebJobs.Extensions.Http NuGet 패키지 버전 3.x에 제공됩니다.The HTTP bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Http NuGet package, version 3.x. 이 패키지에 대한 소스 코드는 azure-webjobs-sdk-extensions GitHub 리포지토리에 있습니다.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

이 바인딩에 대한 지원은 모든 개발 환경에서 자동으로 제공됩니다.Support for this binding is automatically provided in all development environments. 패키지를 수동으로 설치하거나 확장을 등록할 필요는 없습니다.You don't have to manually install the package or register the extension.

트리거Trigger

HTTP 트리거를 사용하면 HTTP 요청으로 함수를 호출할 수 있습니다.The HTTP trigger lets you invoke a function with an HTTP request. HTTP 트리거를 사용하여 서버리스 API를 만들고 웹후크에 응답할 수 있습니다.You can use an HTTP trigger to build serverless APIs and respond to webhooks.

기본적으로 HTTP 트리거는 Functions 1.x에서 본문이 비어 있는 HTTP 200 OK 또는 Functions 2.x에서 본문이 비어 있는 HTTP 204 No Content를 반환합니다.By default, an HTTP trigger returns HTTP 200 OK with an empty body in Functions 1.x, or HTTP 204 No Content with an empty body in Functions 2.x. 응답을 수정하려면 HTTP 출력 바인딩을 구성합니다.To modify the response, configure an HTTP output binding.

트리거 - 예제Trigger - example

언어 관련 예제를 참조하세요.See the language-specific example:

트리거 - C# 예제Trigger - C# example

다음 예제는 쿼리 문자열이나 HTTP 요청의 본문에서 name 매개 변수를 찾는 C# 함수를 보여 줍니다.The following example shows a C# function that looks for a name parameter either in the query string or the body of the HTTP request. 반환 값은 출력 바인딩에 사용되지만, 반환 값 특성은 필요 없습니다.Notice that the return value is used for the output binding, but a return value attribute isn't required.

[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] 
    HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

트리거 - C# 스크립트 예제Trigger - C# script example

다음 예제는 function.json 파일의 트리거 바인딩 및 바인딩을 사용하는 C# 스크립트 함수를 보여줍니다.The following example shows a trigger binding in a function.json file and a C# script function that uses the binding. 함수는 쿼리 문자열이나 HTTP 요청의 본문에서 name 매개 변수를 찾습니다.The function looks for a name parameter either in the query string or the body of the HTTP request.

function.json 파일은 다음과 같습니다.Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "authLevel": "function",
            "name": "req",
            "type": "httpTrigger",
            "direction": "in",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "name": "$return",
            "type": "http",
            "direction": "out"
        }
    ]
}

구성 섹션에서는 이러한 속성을 설명합니다.The configuration section explains these properties.

다음은 HttpRequest에 바인딩하는 C# 스크립트 코드입니다.Here's C# script code that binds to HttpRequest:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

HttpRequest 대신 사용자 지정 개체에 바인딩할 수 있습니다.You can bind to a custom object instead of HttpRequest. 이 개체는 요청 본문에서 만들어지고 JSON으로 구문 분석됩니다.This object is created from the body of the request and parsed as JSON. 마찬가지로, 형식을 HTTP 응답 출력 바인딩으로 전달할 수도 있습니다. 그러면 200 상태 코드를 갖는 응답 본문으로 반환됩니다.Similarly, a type can be passed to the HTTP response output binding and returned as the response body, along with a 200 status code.

using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;

public static string Run(Person person, ILogger log)
{   
    return person.Name != null
        ? (ActionResult)new OkObjectResult($"Hello, {person.Name}")
        : new BadRequestObjectResult("Please pass an instance of Person.");
}

public class Person {
     public string Name {get; set;}
}

트리거 - F# 예제Trigger - F# example

다음 예제는 function.json 파일의 트리거 바인딩 및 바인딩을 사용하는 F# 함수를 보여줍니다.The following example shows a trigger binding in a function.json file and an F# function that uses the binding. 함수는 쿼리 문자열이나 HTTP 요청의 본문에서 name 매개 변수를 찾습니다.The function looks for a name parameter either in the query string or the body of the HTTP request.

function.json 파일은 다음과 같습니다.Here's the function.json file:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

구성 섹션에서는 이러한 속성을 설명합니다.The configuration section explains these properties.

F# 코드는 다음과 같습니다.Here's the F# code:

open System.Net
open System.Net.Http
open FSharp.Interop.Dynamic

let Run(req: HttpRequestMessage) =
    async {
        let q =
            req.GetQueryNameValuePairs()
                |> Seq.tryFind (fun kv -> kv.Key = "name")
        match q with
        | Some kv ->
            return req.CreateResponse(HttpStatusCode.OK, "Hello " + kv.Value)
        | None ->
            let! data = Async.AwaitTask(req.Content.ReadAsAsync<obj>())
            try
                return req.CreateResponse(HttpStatusCode.OK, "Hello " + data?name)
            with e ->
                return req.CreateErrorResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
    } |> Async.StartAsTask

다음 예제와 같이 NuGet을 사용하여 FSharp.Interop.DynamicDynamitey 어셈블리를 참조하는 project.json 파일이 필요합니다.You need a project.json file that uses NuGet to reference the FSharp.Interop.Dynamic and Dynamitey assemblies, as shown in the following example:

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "Dynamitey": "1.0.2",
        "FSharp.Interop.Dynamic": "3.0.0"
      }
    }
  }
}

트리거 - JavaScript 예제Trigger - JavaScript example

다음 예제는 function.json 파일의 트리거 바인딩과 바인딩을 사용하는 JavaScript 함수를 보여줍니다.The following example shows a trigger binding in a function.json file and a JavaScript function that uses the binding. 함수는 쿼리 문자열이나 HTTP 요청의 본문에서 name 매개 변수를 찾습니다.The function looks for a name parameter either in the query string or the body of the HTTP request.

function.json 파일은 다음과 같습니다.Here's the function.json file:

{
    "disabled": false,    
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

구성 섹션에서는 이러한 속성을 설명합니다.The configuration section explains these properties.

JavaScript 코드는 다음과 같습니다.Here's the JavaScript code:

module.exports = function(context, req) {
    context.log('Node.js HTTP trigger function processed a request. RequestUri=%s', req.originalUrl);

    if (req.query.name || (req.body && req.body.name)) {
        context.res = {
            // status defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
    context.done();
};

트리거 - Python 예제Trigger - Python example

다음 예제는 function.json 파일의 트리거 바인딩 및 바인딩을 사용하는 Python 함수를 보여 줍니다.The following example shows a trigger binding in a function.json file and a Python function that uses the binding. 함수는 쿼리 문자열이나 HTTP 요청의 본문에서 name 매개 변수를 찾습니다.The function looks for a name parameter either in the query string or the body of the HTTP request.

function.json 파일은 다음과 같습니다.Here's the function.json file:

{
    "scriptFile": "__init__.py",
    "disabled": false,    
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

구성 섹션에서는 이러한 속성을 설명합니다.The configuration section explains these properties.

다음은 Python 코드입니다.Here's the Python code:

import logging
import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
            "Please pass a name on the query string or in the request body",
            status_code=400
        )

트리거 - Java 예제Trigger - Java examples

다음 예제는 function.json 파일의 HTTP 트리거 바인딩과 이 바인딩을 사용하는 해당 Java 함수를 보여 줍니다.The following examples show the HTTP trigger binding in a function.json file and the respective Java functions that use the binding.

function.json 파일은 다음과 같습니다.Here's the function.json file:

{
    "disabled": false,    
    "bindings": [
        {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req"
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

쿼리 문자열에서 매개 변수 읽기(Java)Read parameter from the query string (Java)

이 예제에서는 쿼리 문자열에서 id라는 매개 변수를 읽고 이 매개 변수를 사용하여 콘텐츠 형식 application/json으로 클라이언트에 반환되는 JSON 문서를 빌드합니다.This example reads a parameter, named id, from the query string, and uses it to build a JSON document returned to the client, with content type application/json.

    @FunctionName("TriggerStringGet")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", 
              methods = {HttpMethod.GET}, 
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        
        // Item list
        context.getLogger().info("GET parameters are: " + request.getQueryParameters());

        // Get named parameter
        String id = request.getQueryParameters().getOrDefault("id", "");

        // Convert and display
        if (id.isEmpty()) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        } 
        else {
            // return JSON from to the client
            // Generate document
            final String name = "fake_name";
            final String jsonDocument = "{\"id\":\"" + id + "\", " + 
                                         "\"description\": \"" + name + "\"}";
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(jsonDocument)
                          .build();
        }
    }

POST 요청에서 본문 읽기(Java)Read body from a POST request (Java)

이 예제에서는 POST 요청의 본문을 String으로 읽고, 이 매개 변수를 사용하여 콘텐츠 형식 application/json으로 클라이언트에 반환되는 JSON 문서를 빌드합니다.This example reads the body of a POST request, as a String, and uses it to build a JSON document returned to the client, with content type application/json.

    @FunctionName("TriggerStringPost")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", 
              methods = {HttpMethod.POST}, 
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        
        // Item list
        context.getLogger().info("Request body is: " + request.getBody().orElse(""));

        // Check request body
        if (!request.getBody().isPresent()) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        } 
        else {
            // return JSON from to the client
            // Generate document
            final String body = request.getBody().get();
            final String jsonDocument = "{\"id\":\"123456\", " + 
                                         "\"description\": \"" + body + "\"}";
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(jsonDocument)
                          .build();
        }
    }

경로에서 매개 변수 읽기(Java)Read parameter from a route (Java)

이 예제에서는 라우팅 경로에서 id라는 필수 매개 변수와 선택적 매개 변수 name을 읽은 후 이러한 매개 변수를 사용하여 콘텐츠 형식 application/json으로 클라이언트에 반환되는 JSON 문서를 빌드합니다.This example reads a mandatory parameter, named id, and an optional parameter name from the route path, and uses them to build a JSON document returned to the client, with content type application/json. TT

    @FunctionName("TriggerStringRoute")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", 
              methods = {HttpMethod.GET}, 
              authLevel = AuthorizationLevel.ANONYMOUS,
              route = "trigger/{id}/{name=EMPTY}") // name is optional and defaults to EMPTY
            HttpRequestMessage<Optional<String>> request,
            @BindingName("id") String id,
            @BindingName("name") String name,
            final ExecutionContext context) {
        
        // Item list
        context.getLogger().info("Route parameters are: " + id);

        // Convert and display
        if (id == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        } 
        else {
            // return JSON from to the client
            // Generate document
            final String jsonDocument = "{\"id\":\"" + id + "\", " + 
                                         "\"description\": \"" + name + "\"}";
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(jsonDocument)
                          .build();
        }
    }

POST 요청에서 POJO 본문 읽기(Java)Read POJO body from a POST request (Java)

다음은 이 예제에서 참조되는 ToDoItem 클래스의 코드입니다.Here is the code for the ToDoItem class, referenced in this example:


public class ToDoItem {

  private String id;
  private String description;  

  public ToDoItem(String id, String description) {
    this.id = id;
    this.description = description;
  }

  public String getId() {
    return id;
  }

  public String getDescription() {
    return description;
  }
  
  @Override
  public String toString() {
    return "ToDoItem={id=" + id + ",description=" + description + "}";
  }
}

이 예제에서는 POST 요청의 본문을 읽습니다.This example reads the body of a POST request. 요청 본문은 자동으로 ToDoItem 개체로 역직렬화된 후 콘텐츠 형식 application/json을 사용하여 클라이언트에 반환됩니다.The request body gets automatically de-serialized into a ToDoItem object, and is returned to the client, with content type application/json. ToDoItem 매개 변수는 HttpMessageResponse.Builder 클래스의 body 속성에 할당될 때 Functions 런타임에 의해 직렬화됩니다.The ToDoItem parameter is serialized by the Functions runtime as it is assigned to the body property of the HttpMessageResponse.Builder class.

    @FunctionName("TriggerPojoPost")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", 
              methods = {HttpMethod.POST}, 
              authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<ToDoItem>> request,
            final ExecutionContext context) {
        
        // Item list
        context.getLogger().info("Request body is: " + request.getBody().orElse(null));

        // Check request body
        if (!request.getBody().isPresent()) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
                          .body("Document not found.")
                          .build();
        } 
        else {
            // return JSON from to the client
            // Generate document
            final ToDoItem body = request.getBody().get();
            return request.createResponseBuilder(HttpStatus.OK)
                          .header("Content-Type", "application/json")
                          .body(body)
                          .build();
        }
    }

트리거 - 특성Trigger - attributes

C# 클래스 라이브러리에서 HttpTrigger 특성을 사용합니다.In C# class libraries, use the HttpTrigger attribute.

특성 생성자 매개 변수에 권한 부여 수준 및 허용되는 HTTP 메서드를 설정할 수 있으며 웹후크 유형 및 경로 템플릿에 대한 속성이 있습니다.You can set the authorization level and allowable HTTP methods in attribute constructor parameters, and there are properties for webhook type and route template. 이러한 설정에 대한 자세한 내용은 트리거 - 구성을 참조하세요.For more information about these settings, see Trigger - configuration. 다음은 메서드 서명의 HttpTrigger 특성입니다.Here's an HttpTrigger attribute in a method signature:

[FunctionName("HttpTriggerCSharp")]
public static Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req)
{
    ...
}

전체 예제는 트리거 - C# 예제를 참조하세요.For a complete example, see Trigger - C# example.

트리거 - 구성Trigger - configuration

다음 표에서는 function.json 파일 및 HttpTrigger 특성에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file and the HttpTrigger attribute.

function.json 속성function.json property 특성 속성Attribute property DescriptionDescription
typetype n/an/a 필수 - httpTrigger으로 설정해야 합니다.Required - must be set to httpTrigger.
directiondirection n/an/a 필수 - in으로 설정해야 합니다.Required - must be set to in.
namename n/an/a 필수 - 요청 또는 요청 본문의 함수 코드에 사용되는 변수 이름입니다.Required - the variable name used in function code for the request or request body.
authLevelauthLevel AuthLevelAuthLevel 키가 있는 경우 함수를 호출하기 위해 요청에 포함되어야 하는 키를 결정합니다.Determines what keys, if any, need to be present on the request in order to invoke the function. 권한 부여 수준은 다음 값 중 하나일 수 있습니다.The authorization level can be one of the following values:
  • anonymous—: API 키가 필요하지 않습니다.anonymous—No API key is required.
  • function—: 함수 전용 API 키가 필요합니다.function—A function-specific API key is required. authLevel 속성 값을 제공하지 않을 경우 기본값입니다.This is the default value if none is provided.
  • admin—: 마스터 키가 필요합니다.admin—The master key is required.
자세한 내용은 권한 부여 키에 대한 섹션을 참조하세요.For more information, see the section about authorization keys.
methodsmethods 메서드Methods 함수에서 응답할 HTTP 메서드의 배열입니다.An array of the HTTP methods to which the function responds. 이 속성을 지정하지 않으면 함수에서 모든 HTTP 메서드에 응답합니다.If not specified, the function responds to all HTTP methods. HTTP 엔드포인트 사용자 지정을 참조하세요.See customize the http endpoint.
routeroute RouteRoute 경로 템플릿을 정의하여 함수에서 응답할 요청 URL을 제어합니다.Defines the route template, controlling to which request URLs your function responds. 값을 제공하지 않을 경우 기본값은 <functionname>입니다.The default value if none is provided is <functionname>. 자세한 내용은 HTTP 엔드포인트 사용자 지정을 참조하세요.For more information, see customize the http endpoint.
webHookTypewebHookType WebHookTypeWebHookType 버전 1.x 런타임에서만 지원됩니다.Supported only for the version 1.x runtime.

HTTP 트리거가 지정된 공급자의 웹후크 수신기(receiver)로 작동하도록 구성합니다.Configures the HTTP trigger to act as a webhook receiver for the specified provider. 이 속성을 설정하면 methods 속성을 설정하지 마십시오.Don't set the methods property if you set this property. 웹후크 형식은 다음 값 중 하나일 수 있습니다.The webhook type can be one of the following values:
  • genericJson—특정 공급자를 위한 논리가 없는 범용 webhook 엔드포인트입니다.genericJson—A general-purpose webhook endpoint without logic for a specific provider. 이 설정은 HTTP POST 및 application/json 콘텐츠 형식을 사용하는 요청으로만 제한됩니다.This setting restricts requests to only those using HTTP POST and with the application/json content type.
  • github—이 함수는 GitHub 웹후크에 응답합니다.github—The function responds to GitHub webhooks. GitHub 웹후크에는 authLevel 속성을 사용하지 마십시오.Do not use the authLevel property with GitHub webhooks. 자세한 내용은 이 문서의 뒷부분에서 GitHub 웹후크 섹션을 참조하세요.For more information, see the GitHub webhooks section later in this article.
  • slack—이 함수는 Slack 웹후크에 응답합니다.slack—The function responds to Slack webhooks. Slack 웹후크에는 authLevel 속성을 사용하지 마십시오.Do not use the authLevel property with Slack webhooks. 자세한 내용은 이 문서의 뒷부분에서 Slack 웹후크 섹션을 참조하세요.For more information, see the Slack webhooks section later in this article.

트리거 - 사용Trigger - usage

C# 및 F# 함수의 경우 트리거 입력 형식을 HttpRequest 또는 사용자 지정 형식으로 선언할 수 있습니다.For C# and F# functions, you can declare the type of your trigger input to be either HttpRequest or a custom type. HttpRequest를 선택하면 요청 개체에 대한 모든 권한을 갖게 됩니다.If you choose HttpRequest, you get full access to the request object. 사용자 지정 형식의 경우 런타임은 JSON 요청 본문의 구문을 분석하여 개체 속성을 설정하려고 합니다.For a custom type, the runtime tries to parse the JSON request body to set the object properties.

JavaScript 함수의 경우 함수 런타임은 요청 개체 대신 요청 본문을 제공합니다.For JavaScript functions, the Functions runtime provides the request body instead of the request object. 자세한 내용은 JavaScript 트리거 예제를 참조하세요.For more information, see the JavaScript trigger example.

HTTP 엔드포인트 사용자 지정Customize the HTTP endpoint

기본적으로 HTTP 트리거용 함수를 만드는 경우 폼의 경로를 사용하여 이 함수의 주소를 지정할 수 있습니다.By default when you create a function for an HTTP trigger, the function is addressable with a route of the form:

http://<yourapp>.azurewebsites.net/api/<funcname>

HTTP 트리거의 입력 바인딩에서 선택적 route 속성을 사용하여 이 경로를 사용자 지정할 수 있습니다.You can customize this route using the optional route property on the HTTP trigger's input binding. 예를 들어 다음 function.json 파일은 HTTP 트리거에 대한 route 속성을 정의합니다.As an example, the following function.json file defines a route property for an HTTP trigger:

{
    "bindings": [
    {
        "type": "httpTrigger",
        "name": "req",
        "direction": "in",
        "methods": [ "get" ],
        "route": "products/{category:alpha}/{id:int?}"
    },
    {
        "type": "http",
        "name": "res",
        "direction": "out"
    }
    ]
}

이 구성을 사용하면 원래 경로 대신 다음 경로를 사용하여 함수의 주소를 지정할 수 있습니다.Using this configuration, the function is now addressable with the following route instead of the original route.

http://<yourapp>.azurewebsites.net/api/products/electronics/357

이렇게 하면 함수 코드에서 주소의 두 매개 변수, category 및 _id_를 지원할 수 있습니다. 매개 변수에서 웹 API 경로 제약 조건을 사용할 수 있습니다.This allows the function code to support two parameters in the address, category and id. You can use any Web API Route Constraint with your parameters. 다음 C# 함수 코드는 두 매개 변수를 모두 사용합니다.The following C# function code makes use of both parameters.

public static Task<IActionResult> Run(HttpRequest req, string category, int? id, ILogger log)
{
    if (id == null)
    {
        return (ActionResult)new OkObjectResult($"All {category} items were requested.");
    }
    else
    {
        return (ActionResult)new OkObjectResult($"{category} item with id = {id} has been requested.");
    }
    
    // -----
    log.LogInformation($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");
}

다음은 동일한 경로 매개 변수를 사용하는 Node.js 함수 코드입니다.Here is Node.js function code that uses the same route parameters.

module.exports = function (context, req) {

    var category = context.bindingData.category;
    var id = context.bindingData.id;

    if (!id) {
        context.res = {
            // status defaults to 200 */
            body: "All " + category + " items were requested."
        };
    }
    else {
        context.res = {
            // status defaults to 200 */
            body: category + " item with id = " + id + " was requested."
        };
    }

    context.done();
}

기본적으로 모든 함수 경로에는 api 접두사가 붙습니다.By default, all function routes are prefixed with api. host.json 파일에서 http.routePrefix 속성을 사용하여 접두사를 사용자 지정하거나 제거할 수도 있습니다.You can also customize or remove the prefix using the http.routePrefix property in your host.json file. 다음 예제에서는 host.json 파일에서 빈 문자열을 접두사로 사용하여 api 경로 접두사를 제거합니다.The following example removes the api route prefix by using an empty string for the prefix in the host.json file.

{
    "http": {
    "routePrefix": ""
    }
}

클라이언트 ID 사용Working with client identities

함수 앱이 App Service 인증 / 권한 부여를 사용하는 경우 코드에서 인증된 클라이언트에 대한 정보를 볼 수 있습니다.If your function app is using App Service Authentication / Authorization, you can view information about authenticated clients from your code. 이 정보는 플랫폼에 의해 삽입된 요청 헤더로서 사용할 수 있습니다.This information is available as request headers injected by the platform.

데이터 바인딩에서 이 정보를 읽을 수도 있습니다.You can also read this information from binding data. 이 기능은 Functions 2.x 런타임에서만 사용할 수 있습니다.This capability is only available to the Functions 2.x runtime. 또한 이 기능은 현재 .NET 언어에 대해서만 사용할 수 있습니다.It is also currently only available for .NET languages.

.NET 언어에서 이 정보는 ClaimsPrincipal로 사용할 수 있습니다.In .NET languages, this information is available as a ClaimsPrincipal. 다음 예제에 표시된 대로 ClaimsPrincipal을 요청 컨텍스트의 일부로 사용할 수 있습니다.The ClaimsPrincipal is available as part of the request context as shown in the following example:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

public static IActionResult Run(HttpRequest req, ILogger log)
{
    ClaimsPrincipal identities = req.HttpContext.User;
    // ...
    return new OkObjectResult();
}

또는 ClaimsPrincipal은 함수 시그니처에 단순히 추가 매개 변수로 포함될 수 있습니다.Alternatively, the ClaimsPrincipal can simply be included as an additional parameter in the function signature:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using Newtonsoft.Json.Linq;

public static void Run(JObject input, ClaimsPrincipal principal, ILogger log)
{
    // ...
    return;
}

권한 부여 키Authorization keys

함수에서는 키를 사용해 개발 중에 HTTP 함수 엔드포인트 액세스를 더 어렵게 만들 수 있습니다.Functions lets you use keys to make it harder to access your HTTP function endpoints during development. 표준 HTTP 트리거의 경우 요청에 이러한 API 키가 있어야 할 수 있습니다.A standard HTTP trigger may require such an API key be present in the request.

중요

키가 있으면 개발 중에 HTTP 엔드포인트를 난독 처리할 수는 있지만, 프로덕션 환경에서 HTTP 트리거를 보호할 수는 없습니다.While keys may help obfuscate your HTTP endpoints during development, they are not intended as a way to secure an HTTP trigger in production. 자세히 알아보려면 프로덕션 환경에서 HTTP 엔드포인트 보호를 참조하세요.To learn more, see Secure an HTTP endpoint in production.

참고

Functions 1.x 런타임에서는 웹후크 공급자가 키를 사용하여 공급자가 지원하는 항목에 따라 다양한 방식으로 요청에 권한을 부여할 수 있습니다.In the Functions 1.x runtime, webhook providers may use keys to authorize requests in a variety of ways, depending on what the provider supports. 여기에 대해서는 웹후크 및 키에서 다룹니다.This is covered in Webhooks and keys. 버전 2.x 런타임에서는 웹후크 공급자가 기본적으로 지원되지 않습니다.The version 2.x runtime does not include built-in support for webhook providers.

다음과 같이 두 가지 유형의 키가 있습니다.There are two types of keys:

  • 호스트 키: 함수 앱 내의 모든 함수에서 공유합니다.Host keys: These keys are shared by all functions within the function app. API 키로 사용되면 이 키를 통해 함수 앱 내의 모든 함수에 액세스할 수 있습니다.When used as an API key, these allow access to any function within the function app.
  • 함수 키: 정의된 특정 함수에만 적용됩니다.Function keys: These keys apply only to the specific functions under which they are defined. API 키로 사용되면 이 키를 통해 해당 함수에만 액세스할 수 있습니다.When used as an API key, these only allow access to that function.

각 키의 이름은 참조될 수 있도록 지정되며 함수 및 호스트 수준에서는 "default"라는 기본 키가 있습니다.Each key is named for reference, and there is a default key (named "default") at the function and host level. function 키는 호스트 키보다 우선합니다.Function keys take precedence over host keys. 두 키가 동일한 이름으로 정의되면 항상 함수 키가 사용됩니다.When two keys are defined with the same name, the function key is always used.

각 함수 앱에는 특수 마스터 키도 있습니다.Each function app also has a special master key. 이 키는 런타임 API에 대한 관리자 권한을 제공하는 _master 호스트 키입니다.This key is a host key named _master, which provides administrative access to the runtime APIs. 이 키를 취소할 수 없습니다.This key cannot be revoked. 권한 부여 수준 admin을 설정하는 경우 요청은 마스터 키를 사용해야 하며, 다른 키를 사용하는 경우 권한 부여가 실패합니다.When you set an authorization level of admin, requests must use the master key; any other key results in authorization failure.

주의

함수 앱에서는 마스터 키를 통해 높은 권한이 부여되므로, 이 키를 제3자와 공유하거나 네이티브 클라이언트 애플리케이션에 배포해서는 안 됩니다.Due to the elevated permissions in your function app granted by the master key, you should not share this key with third parties or distribute it in native client applications. 따라서 관리자 권한 부여 수준을 선택할 때는 주의해야 합니다.Use caution when choosing the admin authorization level.

키 확보Obtaining keys

키는 Azure에 함수 앱의 일부로 저장되며 나머지는 암호화되어 있습니다.Keys are stored as part of your function app in Azure and are encrypted at rest. 키를 보거나 새 키를 만들거나 키를 새 값으로 전환하려면 Azure Portal에서 HTTP 트리거 함수 중 하나로 이동한 다음 관리를 선택합니다.To view your keys, create new ones, or roll keys to new values, navigate to one of your HTTP-triggered functions in the Azure portal and select Manage.

포털에서 함수 키를 관리합니다.

키 관리 API를 사용 하 여 프로그래밍 방식으로 함수 키를 가져올 수 있습니다.You may obtain function keys programmatically by using Key management API.

API 키 권한 부여API key authorization

대다수 HTTP 트리거 템플릿을 사용할 때는 요청에 API 키가 필요합니다.Most HTTP trigger templates require an API key in the request. 따라서 HTTP 요청은 일반적으로 다음 URL과 같습니다.So your HTTP request normally looks like the following URL:

https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>

위에 나와 있는 것처럼 쿼리 문자열 변수 code에 키를 포함할 수 있습니다.The key can be included in a query string variable named code, as above. x-functions-key HTTP 헤더에 키를 포함할 수도 있습니다.It can also be included in an x-functions-key HTTP header. 키 값은 함수에 대해 정의된 모든 function 키 또는 모든 호스트 키일 수 있습니다.The value of the key can be any function key defined for the function, or any host key.

키를 요구하지 않는 익명 요청을 허용할 수 있습니다.You can allow anonymous requests, which do not require keys. 마스터 키를 사용하도록 요구할 수도 있습니다.You can also require that the master key be used. 바인딩 JSON에서 authLevel 속성을 사용하여 기본 권한 수준을 변경합니다.You change the default authorization level by using the authLevel property in the binding JSON. 자세한 내용은 트리거 - 구성을 참조하세요.For more information, see Trigger - configuration.

참고

함수를 로컬로 실행할 때는 지정된 권한 부여 수준 설정에 관계없이 권한 부여가 사용하지 않도록 설정됩니다.When running functions locally, authorization is disabled regardless of the specified authentication level setting. Azure에 게시하고 나면 트리거의 authLevel 설정이 적용됩니다.After publishing to Azure, the authLevel setting in your trigger is enforced.

프로덕션 환경에서 HTTP 엔드포인트 보호Secure an HTTP endpoint in production

프로덕션 환경에서 함수 엔드포인트를 완벽하게 보호하려면 다음의 함수 앱 수준 보안 옵션 중 하나를 구현해야 합니다.To fully secure your function endpoints in production, you should consider implementing one of the following function app-level security options:

  • 함수 앱에 대해 App Service 인증/권한 부여를 설정합니다.Turn on App Service Authentication / Authorization for your function app. App Service 플랫폼에서는 AAD(Azure Active Directory) 및 기타 여러 타사 ID 공급자를 사용하여 클라이언트를 인증할 수 있습니다.The App Service platform lets use Azure Active Directory (AAD) and several third-party identity providers to authenticate clients. 이 플랫폼을 통해 함수용 사용자 지정 권한 부여 규칙을 구현할 수 있으며, 함수 코드에서 사용자 정보를 사용할 수 있습니다.You can use this to implement custom authorization rules for your functions, and you can work with user information from your function code. 자세히 알아보려면 Azure App Service에서 인증 및 권한 부여클라이언트 ID 사용을 참조하세요.To learn more, see Authentication and authorization in Azure App Service and Working with client identities.

  • Azure APIM(API Management)를 사용하여 요청을 인증합니다.Use Azure API Management (APIM) to authenticate requests. APIM은 수신 요청에 사용할 수 있는 여러 가지 API 보안 옵션을 제공합니다.APIM provides a variety of API security options for incoming requests. 자세히 알아보려면 API Management 인증 정책을 참조하세요.To learn more, see API Management authentication policies. APIM을 적용하면 APIM 인스턴스의 IP 주소에서 보내는 요청만 수락하도록 함수 앱을 구성할 수 있습니다.With APIM in place, you can configure your function app to accept requests only from the IP address of your APIM instance. 자세히 알아보려면 IP 주소 제한을 참조하세요.To learn more, see IP address restrictions.

  • Azure ASE(App Service Environment)에 함수 앱을 배포합니다.Deploy your function app to an Azure App Service Environment (ASE). ASE는 함수를 실행할 전용 호스팅 환경을 제공합니다.ASE provides a dedicated hosting environment in which to run your functions. ASE 사용 시에는 모든 수신 요청을 인증하는 데 사용할 수 있는 단일 프런트 엔드 게이트웨이를 구성할 수 있습니다.ASE lets you configure a single front-end gateway that you can use to authenticate all incoming requests. 자세한 내용은 App Service Environment용 WAF(웹 애플리케이션 방화벽) 구성을 참조하세요.For more information, see Configuring a Web Application Firewall (WAF) for App Service Environment.

이러한 함수 앱 수준 보안 방법 중 하나를 사용할 때는 HTTP 트리거 함수 인증 수준을 anonymous로 설정해야 합니다.When using one of these function app-level security methods, you should set the HTTP-triggered function authentication level to anonymous.

webhooksWebhooks

참고

웹후크 모드는 Functions 런타임의 버전 1.x에서만 사용 가능합니다.Webhook mode is only available for version 1.x of the Functions runtime. 버전 2.x에서 HTTP 트리거의 성능 향상을 위해 이렇게 변경되었습니다.This change was made to improve the performance of HTTP triggers in version 2.x.

버전 1.x에서 웹후크 템플릿은 웹후크 페이로드용으로 추가 유효성 검사를 제공합니다.In version 1.x, webhook templates provide additional validation for webhook payloads. 버전 2.x의 경우 기본 HTTP 트리거가 계속 작동하며, 웹후크에는 이 방식을 사용하는 것이 좋습니다.In version 2.x, the base HTTP trigger still works and is the recommended approach for webhooks.

GitHub 웹후크GitHub webhooks

GitHub 웹후크에 응답하려면 먼저 HTTP 트리거를 사용하여 함수를 만들고 webHookType 속성을 github로 설정합니다.To respond to GitHub webhooks, first create your function with an HTTP Trigger, and set the webHookType property to github. 그런 다음 URL 및 API 키를 GitHub 리포지토리의 웹후크 추가 페이지에 복사합니다.Then copy its URL and API key into the Add webhook page of your GitHub repository.

Slack 웹후크Slack webhooks

Slack webhook은 함수 전용 키를 지정하는 대신 사용자를 위한 토큰을 생성하므로 Slack의 토큰을 사용하여 함수 전용 키를 구성해야 합니다.The Slack webhook generates a token for you instead of letting you specify it, so you must configure a function-specific key with the token from Slack. 권한 부여 키를 참조하세요.See Authorization keys.

웹후크 및 키Webhooks and keys

웹후크 인증은 HTTP 트리거의 일부로 웹후크 수신기 구성 요소에서 처리하며 메커니즘은 웹후크 유형에 따라 다릅니다.Webhook authorization is handled by the webhook receiver component, part of the HTTP trigger, and the mechanism varies based on the webhook type. 각 메커니즘은 키를 사용합니다.Each mechanism does rely on a key. 기본적으로 "default"라는 함수 키가 사용됩니다.By default, the function key named "default" is used. 다른 키를 사용하려면 다음 중 한 가지 방법으로 요청과 함께 키 이름을 보내도록 웹후크 공급자를 구성합니다.To use a different key, configure the webhook provider to send the key name with the request in one of the following ways:

  • 쿼리 문자열: 공급자에서 clientid 쿼리 문자열 매개 변수에 키 이름을 전달합니다(예: https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>).Query string: The provider passes the key name in the clientid query string parameter, such as https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>.
  • 요청 헤더: 공급자에서 x-functions-clientid 헤더에 키 이름을 전달합니다.Request header: The provider passes the key name in the x-functions-clientid header.

트리거 - 제한Trigger - limits

HTTP 요청 길이는 100MB(104,857,600바이트)로 제한되고 URL 길이는 4KB(4,096바이트)로 제한됩니다.The HTTP request length is limited to 100 MB (104,857,600 bytes), and the URL length is limited to 4 KB (4,096 bytes). 이러한 제한은 런타임의 Web.config 파일httpRuntime 요소에 의해 지정됩니다.These limits are specified by the httpRuntime element of the runtime's Web.config file.

HTTP 트리거를 사용하는 함수가 약 2.5분 안에 완료되지 않으면 게이트웨이가 시간 제한을 적용하고 HTTP 502 오류를 반환합니다.If a function that uses the HTTP trigger doesn't complete within about 2.5 minutes, the gateway will time out and return an HTTP 502 error. 함수는 계속 실행되지만 HTTP 응답은 반환할 수 없습니다.The function will continue running but will be unable to return an HTTP response. 장기 실행 함수의 경우 비동기 패턴을 따르고 요청 상태를 ping할 수 있는 위치를 반환하는 것이 좋습니다.For long-running functions, we recommend that you follow async patterns and return a location where you can ping the status of the request. 함수 실행 시간에 대한 정보는 크기 조정 및 호스팅 - 소비 계획을 참조하세요.For information about how long a function can run, see Scale and hosting - Consumption plan.

트리거 - host.json 속성Trigger - host.json properties

host.json 파일에는 HTTP 트리거 동작을 제어하는 설정이 포함됩니다.The host.json file contains settings that control HTTP trigger behavior.

{
    "http": {
        "routePrefix": "api",
        "maxOutstandingRequests": 200,
        "maxConcurrentRequests": 100,
        "dynamicThrottlesEnabled": true
    }
}
자산Property DefaultDefault 설명Description
routePrefixroutePrefix apiapi 모든 경로에 적용되는 경로 접두사입니다.The route prefix that applies to all routes. 기본 접두사를 제거하려면 빈 문자열을 사용하십시오.Use an empty string to remove the default prefix.
maxOutstandingRequestsmaxOutstandingRequests 200*200* 지정된 시간에 보유할 미해결 요청의 최대 수입니다.The maximum number of outstanding requests that are held at any given time. 이 제한에는 대기 중이지만 실행이 시작되지 않은 요청과 진행 중인 모든 실행이 포함됩니다.This limit includes requests that are queued but have not started executing, as well as any in progress executions. 이 한도를 초과하여 들어오는 요청이 있으면 429 "Too Busy" 응답으로 거부됩니다.Any incoming requests over this limit are rejected with a 429 "Too Busy" response. 그러면 호출자가 시간 기반 다시 시도 전략을 사용할 수 있고 최대 요청 대기 시간을 제어할 수 있습니다.That allows callers to employ time-based retry strategies, and also helps you to control maximum request latencies. 이 옵션은 스크립트 호스트 실행 경로 내에서 발생하는 큐만을 제어합니다.This only controls queuing that occurs within the script host execution path. ASP.NET 요청 큐와 같은 다른 큐는 여전히 적용되며 이 설정의 영향을 받지 않습니다.Other queues such as the ASP.NET request queue will still be in effect and unaffected by this setting. *기본 버전 1.x 제한 하지 않습니다 (-1).*The default for version 1.x is unbounded (-1). 사용량 플랜에서 버전 2.x의 기본값은 200입니다.The default for version 2.x in a consumption plan is 200. 기본 버전에 대 한 전용된 계획의 2.x는 바인딩된 (-1).The default for version 2.x in a dedicated plan is unbounded (-1).
maxConcurrentRequestsmaxConcurrentRequests 100*100* 병렬로 실행될 http 함수의 최대 수입니다.The maximum number of http functions that will be executed in parallel. 그러면 리소스 사용률을 관리하는 데 도움이 되는 동시성을 제어할 수 있습니다.This allows you to control concurrency, which can help manage resource utilization. 예를 들어 많은 시스템 리소스(메모리/cpu/소켓)를 사용하는 http 함수가 있으면 동시성이 너무 높은 문제가 발생할 수 있습니다.For example, you might have an http function that uses a lot of system resources (memory/cpu/sockets) such that it causes issues when concurrency is too high. 또는 타사 서비스에 아웃바운드 요청을 하는 함수가 있는 경우 해당 호출의 속도가 제한되어야 합니다.Or you might have a function that makes outbound requests to a third party service, and those calls need to be rate limited. 이러한 경우 여기에서 제한을 적용하는 것이 좋습니다.In these cases, applying a throttle here can help. *기본 버전 1.x 제한 하지 않습니다 (-1).*The default for version 1.x is unbounded (-1). 사용량 플랜에서 버전 2.x의 기본값은 100입니다.The default for version 2.x in a consumption plan is 100. 기본 버전에 대 한 전용된 계획의 2.x는 바인딩된 (-1).The default for version 2.x in a dedicated plan is unbounded (-1).
dynamicThrottlesEnableddynamicThrottlesEnabled true*true* 사용 설정되면, 이 설정은 요청 처리 파이프라인에서 주기적으로 시스템 성능 카운터(연결/스레드/프로세스/메모리/cpu/등)를 확인하고 해당 카운터 중 하나가 기본 제공 임계값(80%)을 초과하는 경우, 요청은 카운터가 일반 수준으로 반환될 때까지 429 "작업 초과" 응답을 표시하여 거부됩니다.When enabled, this setting causes the request processing pipeline to periodically check system performance counters like connections/threads/processes/memory/cpu/etc. and if any of those counters are over a built-in high threshold (80%), requests will be rejected with a 429 "Too Busy" response until the counter(s) return to normal levels. *기본 버전 1.x는 false입니다.*The default for version 1.x is false. 사용량 플랜에서 버전 2.x의 기본값은 true입니다.The default for version 2.x in a consumption plan is true. 전용 플랜에서 버전 2.x의 기본값은 false입니다.The default for version 2.x in a dedicated plan is false.

출력Output

HTTP 요청 발신기(sender)에 응답하려면 HTTP 출력 바인딩을 사용합니다.Use the HTTP output binding to respond to the HTTP request sender. 이 바인딩에는 HTTP 트리거가 필요하며 트리거 요청과 관련된 응답을 사용자 지정할 수 있습니다.This binding requires an HTTP trigger and allows you to customize the response associated with the trigger's request. HTTP 출력 바인딩을 제공하지 않으면 HTTP 트리거는 Functions 1.x에서 본문이 비어 있는 HTTP 200 OK 또는 Functions 2.x에서 본문이 비어 있는 HTTP 204 No Content를 반환합니다.If an HTTP output binding is not provided, an HTTP trigger returns HTTP 200 OK with an empty body in Functions 1.x, or HTTP 204 No Content with an empty body in Functions 2.x.

출력 - 구성Output - configuration

다음 표에서는 function.json 파일에 설정된 바인딩 구성 속성을 설명합니다.The following table explains the binding configuration properties that you set in the function.json file. C# 클래스 라이브러리의 경우 function.json 속성에 해당하는 attribute 속성이 없습니다.For C# class libraries, there are no attribute properties that correspond to these function.json properties.

속성Property DescriptionDescription
typetype http로 설정해야 합니다.Must be set to http.
directiondirection out로 설정해야 합니다.Must be set to out.
namename 응답에 대한 함수 코드에 사용되는 변수 이름이거나 반환 값을 사용하는 $return입니다.The variable name used in function code for the response, or $return to use the return value.

출력 - 사용Output - usage

HTTP 응답을 보내려면 언어 표준 응답 패턴을 사용합니다.To send an HTTP response, use the language-standard response patterns. C# 또는 C# 스크립트에서는 함수 반환 형식을 IActionResult 또는 Task<IActionResult>로 만듭니다.In C# or C# script, make the function return type IActionResult or Task<IActionResult>. C#에서는 반환 값 특성이 필요 없습니다.In C#, a return value attribute isn't required.

예제 응답은 트리거 예제를 참조하세요.For example responses, see the trigger example.

다음 단계Next steps

Azure Functions 트리거 및 바인딩에 대한 자세한 정보Learn more about Azure functions triggers and bindings