

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# HTTP 작업 메시지 배치 처리
<a name="http_batching"></a>

일괄 처리를 사용하여 단일 요청으로 여러 HTTP 작업 메시지를 보낼 수 있습니다.

## 개요
<a name="batching_overview"></a>

일괄 처리를 사용하면 AWS IoT Core 규칙 엔진에서 HTTP 엔드포인트로 메시지를 일괄 전송할 수 있습니다. 이 기능을 사용하면 HTTP 작업 실행 수를 줄이고 새 연결 설정과 관련된 오버헤드를 줄여 효율성을 개선할 수 있습니다.

**참고**  
일괄 HTTP 작업은 단일 작업으로 측정됩니다. AWS IoT Core 규칙 엔진에서 다운스트림 서비스로 내보내는 아웃바운드 배치 페이로드의 크기를 기준으로 5kiB 단위로 측정됩니다. 자세한 내용은 [AWS IoT Core 요금](https://aws.amazon.com/iot-core/pricing/) 페이지를 참조하세요.

IoT 규칙 작업의 정의에서 일괄 처리를 활성화하면 구성에 다음 파라미터를 사용할 수 있습니다.

`maxBatchOpenMs`  
발신 메시지가 다른 메시지가 배치를 생성할 때까지 대기하는 최대 시간(밀리초)입니다. 설정이 높을수록 일괄 HTTP 작업의 지연 시간이 길어집니다.  
최소값: 5ms. 최댓값: 200ms.  
기본값: 20ms  
[대체 템플릿](iot-substitution-templates.md) 지원: 아니오

`maxBatchSize`  
단일 IoT 규칙 작업 실행에서 함께 일괄 처리되는 최대 메시지 수입니다.  
최솟값: 메시지 2개. 최대값: 메시지 10개  
기본값: 메시지 10개  
[대체 템플릿](iot-substitution-templates.md) 지원: 아니오

`maxBatchSizeBytes`  
메시지 배치의 최대 크기, 바이트 단위.  
최소값: 100바이트. 최대값: 131,072바이트  
기본값: 5120바이트  
[대체 템플릿](iot-substitution-templates.md) 지원: 아니오

**중요**  
여러 배치 파라미터를 지정하면 첫 번째 한도에 도달하면 일괄 처리가 완료됩니다. 예를 들어 최대 배치 열기 시간으로 100ms를 지정하고 최대 배치 크기로 5kiB를 지정하고 규칙 엔진이 100ms 이내에 2kiB만 배치하는 경우 2kiB 배치가 생성되고 전송됩니다.

## 배치에서 HTTP 헤더 사용
<a name="batching_http_headers"></a>

HTTP 작업에서 헤더를 사용하는 경우 일괄 처리 요청은 배치에 추가된 마지막 메시지의 헤더 값(반드시 게시한 마지막 메시지가 아님)을 사용합니다. 다음 중 하나인 헤더 값을 사용하는 것이 좋습니다.
+ 배치의 모든 메시지에서 동일
+ 모든 메시지에 적용 가능(예: 인증 자격 증명)

헤더는 HTTP 요청과 함께 전송되며 메시지 본문의 일부가 아닙니다.

**참고**  
일괄 처리가 활성화된 경우:  
배치 요청은 배치가 JSON 배열로 전송되므로 `Content-Type: application/json` 헤더를 자동으로 포함합니다.
배치의 마지막 메시지가 게시한 마지막 메시지임을 보장할 수는 없습니다. 배치로 만든 마지막 메시지입니다.

## 페이로드 예제
<a name="batching_payload"></a>

다음 예제는 HTTP 엔드포인트로 전송된 일괄 메시지 페이로드의 구조를 보여줍니다.

```
[
  {
    "user_id": "user1",
    "steps_today": 1000
  },
  {
    "user_id": "user2",
    "steps_today": 21000
  },
  {
    "user_id": "user8",
    "steps_today": 1500
  },
  ...
]
```

## 제한 사항
<a name="batching_limitations"></a>

다음은 일괄 처리의 제한 사항입니다.
+ AWS IoT Core 는 전체 메시지 순서를 보장하지 않습니다. 배치는 각 호스트에서 로컬로 수행되므로 배치 내의 메시지가 수신된 순서와 다른 순서로 처리될 수 있습니다.
+ AWS IoT Core 는 수신자 측에서 메시지 처리 지원을 제공하지 않습니다. 다운스트림 서비스가 데이터를 일괄적으로 수락하고 처리하도록 구성되어 있는지 확인하는 것은 사용자의 책임입니다.
+ 메시지가 동일한 리소스 식별자(HTTP URL 또는 리소스 ARN)로 향하는 경우에도 교차 계정 일괄 처리는 지원되지 않습니다.
+ AWS IoT Core 는 배치 크기가 지정한 구성을 충족할 것이라고 보장하지 않습니다. 배치는 타이밍 및 메시지 흐름에 따라 구성된 제한보다 작을 수 있습니다.
+ 일괄 처리가 활성화된 경우 이진 페이로드(UTF-8이 아닌 데이터)는 지원되지 않습니다. UTF-8 텍스트 페이로드(예: JSON)만 허용됩니다. 바이너리 데이터를 전송하려면 HTTP 작업으로 전송하기 전에 base64로 인코딩한 다음 수신 엔드포인트에서 디코딩합니다. 예를 들어 IoT 규칙의 [인코딩 함수](iot-sql-functions.html#iot-function-encode)를 사용하여 바이너리 페이로드를 인코딩할 수 있습니다. 또는 IoT 디바이스에서 바이너리 페이로드를 인코딩하여에 게시할 수 있습니다 AWS IoT Core.

## 일괄 처리를 위한 오류 작업
<a name="batching_errors"></a>

오류 작업 정의에서 별도의 일괄 처리 로직을 정의할 수 없습니다. 그러나 기본 작업에서 일괄 처리 로직을 정의한 경우 오류 작업은 일괄 처리를 지원합니다.

배치 요청이 실패하면 AWS IoT Core 규칙 엔진은 [HTTP 작업 재시도 로직](https-rule-action.md#https-rule-action-retry-logic)을 따릅니다. 마지막 재시도 후 실패한 전체 배치에 대해 오류 작업이 호출됩니다.

다음은 일괄 처리가 활성화된 오류 작업 메시지의 예입니다.

```
{
    "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` 지표를 사용하여 오류 작업 실패를 모니터링할 수 있습니다. 자세한 정보는 [규칙 작업 지표](metrics_dimensions.md#rule-action-metrics)을 참조하세요.

## 를 사용하여 HTTP 작업 메시지 일괄 처리 AWS CLI
<a name="batching_procedure"></a>

### 일괄 처리를 사용하여 규칙 작업 생성 또는 업데이트
<a name="batching_create_update_rule"></a>

1. 적절한 AWS CLI 명령을 사용하여 규칙을 생성하거나 업데이트합니다.
   + 새 규칙을 생성하려면 [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html) 명령을 사용합니다.

     ```
     aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```
   + 기존 규칙을 업데이트하려면 [replace-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html) 명령을 사용합니다.

     ```
     aws iot replace-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```

1. 주제 규칙 페이로드에서 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. 일괄 처리 파라미터를 구성합니다. 모든 배치 파라미터를 지정할 필요는 없습니다. 1, 2 또는 3개의 배치 파라미터를 모두 지정하도록 선택할 수 있습니다. 배치 파라미터를 지정하지 않으면 규칙 엔진은 해당 파라미터를 기본값으로 업데이트합니다. 파라미터 일괄 처리 및 기본값에 대한 자세한 내용은 [HTTP 파라미터를](https-rule-action.md#https-rule-action-parameters) 참조하세요.