Azure Functions에 대한 Azure Queue Storage 출력 바인딩
Azure Functions에서 출력 바인딩을 설정하여 새 Azure Queue Storage 메시지를 만들 수 있습니다.
설정 및 구성 세부 정보에 관한 내용은 개요를 참조하세요.
예제
C# 함수는 다음 C# 모드 중 하나를 사용하여 만들 수 있습니다.
- In Process 클래스 라이브러리: Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.
- 격리된 작업자 프로세스 클래스 라이브러리: 런타임에서 격리된 작업자 프로세스에서 실행되는 컴파일된 C# 함수입니다. LTS가 아닌 버전 .NET 및 .NET Framework 실행되는 C# 함수를 지원하려면 격리된 작업자 프로세스가 필요합니다.
- C# 스크립트: 주로 Azure Portal에서 C# 함수를 만들 때 사용됩니다.
다음 예제에서는 수신된 각 HTTP 요청에 대한 큐 메시지를 만드는 C# 함수를 보여줍니다.
[StorageAccount("MyStorageConnectionAppSetting")]
public static class QueueFunctions
{
[FunctionName("QueueOutput")]
[return: Queue("myqueue-items")]
public static string QueueOutput([HttpTrigger] dynamic input, ILogger log)
{
log.LogInformation($"C# function processed: {input.Text}");
return input.Text;
}
}
다음 예제에서는 HTTP 요청에 의해 트리거되는 경우 큐 메시지를 만드는 Java 함수를 보여 줍니다.
@FunctionName("httpToQueue")
@QueueOutput(name = "item", queueName = "myqueue-items", connection = "MyStorageConnectionAppSetting")
public String pushToQueue(
@HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
final String message,
@HttpOutput(name = "response") final OutputBinding<String> result) {
result.setValue(message + " has been added.");
return message;
}
Java 함수 런타임 라이브러리에서 값이 Queue Storage에 작성되는 매개 변수에 대한 @QueueOutput
주석을 사용합니다. 매개 변수 형식은 OutputBinding<T>
이어야 합니다. 여기서 T
는 POJO의 원시 Java 형식입니다.
다음 예제는 function.json 파일의 HTTP 트리거 바인딩과 바인딩을 사용하는 JavaScript 함수를 보여 줍니다. 이 함수는 수신한 각 HTTP 요청에 대한 큐 항목을 만듭니다.
function.json 파일은 다음과 같습니다.
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"authLevel": "function",
"name": "input"
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "queue",
"direction": "out",
"name": "myQueueItem",
"queueName": "outqueue",
"connection": "MyStorageConnectionAppSetting"
}
]
}
구성 섹션에서는 이러한 속성을 설명합니다.
JavaScript 코드는 다음과 같습니다.
module.exports = async function (context, input) {
context.bindings.myQueueItem = input.body;
};
myQueueItem
출력 바인딩에 대한 메시지 배열을 정의하여 한 번에 여러 메시지를 보낼 수 있습니다. 다음 JavaScript 코드는 수신된 각 HTTP 요청에 하드코딩된 값이 포함된 두 개의 큐 메시지를 보냅니다.
module.exports = async function(context) {
context.bindings.myQueueItem = ["message 1","message 2"];
};
다음 코드 예제에서는 HTTP로 트리거되는 함수에서 큐 메시지를 출력하는 방법을 보여 줍니다. queue
의 type
구성 섹션은 출력 바인딩을 정의합니다.
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"type": "queue",
"direction": "out",
"name": "Msg",
"queueName": "outqueue",
"connection": "MyStorageConnectionAppSetting"
}
]
}
PowerShell 함수는 해당 바인딩 구성을 사용하여 Push-OutputBinding
을 통해 큐 메시지를 만들 수 있습니다. 이 예제에서는 쿼리 문자열 또는 본문 매개 변수로 메시지를 만듭니다.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$message = $Request.Query.Message
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = 200
Body = "OK"
})
여러 개의 메시지를 한 번에 전송하려면 메시지 배열을 정의한 다음 Push-OutputBinding
을 사용하여 메시지를 큐 출력 바인딩으로 보냅니다.
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$message = @("message1", "message2")
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = 200
Body = "OK"
})
다음 예제에서는 단일 값 및 여러 값을 스토리지 큐에 출력하는 방법을 보여 줍니다. function.json에 필요한 구성은 어느 쪽이든 동일합니다.
스토리지 큐 바인딩은 ‘유형’이 queue
로 설정된 function.json 에서 정의됩니다.
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureStorageQueuesConnectionString"
}
]
}
큐에 개별 메시지를 설정하려면 set
메서드에 단일 값을 전달합니다.
import azure.functions as func
def main(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:
input_msg = req.params.get('message')
msg.set(input_msg)
return 'OK'
큐에 여러 메시지를 만들려면 매개 변수를 적절한 목록 형식으로 선언하고 해당 목록 형식과 일치하는 값 배열을 set
메서드에 전달합니다.
import azure.functions as func
import typing
def main(req: func.HttpRequest, msg: func.Out[typing.List[str]]) -> func.HttpResponse:
msg.set(['one', 'two'])
return 'OK'
특성
C# 라이브러리에서 출력 바인딩을 정의하는 특성은 C# 클래스 라이브러리가 실행되는 모드에 따라 다릅니다. C# 스크립트는 대신 function.json 구성 파일을 사용합니다.
C# 클래스 라이브러리에서 QueueAttribute를 사용합니다.
특성은 함수의 out
매개 변수 또는 반환 값에 적용됩니다. 특성의 생성자는 다음 예제와 같이 큐의 이름을 사용합니다.
[FunctionName("QueueOutput")]
[return: Queue("myqueue-items")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
...
}
다음 예와 같이 사용할 스토리지 계정을 지정하도록 Connection
속성을 설정할 수 있습니다.
[FunctionName("QueueOutput")]
[return: Queue("myqueue-items", Connection = "StorageConnectionAppSetting")]
public static string Run([HttpTrigger] dynamic input, ILogger log)
{
...
}
StorageAccount
특성을 사용하여 클래스, 메서드 또는 매개 변수 수준에서 스토리지 계정을 지정합니다. 자세한 내용은 트리거 - 특성을 참조하세요.
주석
QueueOutput 주석을 사용하면 함수의 출력으로 메시지를 작성할 수 있습니다. 다음 예제에서는 큐 메시지를 만드는 HTTP로 트리거되는 함수를 보여 줍니다.
package com.function;
import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
public class HttpTriggerQueueOutput {
@FunctionName("HttpTriggerQueueOutput")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "message", queueName = "messages", connection = "MyStorageConnectionAppSetting") OutputBinding<String> message,
final ExecutionContext context) {
message.setValue(request.getQueryParameters().get("name"));
return request.createResponseBuilder(HttpStatus.OK).body("Done").build();
}
}
속성 | Description |
---|---|
name |
함수 시그니처의 매개 변수 이름을 선언합니다. 함수가 트리거되면 해당 매개 변수의 값이 큐 메시지의 내용을 포함합니다. |
queueName |
스토리지 계정에서 큐 이름을 선언합니다. |
connection |
스토리지 계정 연결 문자열을 가리킵니다. |
QueueOutput 주석과 연결된 매개 변수는 OutputBinding<T> 인스턴스로 형식이 지정됩니다.
구성
다음 표에서는 function.json 파일에 설정된 바인딩 구성 속성을 설명합니다.
function.json 속성 | Description |
---|---|
type | queue 로 설정해야 합니다. 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다. |
direction | out 로 설정해야 합니다. 이 속성은 사용자가 Azure Portal에서 트리거를 만들 때 자동으로 설정됩니다. |
name | 함수 코드에서 큐를 나타내는 변수의 이름입니다. $return 으로 설정하여 함수 반환 값을 참조합니다. |
queueName | 큐의 이름입니다. |
connection | Azure 큐에 연결하는 방법을 지정하는 앱 설정 또는 설정 컬렉션의 이름입니다. 연결을 참조하세요. |
로컬에서 개발하는 경우 Values
컬렉션의 local.settings.json 파일에 애플리케이션 설정을 추가합니다.
전체 예제는 예제 섹션을 참조하세요.
사용량
큐 출력 바인딩의 사용은 확장 패키지 버전과 함수 앱에서 사용되는 C# 형식에 따라 다르며 다음 중 하나일 수 있습니다.
In Process 클래스 라이브러리는 Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.
버전을 선택하여 모드 및 버전에 대한 사용 세부 정보를 확인합니다.
out T paramName
과 같은 메서드 매개 변수를 사용하여 단일 큐 메시지를 씁니다. out
매개 변수 대신 메서드 반환 형식을 사용할 수 있습니다. T
는 다음 형식 중 하나일 수 있습니다.
- JSON으로 직렬화 가능한 개체
string
byte[]
- QueueMessage
이러한 형식을 사용하는 예제는 확장에 대한 GitHub 리포지토리를 참조하세요.
다음 형식 중 하나를 사용하여 큐에 여러 메시지를 쓸 수 있습니다.
ICollector<T>
또는IAsyncCollector<T>
- QueueClient
QueueMessage 및 QueueClient를 사용하는 예제는 확장용 GitHub 리포지토리를 참조하세요.
특성은 Connection
특성을 사용하지만 StorageAccountAttribute를 사용하여 스토리지 계정 연결을 지정할 수도 있습니다. 라이브러리의 다른 함수와 다른 스토리지 계정을 사용해야 하는 경우 이 작업을 수행할 수 있습니다. 생성자는 스토리지 연결 문자열을 포함하는 앱 설정의 이름을 사용합니다. 매개 변수, 메서드 또는 클래스 수준에서 특성을 적용할 수 있습니다. 다음 예제에서는 클래스 수준 및 메서드 수준을 보여줍니다.
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("StorageTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
...
}
사용할 스토리지 계정은 다음과 같은 순서로 결정됩니다.
- 트리거 또는 바인딩 특성의
Connection
특성입니다. StorageAccount
특성이 트리거 또는 바인딩 특성과 동일한 매개 변수에 적용되었습니다.- 함수에 적용된
StorageAccount
특성 - 클래스에 적용된
StorageAccount
특성 AzureWebJobsStorage
애플리케이션 설정에 정의된 함수 앱의 기본 스토리지 계정입니다.
QueueOutput 주석을 사용하여 함수에서 큐에 쓰기 위한 두 가지 옵션이 있습니다.
반환 값: 함수 자체에 주석을 적용하면 함수의 반환 값이 큐에 기록됩니다.
명령형: 메시지 값을 명시적으로 설정하려면
OutputBinding<T>
형식의 특정 매개 변수에 주석을 적용합니다. 여기서T
는 POJO 또는 네이티브 Java 형식입니다. 이 구성을 사용하면 값을setValue
메서드에 전달하면 큐에 값이 기록됩니다.
출력 큐 항목은 context.bindings.<NAME>
를 통해 사용할 수 있습니다. 여기에서 <NAME>
는 function.json에 정의된 이름과 일치합니다. 큐 항목 페이로드에 문자열 또는 JSON 직렬화 가능 개체를 사용할 수 있습니다.
큐 메시지에 대한 출력은 function.json 파일에서 바인딩의 name
매개 변수에 지정된 이름과 일치하는 인수를 전달하는 Push-OutputBinding
을 통해 사용할 수 있습니다.
함수에서 구성된 큐로 쓰기 위한 두 가지 옵션이 있습니다.
Connections
connection
속성은 앱이 Azure 큐에 연결해야 하는 방법을 지정하는 환경 구성에 대한 참조입니다. 다음을 지정할 수 있습니다.
구성된 값이 단일 설정에 대해 정확히 일치하고 다른 설정에 대해 접두사가 일치하는 경우 정확한 일치가 사용됩니다.
연결 문자열
연결 문자열을 가져오려면 스토리지 계정 액세스 키 관리에 표시된 단계를 따릅니다.
이 연결 문자열은 바인딩 구성의 connection
속성에 지정된 값과 일치하는 이름으로 애플리케이션 설정에 저장해야 합니다.
앱 설정 이름이 "AzureWebJobs"로 시작하는 경우 여기에서 이름의 나머지만을 지정할 수 있습니다. 예를 들어 connection
을 "MyStorage"로 설정하면 Functions 런타임은 "AzureWebJobsMyStorage"라는 앱 설정을 찾습니다. connection
을 비워두면 Functions 런타임은 AzureWebJobsStorage
라는 앱 설정의 기본 Storage 연결 문자열을 사용합니다.
ID 기반 연결
버전 5.x 이상의 확장을 사용하는 경우 비밀이 있는 연결 문자열을 사용하는 대신 앱에서 Azure Active Directory ID를 사용하도록 할 수 있습니다. 이렇게 하려면 트리거 및 바인딩 구성의 connection
속성에 매핑되는 공통 접두사 아래에 설정을 정의합니다.
connection
을 "AzureWebJobsStorage"로 설정하는 경우 ID로 호스트 스토리지에 연결을 참조하세요. 다른 모든 연결의 경우 확장에는 다음 속성이 필요합니다.
속성 | 환경 변수 템플릿 | 설명 | 예제 값 |
---|---|---|---|
큐 서비스 URI | <CONNECTION_NAME_PREFIX>__queueServiceUri 1 |
HTTPS 체계를 사용하여 연결 중인 큐 서비스의 데이터 평면 URI입니다. | https://<storage_account_name>.queue.core.windows.net |
1<CONNECTION_NAME_PREFIX>__serviceUri
는 별칭으로 사용할 수 있습니다. 두 형식이 모두 제공되면 queueServiceUri
형식이 사용됩니다. 전체 연결 구성이 Blob, 큐 및/또는 테이블에서 사용되는 경우 serviceUri
형식을 사용할 수 없습니다.
연결을 사용자 지정하기 위해 추가 속성을 설정할 수 있습니다. ID 기반 연결의 공통 속성을 참조하세요.
Azure Functions 서비스에서 호스트되는 경우 ID 기반 연결에 관리 ID가 사용됩니다. 사용자가 할당한 ID는 credential
및 clientID
속성을 사용하여 지정할 수 있지만 기본적으로 시스템 할당 ID가 사용됩니다. 리소스 ID를 사용하여 사용자가 할당한 ID를 구성하는 것은 지원되지 않습니다. 로컬 개발과 같은 다른 컨텍스트에서 실행할 때 사용자 지정할 수 있지만 대신 개발자 ID가 사용됩니다. ID 기반 연결을 사용하여 로컬 개발을 참조하세요.
ID에 권한 부여
사용되는 모든 ID에는 의도한 작업을 수행할 수 있는 권한이 있어야 합니다. 대부분의 Azure 서비스의 경우 이러한 권한을 제공하는 기본 제공 또는 사용자 지정 역할을 사용하여 Azure RBAC에서 역할을 할당해야 합니다.
중요
일부 사용 권한은 모든 컨텍스트에 필요하지 않은 대상 서비스에 의해 노출될 수 있습니다. 가능한 경우 최소 권한 원칙을 준수하여 ID에 필요한 권한만 부여하세요. 예를 들어 앱이 데이터 원본에서 읽을 수만 있으면 되는 경우 읽기 권한만 있는 역할을 사용합니다. 읽기 작업에 대한 과도한 권한이 될 수 있으므로 해당 서비스에 쓰기도 허용하는 역할을 할당하는 것은 부적절합니다. 마찬가지로 역할 할당이 읽어야 하는 리소스에 대해서만 범위가 할당되도록 할 수 있습니다.
런타임에 큐에 대한 액세스를 제공하는 역할 할당을 만들어야 합니다. 소유자와 같은 관리 역할로는 충분하지 않습니다. 다음 표는 정상 작동에서 Queue Storage 확장을 사용할 때 권장되는 기본 제공 역할을 보여 줍니다. 작성하는 코드에 따라 애플리케이션에 추가 권한이 필요할 수 있습니다.
바인딩 유형 | 기본 제공 역할 예 |
---|---|
트리거 | Storage 큐 데이터 읽기 권한자, Storage 큐 데이터 메시지 프로세서 |
출력 바인딩 | Storage 큐 데이터 기여자, Storage 큐 데이터 메시지 보낸 사람 |
예외 및 반환 코드
바인딩 | 참고 |
---|---|
큐 | 큐 오류 코드 |
Blob, 테이블, 큐 | 스토리지 오류 코드 |
Blob, 테이블, 큐 | 문제 해결 |