기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
HTTP 작업 메시지 배치 처리
일괄 처리를 사용하여 단일 요청으로 여러 HTTP 작업 메시지를 보낼 수 있습니다.
개요
일괄 처리를 사용하면 AWS IoT Core 규칙 엔진에서 HTTP 엔드포인트로 메시지를 일괄 전송할 수 있습니다. 이 기능을 사용하면 HTTP 작업 실행 수를 줄이고 새 연결 설정과 관련된 오버헤드를 줄여 효율성을 개선할 수 있습니다.
참고
일괄 HTTP 작업은 단일 작업으로 측정됩니다. AWS IoT Core 규칙 엔진에서 다운스트림 서비스로 내보내는 아웃바운드 배치 페이로드의 크기를 기준으로 5kiB 단위로 측정됩니다. 자세한 내용은 AWS IoT Core 요금
IoT 규칙 작업의 정의에서 일괄 처리를 활성화하면 구성에 다음 파라미터를 사용할 수 있습니다.
maxBatchOpenMs-
발신 메시지가 다른 메시지가 배치를 생성할 때까지 대기하는 최대 시간(밀리초)입니다. 설정이 높을수록 일괄 HTTP 작업의 지연 시간이 길어집니다.
최소값: 5ms. 최대값: 200ms.
기본값: 20ms
대체 템플릿 지원: 아니오
maxBatchSize-
단일 IoT 규칙 작업 실행에서 함께 일괄 처리되는 최대 메시지 수입니다.
최소값: 메시지 2개. 최대값: 메시지 10개
기본값: 메시지 10개
대체 템플릿 지원: 아니오
maxBatchSizeBytes-
메시지 배치의 최대 크기, 바이트 단위.
최소값: 100바이트. 최대값: 131,072바이트
기본값: 5120바이트
대체 템플릿 지원: 아니오
중요
여러 배치 파라미터를 지정하면 첫 번째 한도에 도달하면 일괄 처리가 완료됩니다. 예를 들어 100ms를 최대 배치 열기 시간으로 지정하고 5kiB를 최대 배치 크기로 지정하고 규칙 엔진이 100ms 이내에 2kiB만 배치하는 경우 2kiB 배치가 생성되고 전송됩니다.
배치에서 HTTP 헤더 사용
HTTP 작업에서 헤더를 사용하는 경우 일괄 처리 요청은 배치에 추가된 마지막 메시지(반드시 게시한 마지막 메시지가 아님)의 헤더 값을 사용합니다. 다음 중 하나인 헤더 값을 사용하는 것이 좋습니다.
-
배치의 모든 메시지에서 동일
-
모든 메시지에 적용 가능(예: 인증 자격 증명)
헤더는 HTTP 요청과 함께 전송되며 메시지 본문의 일부가 아닙니다.
참고
일괄 처리가 활성화된 경우:
배치 요청은 배치가 JSON 배열로 전송되므로
Content-Type: application/json헤더를 자동으로 포함합니다.배치의 마지막 메시지가 게시한 마지막 메시지임을 보장할 수는 없습니다. 배치로 만든 마지막 메시지입니다.
페이로드 예제
다음 예제는 HTTP 엔드포인트로 전송된 일괄 메시지 페이로드의 구조를 보여줍니다.
[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]
제한 사항
다음은 일괄 처리의 제한 사항입니다.
AWS IoT Core 는 전체 메시지 순서를 보장하지 않습니다. 배치는 각 호스트에서 로컬로 수행되므로 배치 내의 메시지가 수신된 순서와 다른 순서로 처리될 수 있습니다.
AWS IoT Core 는 수신자 측에서 메시지 처리 지원을 제공하지 않습니다. 다운스트림 서비스가 데이터를 일괄적으로 수락하고 처리하도록 구성되어 있는지 확인하는 것은 사용자의 책임입니다.
메시지가 동일한 리소스 식별자(HTTP URL 또는 리소스 ARN)로 향하는 경우에도 교차 계정 일괄 처리는 지원되지 않습니다.
AWS IoT Core 는 배치 크기가 지정한 구성을 충족할 것이라고 보장하지 않습니다. 배치는 타이밍 및 메시지 흐름에 따라 구성된 제한보다 작을 수 있습니다.
일괄 처리가 활성화된 경우 이진 페이로드(UTF-8이 아닌 데이터)는 지원되지 않습니다. UTF-8 텍스트 페이로드(예: JSON)만 허용됩니다. 바이너리 데이터를 전송하려면 HTTP 작업으로 전송하기 전에 base64로 인코딩한 다음 수신 엔드포인트에서 디코딩합니다. 예를 들어 IoT 규칙의 인코딩 함수를 사용하여 바이너리 페이로드를 인코딩할 수 있습니다. 또는 IoT 디바이스에서 바이너리 페이로드를 인코딩하여에 게시할 수 있습니다 AWS IoT Core.
일괄 처리를 위한 오류 작업
오류 작업 정의에서 별도의 일괄 처리 로직을 정의할 수 없습니다. 그러나 기본 작업에서 일괄 처리 로직을 정의한 경우 오류 작업은 일괄 처리를 지원합니다.
배치 요청이 실패하면 AWS IoT Core 규칙 엔진은 HTTP 작업 재시도 로직을 따릅니다. 마지막 재시도 후 실패한 전체 배치에 대해 오류 작업이 호출됩니다.
다음은 일괄 처리가 활성화된 오류 작업 메시지의 예입니다.
{ "ruleName": "FailedTopicRule", "topic": "topic/rulesengine", "payloadsWithMetadata": [ { "id": 1, "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 2, "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 3, "cloudwatchTraceId": "ca441266-c2ce-c916-6aee-b9e5c7831675", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" } ], "failures": [ { "affectedIds": [ 1, 2, 3 ], "failedAction": "HttpAction", "failedResource": "https://example.foobar.com/HttpAction", "errorMessage": "HttpAction failed to make a request to the specified endpoint. StatusCode: 500. Reason: Internal Server Error." }, { "affectedIds": [ 3 ], "failedAction": "S3Action", "failedResource": "amzn-s3-demo-bucket", "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist" }, { "affectedIds": [ 3 ], "failedAction": "LambdaAction", "failedResource": "arn:aws:lambda:us-west-2:123456789012:function:dummy", "errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 403" } ] }
참고
또한 배치 작업 실패는 더 큰 오류 작업 페이로드를 생성하여 크기로 인해 오류 작업 실패의 확률을 높일 수 있습니다. ErrorActionFailure 지표를 사용하여 오류 작업 실패를 모니터링할 수 있습니다. 자세한 정보는 규칙 작업 지표을 참조하세요.
를 사용하여 HTTP 작업 메시지 일괄 처리 AWS CLI
일괄 처리를 사용하여 규칙 작업 생성 또는 업데이트
-
적절한 AWS CLI 명령을 사용하여 규칙을 생성하거나 업데이트합니다.
-
새 규칙을 생성하려면 create-topic-rule 명령을 사용합니다.
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
기존 규칙을 업데이트하려면 replace-topic-rule 명령을 사용합니다.
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
주제 규칙 페이로드에서 enableBatching 파라미터를 true로 설정하여 일괄 처리 기능을 활성화합니다.
{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [ { "key": "static_header_key", "value": "static_header_value" }, { "key": "substitutable_header_key", "value": "${value_from_payload}" } ], "enableBatching": true, "batchConfig": { "maxBatchOpenMs":100, "maxBatchSize":5, "maxBatchSizeBytes":1024} } } ] } -
일괄 처리 파라미터를 구성합니다. 모든 배치 파라미터를 지정할 필요는 없습니다. 1, 2 또는 3개의 배치 파라미터를 모두 지정하도록 선택할 수 있습니다. 배치 파라미터를 지정하지 않으면 규칙 엔진은 해당 파라미터를 기본값으로 업데이트합니다. 파라미터 일괄 처리 및 기본값에 대한 자세한 내용은 HTTP 파라미터를 참조하세요.