

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Agrupar mensagens de ação HTTP em lote
<a name="http_batching"></a>

Você pode usar o agrupamento em lotes para enviar várias mensagens de ação HTTP em uma única solicitação.

## Visão geral do
<a name="batching_overview"></a>

O agrupamento em lotes permite que você envie mensagens do AWS IoT Core Rules Engine para seus endpoints HTTP em lotes. Essa funcionalidade pode ajudar a reduzir seus custos diminuindo o número de execuções de ações HTTP, bem como melhorar a eficiência ao reduzir a sobrecarga associada ao estabelecimento de novas conexões.

**nota**  
A ação HTTP em lote é medida como uma única ação. Você é medido em incrementos de 5 KiB, com base no tamanho da carga útil em lote de saída emitida pelo Mecanismo de AWS IoT Core Regras para o serviço downstream. Para obter mais informações, consulte a [página de definição de preços do AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

Quando você ativa o agrupamento em lotes na definição de sua Ação de Regra de IoT, os seguintes parâmetros estarão disponíveis para configuração:

`maxBatchOpenMs`  
O tempo máximo (em milissegundos) que uma mensagem de saída espera por outras mensagens para criar o lote. Quanto maior a configuração, maior a latência da ação HTTP em lote.  
Valor mínimo: 5 ms. Valor máximo: 200 ms.  
Valor padrão: 20 ms  
Compatível com [modelos de substituição](iot-substitution-templates.md): Não

`maxBatchSize`  
O número máximo de mensagens que são agrupadas em lotes em uma única execução de ação de regra de IoT.  
Valor mínimo: 2 mensagens. Valor máximo: 10 mensagens  
Valor padrão: 10 mensagens  
Compatível com [modelos de substituição](iot-substitution-templates.md): Não

`maxBatchSizeBytes`  
Tamanho máximo de um lote de mensagens, em bytes.  
Valor mínimo: 100 bytes. Valor máximo: 131.072 bytes  
Valor padrão: 5120 bytes  
Compatível com [modelos de substituição](iot-substitution-templates.md): Não

**Importante**  
Quando você especifica vários parâmetros de lote, o lote é concluído quando o primeiro limite é atingido. Por exemplo, se você especificar 100 ms como o Tempo Máximo de Abertura do Lote e 5 KiB como o Tamanho Máximo do Lote, e o Rules Engine agrupar somente 2 KiB em 100 ms, um lote de 2 KiB será criado e enviado.

## Usando cabeçalhos HTTP em um lote
<a name="batching_http_headers"></a>

Quando você usa cabeçalhos em sua ação HTTP, a solicitação em lote usa o valor do cabeçalho da última mensagem que foi adicionada ao lote (não necessariamente a última mensagem que você publicou). Recomendamos usar valores de cabeçalho que sejam:
+ Idêntico em todas as mensagens do lote
+ Aplicável a todas as mensagens (por exemplo, credenciais de autenticação)

Os cabeçalhos são enviados com a solicitação HTTP e não fazem parte do corpo da mensagem.

**nota**  
Quando o agrupamento em lotes está ativado:  
A solicitação em lote inclui automaticamente o `Content-Type: application/json` cabeçalho, pois o lote é enviado como uma matriz JSON.
Não podemos garantir que a última mensagem do lote seja a última mensagem que você publicou. É a última mensagem que entrou no lote.

## Exemplo de carga
<a name="batching_payload"></a>

O exemplo a seguir mostra a estrutura de uma carga de mensagens em lote enviada ao seu endpoint HTTP:

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

## Limitações
<a name="batching_limitations"></a>

A seguir estão as limitações do agrupamento em lotes:
+ AWS IoT Core não garante a ordem geral das mensagens. O agrupamento em lotes é realizado localmente em cada host, o que pode fazer com que as mensagens dentro de um lote sejam processadas em uma ordem diferente da que foram recebidas.
+ AWS IoT Core não fornece suporte ao processamento de mensagens no lado do receptor. Você é responsável por garantir que seu serviço downstream esteja configurado para aceitar e processar dados em lotes.
+ O agrupamento em lotes entre contas não é suportado, mesmo que as mensagens sejam destinadas ao mesmo identificador de recurso (URL HTTP ou ARN do recurso).
+ AWS IoT Core não garante que o tamanho do lote atenda à configuração especificada. Os lotes podem ser menores do que os limites configurados com base no tempo e no fluxo de mensagens.
+ Quando o agrupamento em lotes está ativado, cargas binárias (dados não UTF-8) não são suportadas. Somente cargas de texto UTF-8 (como JSON) são aceitas. Para enviar dados binários, codifice-os em base64 antes de enviá-los para a ação HTTP e, em seguida, decodifique-os no ponto final de recebimento. Por exemplo, você pode usar a [função de codificação](iot-sql-functions.html#iot-function-encode) nas regras de IoT para codificar a carga binária. Como alternativa, você pode codificar a carga binária em seu dispositivo de IoT e publicá-la no. AWS IoT Core

## Ações de erro para agrupamento em lotes
<a name="batching_errors"></a>

Você não poderá definir uma lógica de lote separada em sua definição de Ação de Erro. No entanto, sua ação de erro suportará o agrupamento em lotes se você tiver definido a lógica de lote em sua ação principal.

Quando uma solicitação em lote falha, o mecanismo de AWS IoT Core regras segue a [lógica de repetição da ação HTTP](https-rule-action.md#https-rule-action-retry-logic). Após a última tentativa de repetição, uma ação de erro será invocada para todo o lote com falha.

Veja a seguir um exemplo de uma mensagem de ação de erro com o agrupamento em lotes ativado:

```
{
    "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"
        }
    ]
}
```

**nota**  
Falhas de ação em lote também geram cargas de ação de erro maiores, o que pode aumentar a probabilidade de falhas de ação de erro devido ao tamanho. Você pode monitorar falhas na ação de erro usando a `ErrorActionFailure` métrica. Consulte [Métricas de ação da regra](metrics_dimensions.md#rule-action-metrics) para obter mais informações.

## Envio de mensagens de ação HTTP em lote com o AWS CLI
<a name="batching_procedure"></a>

### Criação ou atualização de uma ação de regra com o agrupamento em lotes
<a name="batching_create_update_rule"></a>

1. Use o AWS CLI comando apropriado para criar ou atualizar uma regra:
   + Para criar uma nova regra, use o [create-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)comando:

     ```
     aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
     ```
   + Para atualizar uma regra existente, use o [replace-topic-rule](https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html)comando:

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

1. Ative os recursos de agrupamento em lotes definindo o parâmetro enableBatching como verdadeiro na carga útil da regra de tópico:

   ```
   {
           "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. Configure os parâmetros de agrupamento em lotes. Você não precisa especificar todos os parâmetros do lote. Você pode optar por especificar 1, 2 ou todos os 3 parâmetros de lote. Se você não especificar um parâmetro de lote, o Mecanismo de Regras atualizará esse parâmetro com os valores padrão. Para obter mais informações sobre parâmetros de lote e seus valores padrão, consulte [Parâmetros HTTP](https-rule-action.md#https-rule-action-parameters).