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# 스크립트 개발자 참조를 참조하세요.