Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Messaggi di azione HTTP in batch
È possibile utilizzare il batch per inviare più messaggi di azione HTTP in un'unica richiesta.
Panoramica di
Il batching consente di inviare messaggi da AWS IoT Core Rules Engine agli endpoint HTTP in batch. Questa funzionalità può aiutare a ridurre i costi riducendo il numero di esecuzioni di azioni HTTP e a migliorare l'efficienza riducendo il sovraccarico associato alla creazione di nuove connessioni.
Nota
L'azione HTTP in batch viene misurata come singola azione. Il calcolo viene effettuato in incrementi di 5 KiB, in base alla dimensione del payload in batch in uscita emesso dal Rules Engine al servizio downstream. AWS IoT Core Per ulteriori informazioni, consultare la pagina dei prezzi di AWS IoT Core
Quando abiliti il batching nella definizione della tua IoT Rule Action, i seguenti parametri saranno disponibili per la configurazione:
maxBatchOpenMs-
La quantità massima di tempo (in millisecondi) in cui un messaggio in uscita attende che altri messaggi creino il batch. Più alta è l'impostazione, maggiore è la latenza dell'azione HTTP in batch.
Valore minimo: 5 ms. Valore massimo: 200 ms.
Valore predefinito: 20 ms
Supporta modelli di sostituzione: no
maxBatchSize-
Il numero massimo di messaggi raggruppati in una singola esecuzione di un'azione di regole IoT.
Valore minimo: 2 messaggi. Valore massimo: 10 messaggi
Valore predefinito: 10 messaggi
Supporta modelli di sostituzione: no
maxBatchSizeBytes-
Dimensione massima di un batch di messaggi, in byte.
Valore minimo: 100 byte. Valore massimo: 131.072 byte
Valore predefinito: 5120 byte
Supporta modelli di sostituzione: no
Importante
Quando si specificano più parametri batch, il batch viene completato quando viene raggiunto il primo limite. Ad esempio, se si specifica 100 ms come Tempo di apertura massimo del batch e 5 KiB come dimensione massima del batch e Rules Engine esegue batch solo 2 KiB entro 100 ms, verrà creato e inviato un batch da 2 KiB.
Utilizzo delle intestazioni HTTP in un batch
Quando si utilizzano le intestazioni nell'azione HTTP, la richiesta in batch utilizza il valore di intestazione dell'ultimo messaggio aggiunto al batch (non necessariamente l'ultimo messaggio pubblicato). Ti consigliamo di utilizzare valori di intestazione che siano i seguenti:
-
Identici in tutti i messaggi del batch
-
Applicabile a tutti i messaggi (ad esempio, credenziali di autenticazione)
Le intestazioni vengono inviate con la richiesta HTTP e non fanno parte del corpo del messaggio.
Nota
Quando il batching è abilitato:
La richiesta in batch include automaticamente l'
Content-Type: application/jsonintestazione, poiché il batch viene inviato come array JSON.Non possiamo garantire che l'ultimo messaggio del batch sia l'ultimo messaggio che hai pubblicato. È l'ultimo messaggio che è stato inserito nel batch.
Esempio di payload
L'esempio seguente mostra la struttura di un payload di messaggi in batch inviato all'endpoint HTTP:
[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]
Limitazioni
Di seguito sono riportate le limitazioni relative al batch:
AWS IoT Core non garantisce l'ordinamento complessivo dei messaggi. Il batch viene eseguito localmente su ciascun host, il che può comportare l'elaborazione dei messaggi all'interno di un batch in un ordine diverso da quello di ricezione.
AWS IoT Core non fornisce supporto per l'elaborazione dei messaggi sul lato del destinatario. L'utente è responsabile di garantire che il servizio downstream sia configurato per accettare ed elaborare i dati in batch.
Il batching tra account non è supportato, anche se i messaggi sono destinati allo stesso identificatore di risorsa (URL HTTP o ARN della risorsa).
AWS IoT Core non garantisce che la dimensione del batch soddisfi la configurazione specificata. I batch possono essere inferiori ai limiti configurati in base alla tempistica e al flusso dei messaggi.
Quando il batching è abilitato, i payload binari (dati non UTF-8) non sono supportati. Sono accettati solo payload di testo UTF-8 (come JSON). Per inviare dati binari, base64 li codifica prima di inviarli all'azione HTTP, quindi li decodifica sull'endpoint ricevente. Ad esempio, è possibile utilizzare la funzione encode nelle regole IoT per codificare il payload binario. In alternativa, puoi codificare il payload binario nel tuo dispositivo IoT e pubblicarlo su. AWS IoT Core
Azioni di errore per il batching
Non sarà possibile definire una logica di batch separata nella definizione dell'azione di errore. Tuttavia, l'azione di errore supporterà il batch se è stata definita la logica di batch nell'azione principale.
Quando una richiesta batch ha esito negativo, il motore AWS IoT Core Rules seguirà la logica di ripetizione dell'azione HTTP. Dopo l'ultimo tentativo, verrà richiamata un'azione di errore per l'intero batch non riuscito.
Di seguito è riportato un esempio di messaggio di errore con il batching abilitato:
{ "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
Gli errori di azione in batch generano anche payload di azioni di errore più grandi, il che può aumentare la probabilità di errori dovuti alle dimensioni. È possibile monitorare gli errori relativi alle azioni di errore utilizzando la metrica. ErrorActionFailure Per ulteriori informazioni, consulta Parametri delle operazioni sulle regole.
Combinazione in batch dei messaggi di azione HTTP con AWS CLI
Creazione o aggiornamento di un'azione di regola con batch
-
Usa il AWS CLI comando appropriato per creare o aggiornare una regola:
-
Per creare una nuova regola, usa il create-topic-rulecomando:
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
Per aggiornare una regola esistente, usa il replace-topic-rulecomando:
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
Abilita le funzionalità di batch impostando il parametro enableBatching su true nel payload della regola dell'argomento:
{ "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} } } ] } -
Configura i parametri di batch. Non è necessario specificare tutti i parametri del batch. È possibile scegliere di specificare 1, 2 o tutti e 3 i parametri del batch. Se non si specifica un parametro batch, Rules Engine aggiornerà tale parametro con i valori predefiniti. Per ulteriori informazioni sui parametri di batch e sui relativi valori predefiniti, vedere Parametri HTTP.