적용 대상: Azure Logic Apps(사용량 + 표준)
Azure Logic Apps는 논리 앱 워크플로에서 작업이 처리할 수 있는 메시지 콘텐츠에 서로 다른 크기 제한을 줍니다. 이러한 제한은 논리 앱 리소스 종류와 워크플로가 실행되는 환경에 따라 달라집니다. 또한 제한은 큰 메시지를 저장하고 처리하여 발생하는 오버헤드를 줄이는 데 도움이 됩니다. 메시지 크기 제한에 대한 자세한 내용은 Azure Logic Apps의 메시지 제한을 참조하세요.
기본 제공 HTTP 작업 또는 특정 관리 커넥터 작업을 사용하여 기본 제한보다 큰 메시지로 작업하는 경우 청크를 사용하도록 설정할 수 있습니다. 이 방법은 큰 메시지를 더 작은 메시지로 분할하므로 특정 조건에서도 큰 파일을 전송할 수 있습니다.
이러한 기본 제공 HTTP 작업 및 특정 관리형 커넥터 작업의 경우 청크 분할은 Azure Logic Apps에서 큰 메시지를 사용할 수 있는 유일한 방법입니다. Azure Logic Apps와 다른 서비스 간의 기본 HTTP 메시지 교환은 청크를 사용해야 하거나 관리되는 커넥터에서 만든 연결이 청크를 지원해야 합니다.
비고
여러 메시지 교환으로 인한 오버헤드 증가로 인해 Azure Logic Apps는 트리거에서 청크를 지원하지 않습니다. 또한 Azure Logic Apps는 이 문서에 설명된 대로 자체 프로토콜을 사용하여 HTTP 작업에 대한 청크를 구현합니다. 웹 사이트 또는 웹 서비스가 청크를 지원하더라도 HTTP 작업 청크로 작동하지 않습니다.
웹 사이트 또는 웹 서비스에서 HTTP 작업 청크를 사용하려면 Azure Logic Apps에서 사용하는 것과 동일한 프로토콜을 구현합니다. 그렇지 않으면 HTTP 작업에서 청크를 사용하도록 설정하지 마세요.
이 문서에서는 큰 메시지의 의미, 청크 분할의 작동 방식 및 Azure Logic Apps에서 지원되는 작업에 청크를 설정하는 방법에 대한 개요를 제공합니다.
메시지가 "큰" 이유는 무엇인가요?
메시지는 해당 메시지를 처리하는 서비스를 기반으로 하여 큽니다. 큰 메시지의 정확한 크기 제한은 Azure Logic Apps 및 커넥터 작업 간에 다릅니다. Azure Logic Apps와 커넥터 모두 청크 분할 없이는 큰 메시지를 직접 처리할 수 없습니다.
Azure Logic Apps 메시지 크기 제한은 Azure Logic Apps 제한 및 구성을 참조하세요. 각 커넥터의 메시지 크기 제한에 대해서는 커넥터 참조를 참조하세요.
Azure Logic Apps에 대한 청크 분할 메시지 처리
Azure Logic Apps는 메시지 크기 제한보다 큰 청크로 된 메시지의 출력을 직접 사용할 수 없습니다. 청크를 지원하는 작업만 이러한 출력의 메시지 콘텐츠에 액세스할 수 있습니다. 큰 메시지를 처리하는 작업은 다음 조건 중 하나를 충족해야 합니다.
- 해당 작업이 커넥터에 속하는 경우 기본적으로 청크를 지원해야 합니다.
- 작업에는 해당 작업의 런타임 구성에서 청크 분할 지원이 활성화되어 있어야 합니다.
그렇지 않으면 큰 콘텐츠 출력에 액세스하려고 할 때 런타임 오류가 발생합니다.
커넥터에 대한 청크 분할 메시지 처리
Azure Logic Apps와 통신하는 서비스에는 고유한 메시지 크기 제한이 있을 수 있습니다. 이러한 제한은 종종 Azure Logic Apps 제한보다 작습니다. 예를 들어 커넥터가 청크를 지원하는 경우 커넥터는 30MB 메시지를 큰 것으로 간주할 수 있지만 Azure Logic Apps는 그렇지 않습니다. 이 커넥터의 제한을 준수하기 위해 Azure Logic Apps는 30MB보다 큰 모든 메시지를 더 작은 청크로 분할합니다.
청크를 지원하는 커넥터의 경우 기본 청크 프로토콜은 최종 사용자에게 보이지 않습니다. 모든 커넥터가 청크를 지원하는 것은 아닙니다. 지원하지 않는 커넥터는 들어오는 메시지가 커넥터 크기 제한을 초과할 때 런타임 오류를 생성합니다.
청크 분할을 지원하고 사용하도록 설정된 작업의 경우 트리거 본문, 변수 및 식(예: triggerBody()?['Content']
)을 사용할 수 없습니다. 이러한 입력을 사용하면 청크 분할 작업이 수행되지 않습니다. 대신 작성 작업을 사용합니다. 특히 Compose 작업을 사용하여 트리거 본문, 변수, 식 등의 데이터 출력을 저장할 필드를 body
만듭니다. 예를 들면 다음과 같습니다.
"Compose": {
"inputs": {
"body": "@variables('myVar1')"
},
"runAfter": {
"Until": [
"Succeeded"
]
},
"type": "Compose"
},
데이터를 참조하려면 청크 분할 작업에서 식을 body('Compose')
사용합니다. 예를 들면 다음과 같습니다.
"Create_file": {
"inputs": {
"body": "@body('Compose')",
"headers": {
"ReadFileMetadataFromServer": true
},
"host": {
"connection": {
"name": "@parameters('$connections')['sftpwithssh_1']['connectionId']"
}
},
"method": "post",
"path": "/datasets/default/files",
"queries": {
"folderPath": "/c:/test1/test1sub",
"name": "tt.txt",
"queryParametersSingleEncoded": true
}
},
"runAfter": {
"Compose": [
"Succeeded"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "ApiConnection"
},
HTTP를 통해 청크 설정
일반적인 HTTP 시나리오에서는 워크플로가 큰 메시지를 외부 엔드포인트와 교환할 수 있도록 HTTP를 통해 큰 콘텐츠 다운로드 및 업로드를 분할할 수 있습니다. Azure Logic Apps에서 예상하는 방식으로 메시지를 청크해야 합니다.
외부 엔드포인트가 다운로드 또는 업로드 청크로 설정된 경우 워크플로의 HTTP 작업은 자동으로 큰 메시지를 청크합니다. 그렇지 않으면 엔드포인트에서 청크 분할 지원을 설정해야 합니다. 엔드포인트를 소유하거나 제어하지 않으면 청크를 설정하지 못할 수 있습니다.
HTTP 동작에 청크가 아직 활성화되지 않은 경우 작업의 runTimeConfiguration
속성을 통해 청크를 설정해야 합니다. 나중에 설명한 대로 코드 뷰 편집기를 사용하거나 여기에 설명된 대로 워크플로 디자이너에서 작업 정의에서 이 속성을 설정할 수 있습니다.
디자이너에서 HTTP 작업을 선택하여 작업 정보 창을 연 다음 설정을 선택합니다.
콘텐츠 전송에서 청크 허용을켜기로 설정합니다.
다운로드 또는 업로드에 대한 청크 설정을 완료하려면 다음 섹션을 계속 진행합니다.
청크로 콘텐츠 다운로드
HTTP GET 요청을 사용하여 외부 엔드포인트에서 콘텐츠를 다운로드하는 경우 많은 외부 엔드포인트가 대용량 메시지를 청크로 자동으로 보냅니다. 이 동작을 수행하려면 엔드포인트가 부분 콘텐츠 요청 또는 청크 분할 다운로드를 지원해야 합니다. 따라서 워크플로의 작업이 외부 엔드포인트에서 콘텐츠를 다운로드하기 위해 HTTP GET 요청을 보내고 엔드포인트가 206 부분 콘텐츠 상태 코드로 응답하는 경우 응답에 청크 분할된 콘텐츠가 포함됩니다.
Azure Logic Apps는 외부 엔드포인트가 부분 콘텐츠 요청을 지원하는지 여부를 제어할 수 없습니다. 워크플로의 요청 작업이 206 부분 콘텐츠 상태 코드로 첫 번째 응답을 받으면 해당 작업은 모든 콘텐츠를 다운로드하기 위해 여러 요청을 자동으로 보냅니다.
외부 엔드포인트가 부분 콘텐츠를 지원하는지 확인하려면 응답 본문을 생략하고 상태 줄 및 헤더 섹션만 있는 응답을 요청하는 HTTP HEAD 요청을 보냅니다. 이 요청은 응답에 헤더가 포함되어 Accept-Ranges
있는지 여부를 확인하는 데 도움이 됩니다.
엔드포인트가 부분 콘텐츠를 청크 분할 다운로드로 지원하지만 청크 분할된 콘텐츠를 보내지 않는 경우 HTTP GET 요청에서 헤더를 설정하여 이 옵션을 Range
할 수 있습니다.
다음 단계에서는 Azure Logic Apps가 외부 엔드포인트에서 워크플로로 청크 분할된 콘텐츠를 다운로드하는 데 사용하는 프로세스를 설명합니다.
워크플로에서 작업은 HTTP GET 요청을 엔드포인트로 보냅니다.
요청 헤더는 필요에 따라 콘텐츠 청크를 요청하기 위한 바이트 범위를 설명하는 필드를 포함
Range
할 수 있습니다.엔드포인트는 상태 코드 및 HTTP 메시지 본문으로
206
응답합니다.이 청크의 콘텐츠에 대한 세부 정보는 응답의
Content-Range
헤더에 표시됩니다. 이러한 세부 정보에는 Azure Logic Apps가 청크의 시작과 끝을 결정하는 데 도움이 되는 정보와 청크 분할 전 전체 콘텐츠의 총 크기가 포함됩니다.작업은 모든 콘텐츠가 검색될 때까지 후속 HTTP GET 요청을 자동으로 보냅니다.
예를 들어 다음 작업 정의는 헤더를 설정하는 HTTP GET 요청을 보여 줍니다 Range
. 헤더는 엔드포인트가 청크 분할된 콘텐츠로 응답하도록 표시합니다.
"getAction": {
"inputs": {
"headers": {
"Range": "bytes=0-1023"
},
"method": "GET",
"uri": "http://myAPIendpoint/api/downloadContent"
},
"runAfter": {},
"type": "Http"
}
GET 요청은 헤더를 Range
설정하여 bytes=0-1023
바이트 범위를 지정합니다. 엔드포인트가 부분 콘텐츠에 대한 요청을 지원하는 경우 엔드포인트는 요청된 범위의 콘텐츠 청크로 응답합니다. 엔드포인트에 따라 헤더 필드의 정확한 형식이 Range
다를 수 있습니다.
청크로 콘텐츠 업로드
HTTP 작업에서 청크로 콘텐츠를 업로드하려면 작업의 runtimeConfiguration
속성을 설정하여 청크 분할 지원을 설정해야 합니다. 이 설정을 사용하면 작업이 청크 분할 프로토콜을 시작할 수 있습니다.
그러면 작업은 초기 POST 또는 PUT 메시지를 외부 엔드포인트로 보낼 수 있습니다. 엔드포인트가 제안된 청크 크기로 응답하면 콘텐츠 청크가 포함된 HTTP PATCH 요청을 전송하여 작업이 수행됩니다.
다음 단계에서는 Azure Logic Apps가 워크플로의 작업에서 외부 엔드포인트로 청크 분할된 콘텐츠를 업로드하는 데 사용하는 자세한 프로세스를 설명합니다.
워크플로에서 작업은 빈 메시지 본문을 사용하여 초기 HTTP POST 또는 PUT 요청을 보냅니다.
요청 헤더에는 논리 앱이 청크로 업로드하려는 콘텐츠에 대한 다음 정보가 포함됩니다.
요청 헤더 필드 가치 유형 설명 x-ms-transfer-mode chunked String 콘텐츠가 청크로 업로드됨을 나타냅니다. x-ms-content-length < content-length> 정수 청크 분할 전의 전체 콘텐츠 크기(바이트) 엔드포인트는 성공 상태 코드 및 다음 정보로
200
응답합니다.엔드포인트 응답 헤더 필드 유형 필수 설명 위치 String 예 HTTP PATCH 메시지를 보낼 URL 위치 x-ms-chunk-size 정수 아니오 제안된 청크 크기(바이트) 워크플로 작업은 각각 다음 정보를 포함하는 후속 HTTP PATCH 메시지를 만들고 보냅니다.
x-ms-chunk-size 또는 총 x-ms-content-length 크기의 모든 콘텐츠가 순차적으로 업로드될 때까지 일부 내부적으로 계산된 크기 기준의 콘텐츠 청크
각 PATCH 메시지에서 보낸 콘텐츠 청크에 대한 헤더 정보는 다음과 같습니다.
요청 헤더 필드 가치 유형 설명 콘텐츠 범위 < 범위> String 시작 값, 끝 값 및 총 콘텐츠 크기를 포함하여 현재 콘텐츠 청크의 바이트 범위입니다. 예를 들면 다음과 같습니다. bytes=0-1023/10100
콘텐츠-타입 < content-type> String 청크 방식으로 처리된 콘텐츠 유형 Content-Length < content-length> String 현재 청크의 크기 길이(바이트)입니다.
각 PATCH 요청 후 엔드포인트는 상태 코드 및 다음 응답 헤더로
200
응답하여 각 청크에 대한 수신을 확인합니다.엔드포인트 응답 헤더 필드 유형 필수 설명 범위 String 예 엔드포인트에서 받은 콘텐츠의 바이트 범위입니다. 예를 들면 다음과 같습니다. bytes=0-1023
x-ms-chunk-size 정수 아니오 제안된 청크 크기(바이트)
예를 들어 다음 작업 정의는 청크 분할된 콘텐츠를 엔드포인트에 업로드하기 위한 HTTP POST 요청을 보여 줍니다. 작업의 runTimeConfiguration
속성에서 contentTransfer
속성은 transferMode
를 chunked
로 설정합니다.
"postAction": {
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "chunked"
}
},
"inputs": {
"method": "POST",
"uri": "http://myAPIendpoint/api/action",
"body": "@body('getAction')"
},
"runAfter": {
"getAction": ["Succeeded"]
},
"type": "Http"
}