Procesamiento por lotes de mensajes de acción HTTP - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Procesamiento por lotes de mensajes de acción HTTP

Puedes usar el procesamiento por lotes para enviar varios mensajes de acción HTTP en una sola solicitud.

Descripción general de

El procesamiento por lotes le permite enviar mensajes desde AWS IoT Core Rules Engine a sus puntos de enlace HTTP por lotes. Esta funcionalidad puede ayudarle a reducir los costes al reducir el número de ejecuciones de acciones HTTP, así como a mejorar la eficiencia al reducir la sobrecarga asociada al establecimiento de nuevas conexiones.

nota

La acción HTTP por lotes se mide como una acción única. Se mide en incrementos de 5 KiB, en función del tamaño de la carga útil saliente por lotes emitida por el motor de reglas al AWS IoT Core servicio descendente. Para obtener más información, consulte la página de precios de AWS IoT Core.

Cuando habilita el procesamiento por lotes en la definición de su acción de regla de IoT, los siguientes parámetros estarán disponibles para la configuración:

maxBatchOpenMs

El tiempo máximo (en milisegundos) que un mensaje saliente espera a que otros mensajes creen el lote. Cuanto más alta sea la configuración, mayor será la latencia de la acción HTTP agrupada en lotes.

Valor mínimo: 5 ms. Valor máximo: 200 ms.

Valor predeterminado: 20 ms

Admite plantillas de sustitución: No

maxBatchSize

La cantidad máxima de mensajes que se agrupan por lotes en una sola ejecución de acción de regla de IoT.

Valor mínimo: 2 mensajes. Valor máximo: 10 mensajes

Valor predeterminado: 10 mensajes

Admite plantillas de sustitución: No

maxBatchSizeBytes

Tamaño máximo de un lote de mensajes, en bytes.

Valor mínimo: 100 bytes. Valor máximo: 131.072 bytes

Valor predeterminado: 5120 bytes

Admite plantillas de sustitución: No

importante

Al especificar varios parámetros de lote, el procesamiento por lotes finaliza cuando se alcanza el primer límite. Por ejemplo, si especifica 100 ms como el tiempo máximo de apertura del lote y 5 KiB como el tamaño máximo del lote, y Rules Engine solo graba 2 KiB en 100 ms, se creará y enviará un lote de 2 KiB.

Uso de encabezados HTTP en un lote

Cuando utilizas encabezados en tu acción HTTP, la solicitud agrupada usa el valor del encabezado del último mensaje que se agregó al lote (no necesariamente el último mensaje que publicaste). Recomendamos utilizar valores de encabezado que sean:

  • Idénticos en todos los mensajes del lote

  • Aplicable a todos los mensajes (por ejemplo, las credenciales de autenticación)

Los encabezados se envían con la solicitud HTTP y no forman parte del cuerpo del mensaje.

nota

Cuando el procesamiento por lotes está habilitado:

  • La solicitud agrupada incluye automáticamente el Content-Type: application/json encabezado, ya que el lote se envía como una matriz JSON.

  • No podemos garantizar que el último mensaje del lote sea el último mensaje que hayas publicado. Es el último mensaje que se incluyó en el lote.

Ejemplo de carga útil

El siguiente ejemplo muestra la estructura de la carga útil de un mensaje por lotes que se envía a tu punto final HTTP:

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

Limitaciones

Las siguientes son las limitaciones del procesamiento por lotes:

  • AWS IoT Coreno garantiza el orden general de los mensajes. El procesamiento por lotes se realiza de forma local en cada host, lo que puede provocar que los mensajes de un lote se procesen en un orden diferente al que se recibieron.

  • AWS IoT Coreno proporciona soporte para el procesamiento de mensajes en el lado del receptor. Usted es responsable de garantizar que su servicio descendente esté configurado para aceptar y procesar los datos en lotes.

  • No se admite el procesamiento por lotes entre cuentas, incluso si los mensajes están destinados al mismo identificador de recursos (URL HTTP o ARN del recurso).

  • AWS IoT Coreno garantiza que el tamaño del lote cumpla con la configuración que especificó. Los lotes pueden ser más pequeños que los límites configurados en función del tiempo y el flujo de mensajes.

  • Cuando el procesamiento por lotes está activado, no se admiten las cargas útiles binarias (datos que no sean UTF-8). Solo se aceptan cargas útiles de texto en UTF-8 (como JSON). Para enviar datos binarios, base64 los codifica antes de enviarlos a la acción HTTP y, a continuación, los decodifica en el punto final receptor. Por ejemplo, puede usar la función de codificación en las reglas de IoT para codificar la carga binaria. Como alternativa, puedes codificar la carga binaria en tu dispositivo IoT y publicarla en. AWS IoT Core

Acciones de error al procesar por lotes

No podrá definir una lógica de procesamiento por lotes independiente en la definición de la acción de error. Sin embargo, su acción de error admitirá el procesamiento por lotes si ha definido la lógica de procesamiento por lotes en su acción principal.

Cuando se produce un error en una solicitud por lotes, el motor de AWS IoT Core reglas seguirá la lógica de reintento de una acción HTTP. Tras el último intento de reintento, se invocará una acción de error para cada mensaje individual.

El siguiente es un ejemplo de un mensaje de acción de error con el procesamiento por lotes activado:

{ "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

Los errores de las acciones por lotes también generan una mayor carga útil de las acciones de error, lo que, debido al tamaño, puede aumentar la probabilidad de que se produzcan errores en las acciones de error. Puede monitorizar los fallos en las acciones de error mediante la ErrorActionFailure métrica. Para obtener más información, consulte Métricas de acciones de reglas.

Agrupar por lotes los mensajes de acción HTTP con el AWS CLI

Crear o actualizar una acción de regla con procesamiento por lotes

  1. Utilice el AWS CLI comando correspondiente para crear o actualizar una regla:

    • Para crear una regla nueva, utilice el create-topic-rulecomando:

      aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
    • Para actualizar una regla existente, utilice el replace-topic-rulecomando:

      aws iot replace-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
  2. Habilite las capacidades de procesamiento por lotes configurando el parámetro enableBatching en true en la carga útil de la regla temática:

    { "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 } } } ] }
  3. Configure los parámetros de procesamiento por lotes. No es necesario especificar todos los parámetros del lote. Puede elegir especificar 1, 2 o los 3 parámetros del lote. Si no especifica un parámetro de lote, Rules Engine actualizará ese parámetro con los valores predeterminados. Para obtener más información sobre los parámetros de procesamiento por lotes y sus valores predeterminados, consulte Parámetros HTTP.