다음을 통해 공유


Azure Functions 바인딩 식 패턴

트리거 및 바인딩의 가장 강력한 기능 중 하나는 바인딩 식입니다. function.json 파일 및 함수 매개 변수 및 코드에서 다양한 소스의 값으로 확인되는 식을 사용할 수 있습니다.

대부분의 식은 중괄호 안에 넣어 식별됩니다. 예를 들어 큐 트리거 함수에서 {queueTrigger}는 큐 메시지 텍스트를 확인합니다. Blob 출력 바인딩에 path 대한 속성이 container/{queueTrigger} 있고 함수가 큐 메시지에 HelloWorld의해 트리거되는 경우 명명 HelloWorld 된 Blob이 만들어집니다.

바인딩 식의 형식

바인딩 식 - 앱 설정

비밀과 연결 문자열은 구성 파일이 아닌 앱 설정을 사용하여 관리하는 것이 가장 좋습니다. 이렇게 하면 이러한 비밀에 대한 액세스가 제한되고 function.json 같은 파일을 공용 소스 제어 리포지토리에 안전하게 저장할 수 있습니다.

환경을 기준으로 구성을 변경하려는 경우에도 앱 설정이 유용합니다. 예를 들어 테스트 환경에서 다른 큐 또는 Blob Storage 컨테이너를 모니터링할 수 있습니다.

앱 설정 바인딩 식은 다른 바인딩 식과는 다르게 식별됩니다. 중괄호 대신 백분율 기호로 래핑됩니다. 예를 들어 Blob 출력 바인딩 경로가 %Environment%/newblob.txt 있고 Environment 앱 설정 값이면 Development컨테이너에 Blob이 Development 만들어집니다.

함수가 로컬로 실행되는 경우 앱 설정 값은 local.settings.json 파일에서 가져옵니다.

참고 항목

트리거 및 바인딩의 속성은 connection 특별한 경우이며 백분율 기호 없이 자동으로 값을 앱 설정으로 확인합니다.

다음 예제는 앱 설정을 %input_queue_name% 사용하여 트리거할 큐를 정의하는 Azure Queue Storage 트리거입니다.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "%input_queue_name%",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

클래스 라이브러리에서 동일한 방법을 사용할 수 있습니다.

[FunctionName("QueueTrigger")]
public static void Run(
    [QueueTrigger("%input_queue_name%")]string myQueueItem, 
    ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
}

트리거 파일 이름

Blob 트리거에 대한 path는 다른 바인딩 및 함수 코드에서 blob 트리거의 이름을 참조할 수 있도록 하는 패턴일 수 있습니다. 또한 패턴은 함수 호출을 트리거할 수 있는 blob을 지정하는 필터링 조건을 포함할 수 있습니다.

예를 들어 다음 Blob 트리거 바인딩 path 에서 패턴은 sample-images/{filename}다음과 같은 filename바인딩 식을 만듭니다.

{
  "bindings": [
    {
      "name": "image",
      "type": "blobTrigger",
      "path": "sample-images/{filename}",
      "direction": "in",
      "connection": "MyStorageConnection"
    },
    ...

그런 다음 출력 바인딩에서 식을 filename 사용하여 생성되는 Blob의 이름을 지정할 수 있습니다.

    ...
    {
      "name": "imageSmall",
      "type": "blob",
      "path": "sample-images-sm/{filename}",
      "direction": "out",
      "connection": "MyStorageConnection"
    }
  ],
}

함수 코드는 매개 변수 이름으로 filename을 사용하여 이 동일한 값에 액세스할 수 있습니다.

// C# example of binding to {filename}
public static void Run(Stream image, string filename, Stream imageSmall, ILogger log)  
{
    log.LogInformation($"Blob trigger processing: {filename}");
    // ...
} 

바인딩 식 및 패턴을 사용하는 동일한 기능이 클래스 라이브러리의 특성에 적용됩니다. 다음 예제에서 특성 생성자 매개 변수는 앞의 function.json 예제와 동일한 path 값입니다.

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{filename}")] Stream image,
    [Blob("sample-images-sm/{filename}", FileAccess.Write)] Stream imageSmall,
    string filename,
    ILogger log)
{
    log.LogInformation($"Blob trigger processing: {filename}");
    // ...
}

파일 이름의 일부에 대한 식을 만들 수도 있습니다. 다음 예제에서는 패턴과 일치하는 파일 이름에 대해서만 함수가 트리거됩니다. anyname-anyfile.csv

{
    "name": "myBlob",
    "type": "blobTrigger",
    "direction": "in",
    "path": "testContainerName/{date}-{filetype}.csv",
    "connection": "OrderStorageConnection"
}

Blob 경로 문자열에서 식 및 패턴을 사용하는 방법에 대한 자세한 내용은 Storage Blob 바인딩 참조참조하세요.

트리거 메타데이터

트리거에서 제공하는 데이터 페이로드(예: 함수를 트리거한 큐 메시지의 콘텐츠) 외에도 많은 트리거는 추가 메타데이터 값을 제공합니다. 이러한 값은 C# 및 F#의 입력 매개 변수 또는 JavaScript 개체의 context.bindings 속성으로 사용할 수 있습니다.

예를 들어 Azure Queue Storage 트리거는 다음 속성을 지원합니다.

  • QueueTrigger - 유효한 문자열인 경우 트리거 메시지 내용
  • DequeueCount
  • ExpirationTime
  • ID
  • InsertionTime
  • NextVisibleTime
  • PopReceipt

이러한 메타데이터 값은 function.json 파일 속성에서 액세스할 수 있습니다. 예를 들어 큐 트리거를 사용하고 큐 메시지에 읽으려는 Blob의 이름이 포함되어 있다고 가정합니다. function.json 파일에서 다음 예제와 같이 Blob path 속성에서 queueTrigger 메타데이터 속성을 사용할 수 있습니다.

{
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "queueTrigger",
      "queueName": "myqueue-items",
      "connection": "MyStorageConnection",
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "direction": "in",
      "connection": "MyStorageConnection"
    }
  ]
}

각 트리거에 대한 메타데이터 속성에 대한 세부 정보는 해당 참조 문서에 설명되어 있습니다. 예를 들어 큐 트리거 메타데이터를 참조하세요. 설명서는 바인딩 구성 영역 아래의 설명서 섹션에 있는 포털의 통합 탭에서도 사용할 수 있습니다.

JSON 페이로드

일부 시나리오에서는 동일한 함수 및 함수 코드의 다른 바인딩에 대한 구성에서 트리거 페이로드의 속성을 참조할 수 있습니다. 이렇게 하려면 트리거 페이로드가 JSON이고 각 트리거에 특정한 임계값보다 작아야 합니다. 일반적으로 페이로드 크기는 100MB 미만이어야 하지만 각 트리거에 대한 참조 콘텐츠를 확인해야 합니다. 트리거 페이로드 속성을 사용하면 애플리케이션의 성능에 영향을 줄 수 있으며 트리거 매개 변수 형식은 문자열과 같은 단순 형식 또는 JSON 데이터를 나타내는 사용자 지정 개체 형식으로 강제 적용됩니다. 스트림, 클라이언트 또는 기타 SDK 형식에는 사용할 수 없습니다.

다음 예제에서는 JSON{"BlobName":"HelloWorld.txt"}에서 Blob 이름을 수신하는 웹후크 함수에 대한 function.json 파일을 보여 줍니다. Blob 입력 바인딩은 Blob을 읽고 HTTP 출력 바인딩은 HTTP 응답에서 Blob 콘텐츠를 반환합니다. Blob 입력 바인딩은 속성("path": "strings/{BlobName}")을 직접 참조하여 BlobName Blob 이름을 가져옵니다.

{
  "bindings": [
    {
      "name": "info",
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson"
    },
    {
      "name": "blobContents",
      "type": "blob",
      "direction": "in",
      "path": "strings/{BlobName}",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ]
}

C# 및 F#에서 작동하려면 다음 예제와 같이 역직렬화할 필드를 정의하는 클래스가 필요합니다.

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

public class BlobInfo
{
    public string BlobName { get; set; }
}
  
public static HttpResponseMessage Run(HttpRequestMessage req, BlobInfo info, string blobContents, ILogger log)
{
    if (blobContents == null) {
        return req.CreateResponse(HttpStatusCode.NotFound);
    } 

    log.LogInformation($"Processing: {info.BlobName}");

    return req.CreateResponse(HttpStatusCode.OK, new {
        data = $"{blobContents}"
    });
}

JavaScript에서 JSON deserialization은 자동으로 실행됩니다.

module.exports = async function (context, info) {
    if ('BlobName' in info) {
        context.res = {
            body: { 'data': context.bindings.blobContents }
        }
    }
    else {
        context.res = {
            status: 404
        };
    }
}

점 표기법

JSON 페이로드의 속성 중 일부가 속성을 가진 개체인 경우 점(.) 표기법을 사용하여 직접 참조할 수 있습니다. 이 표기법은 Azure Cosmos DB 또는 Table Storage 바인딩에는 작동하지 않습니다.

예를 들어 JSON이 다음과 같다고 가정합니다.

{
  "BlobName": {
    "FileName":"HelloWorld",
    "Extension":"txt"
  }
}

를 직접 참조할 FileName BlobName.FileName수 있습니다. 이 JSON 형식을 사용하면 이전 예제의 속성이 다음과 path 같이 표시됩니다.

"path": "strings/{BlobName.FileName}.{BlobName.Extension}",

C#에서는 다음 두 개의 클래스가 필요합니다.

public class BlobInfo
{
    public BlobName BlobName { get; set; }
}
public class BlobName
{
    public string FileName { get; set; }
    public string Extension { get; set; }
}

GUID 만들기

바인딩 식은 {rand-guid} GUID를 만듭니다. 파일의 function.json 다음 Blob 경로는 50710cb5-84b9-4d87-9d83-a03d6976a682.txt 같은 이름의 Blob을 만듭니다.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{rand-guid}.txt"
}

현재 시간

바인딩 식 DateTime 이 .로 DateTime.UtcNow확인됩니다. function.json 파일의 다음 blob 경로는 2018-02-16T17-59-55Z.txt와 같은 이름의 blob을 만듭니다.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{DateTime}.txt"
}

런타임에 바인딩

C# 및 기타 .NET 언어에서는 function.json 및 특성의 선언적 바인딩과는 달리 명령적 바인딩 패턴을 사용할 수 있습니다. 명령적 바인딩은 바인딩 매개 변수를 디자인 타임이 아닌 런타임에 계산해야 할 경우 유용합니다. 자세한 내용은 C# 개발자 참조 또는 C# 스크립트 개발자 참조를 참조하세요.