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
Puede utilizar 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 finales HTTP en lotes. Esta funcionalidad puede ayudar a reducir los costos 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. La medición se realiza en incrementos de 5 KB, en función del tamaño de la carga útil por lotes saliente que emite 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 habilites el procesamiento por lotes en la definición de tu acción de reglas 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 por lotes.
Valor mínimo: 5 ms. Valor máximo: 200 ms.
Valor predeterminado: 20 ms
Admite plantillas de sustitución: No
maxBatchSize-
El número máximo de mensajes que se agrupan en lotes en una única ejecución de una 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
batchAcrossTopics-
Si se permite agrupar por lotes mensajes de diferentes temas de MQTT en una sola solicitud HTTP. De forma predeterminada, solo los mensajes del mismo tema se agrupan en lotes. Habilite este parámetro para enrutar los casos de uso en los que los mensajes de varios temas de dispositivos tengan como destino el mismo punto final HTTP.
Valor predeterminado: falso
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 especificas 100 ms como el tiempo máximo de apertura del lote y 5 KB como el tamaño máximo del lote, y Rules Engine solo procesa lotes de 2 KB en 100 ms, se creará y enviará un lote de 2 KB.
nota
Los mensajes siempre se agrupan en lotes dentro del ámbito de la misma cuenta, nombre de regla, URL del punto de conexión de HTTP de destino y grupo de facturación. Los mensajes que difieren en alguno de estos atributos nunca se combinan en el mismo lote, independientemente de la batchAcrossTopics configuración.
Uso de encabezados HTTP en un lote
Cuando usas encabezados en tu acción HTTP, la solicitud por lotes usa el valor de encabezado del último mensaje que se agregó al lote (no necesariamente el último mensaje que publicaste). Recomendamos usar 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á activado:
La solicitud por lotes incluye automáticamente el
Content-Type: application/jsonencabezado, 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 publicaste. Es el último mensaje que llegó al lote.
Ejemplo de carga útil
El siguiente ejemplo muestra la estructura de una carga útil de mensajes 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 Core no garantiza el orden general de los mensajes. El procesamiento por lotes se realiza localmente 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 Core no 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.
Cross-account no se admite el procesamiento por lotes, incluso si los mensajes están destinados al mismo identificador de recurso (URL HTTP o ARN del recurso).
AWS IoT Core no garantiza que el tamaño del lote cumpla con la configuración especificada. Los lotes pueden ser más pequeños que los límites configurados en función del tiempo y el flujo de mensajes.
Cuando se habilita el procesamiento por lotes, no se admiten las cargas útiles binarias (que no sean UTF-8 datos). Solo se UTF-8 aceptan cargas de texto (como JSON). Para enviar datos binarios, en base64 los codifica antes de enviarlos a la acción HTTP y, a continuación, los decodifica en el punto final receptor. Por ejemplo, puedes usar la función de codificación de las reglas de IoT para codificar la carga binaria. Como alternativa, puede codificar la carga útil binaria en su dispositivo de IoT y publicarla en él. AWS IoT Core
Acciones de error para el procesamiento por lotes
No podrá definir una lógica de procesamiento por lotes independiente en su definición de 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 la acción HTTP. Tras el último intento de reintento, se invocará una acción de error para todo el lote fallido.
A continuación se muestra 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" } ] }
Cuando batchAcrossTopics está habilitada, el formato de carga útil de la acción de error cambia. El topic campo se mueve del nivel superior al interior de cada payloadsWithMetadata entrada:
{ "ruleName": "FailedTopicRule", "payloadsWithMetadata": [ { "id": 1, "topic": "topic/sensor1", "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 2, "topic": "topic/sensor2", "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" } ], "failures": [ { "affectedIds": [1, 2], "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." } ] }
nota
Los errores de acción por lotes también generan una mayor carga útil de acciones de error, lo que puede aumentar la probabilidad de que se produzcan errores debido al tamaño. Puede supervisar las acciones fallidas 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 AWS CLI
Crear o actualizar una acción de regla mediante procesamiento por lotes
-
Use el AWS CLI comando apropiado para crear o actualizar una regla:
-
Para crear una regla nueva, utilice el comando https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html create-topic-rule:
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
Para actualizar una regla existente, utilice el comando https://docs.aws.amazon.com/cli/latest/reference/iot/replace-topic-rule.html replace-topic-rule:
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
Habilita las funciones 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, "batchAcrossTopics":true} } } ] } -
Configure los parámetros de procesamiento por lotes. No es necesario especificar todos los parámetros del lote. Puede elegir especificar 1, 2, 3 o los 4 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 los parámetros Parameters HTTP.