Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Traitement par lots de messages d'action HTTP
Vous pouvez utiliser le traitement par lots pour envoyer plusieurs messages d'action HTTP en une seule demande.
Présentation de
Le traitement par lots vous permet d'envoyer des messages par lots depuis AWS IoT Core Rules Engine à vos points de terminaison HTTP. Cette fonctionnalité peut vous aider à réduire vos coûts en réduisant le nombre d'exécutions d'actions HTTP et en améliorant l'efficacité en réduisant les frais associés à l'établissement de nouvelles connexions.
Note
L'action HTTP par lots est mesurée comme une action unique. Vous êtes mesuré par incréments de 5 Ko, en fonction de la taille de la charge utile sortante par lots émise par le moteur de AWS IoT Core règles vers le service en aval. Pour plus d'informations, consultez la page de tarification AWS IoT Core
Lorsque vous activez le traitement par lots dans la définition de votre action de règle IoT, les paramètres suivants seront disponibles pour la configuration :
maxBatchOpenMs-
Durée maximale (en millisecondes) pendant laquelle un message sortant attend que d'autres messages créent le lot. Plus le paramètre est élevé, plus la latence de l'action HTTP par lots est longue.
Valeur minimale : 5 ms. Valeur maximale : 200 ms.
Valeur par défaut : 20 ms
Prend en charge les modèles de substitution : Non
maxBatchSize-
Nombre maximal de messages regroupés dans le cadre d'une seule exécution d'une action de règle IoT.
Valeur minimale : 2 messages. Valeur maximale : 10 messages
Valeur par défaut : 10 messages
Prend en charge les modèles de substitution : Non
maxBatchSizeBytes-
Taille maximale d'un lot de messages, en octets.
Valeur minimale : 100 octets. Valeur maximale : 131 072 octets
Valeur par défaut : 5120 octets
Prend en charge les modèles de substitution : Non
Important
Lorsque vous spécifiez plusieurs paramètres de lot, le traitement par lots est terminé lorsque la première limite est atteinte. Par exemple, si vous spécifiez 100 ms comme durée maximale d'ouverture du lot et 5 Ko comme taille de lot maximale, et que Rules Engine ne traite que 2 Ko dans un délai de 100 ms, un lot de 2 Ko sera créé et envoyé.
Utilisation d'en-têtes HTTP dans un lot
Lorsque vous utilisez des en-têtes dans votre action HTTP, la requête groupée utilise la valeur d'en-tête du dernier message ajouté au lot (pas nécessairement le dernier message que vous avez publié). Nous vous recommandons d'utiliser des valeurs d'en-tête qui sont soit :
-
Identique pour tous les messages du lot
-
Applicable à tous les messages (par exemple, les informations d'authentification)
Les en-têtes sont envoyés avec la requête HTTP et ne font pas partie du corps du message.
Note
Lorsque le traitement par lots est activé :
La demande groupée inclut automatiquement l'
Content-Type: application/jsonen-tête, car le lot est envoyé sous forme de tableau JSON.Nous ne pouvons pas garantir que le dernier message du lot soit le dernier que vous avez publié. C'est le dernier message qui a été inclus dans le lot.
Exemple de charge utile
L'exemple suivant montre la structure d'une charge utile de message par lots envoyée à votre point de terminaison HTTP :
[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]
Limitations
Les restrictions relatives au traitement par lots sont les suivantes :
AWS IoT Corene garantit pas l'ordre général des messages. Le traitement par lots est effectué localement sur chaque hôte, ce qui peut entraîner le traitement des messages d'un lot dans un ordre différent de celui dans lequel ils ont été reçus.
AWS IoT Corene fournit pas de support pour le traitement des messages côté récepteur. Il vous incombe de vous assurer que votre service en aval est configuré pour accepter et traiter les données par lots.
Le traitement par lots entre comptes n'est pas pris en charge, même si les messages sont destinés au même identifiant de ressource (URL HTTP ou ARN de ressource).
AWS IoT Corene garantit pas que la taille du lot correspondra à la configuration que vous avez spécifiée. Les lots peuvent être inférieurs aux limites que vous avez configurées en fonction du calendrier et du flux de messages.
Lorsque le traitement par lots est activé, les charges utiles binaires (données non UTF-8) ne sont pas prises en charge. Seules les charges utiles de texte UTF-8 (telles que JSON) sont acceptées. Pour envoyer des données binaires, codez-les en base64 avant de les envoyer à l'action HTTP, puis décodez-les sur votre point de terminaison de réception. Par exemple, vous pouvez utiliser la fonction d'encodage dans les règles de l'IoT pour coder la charge utile binaire. Vous pouvez également encoder la charge utile binaire dans votre appareil IoT et la publier sur. AWS IoT Core
Actions d'erreur liées au traitement par lots
Vous ne serez pas en mesure de définir une logique de traitement par lots distincte dans votre définition d'action d'erreur. Toutefois, votre action d'erreur prendra en charge le traitement par lots si vous avez défini une logique de traitement par lots dans votre action principale.
Lorsqu'une demande par lots échoue, le moteur de AWS IoT Core règles suit la logique de nouvelle tentative d'action HTTP. Après la dernière tentative, une action d'erreur sera invoquée pour chaque message individuel.
Voici un exemple de message d'action d'erreur lorsque le traitement par lots est activé :
{ "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" } ] }
Note
Les échecs d'action par lots génèrent également des charges utiles d'actions d'erreur plus importantes, ce qui peut augmenter la probabilité d'échec des actions d'erreur en raison de leur taille. Vous pouvez surveiller les échecs liés aux actions d'erreur à l'aide de la ErrorActionFailure métrique. Pour plus d’informations, consultez Métriques d'action de règle.
Regrouper les messages d'action HTTP à l'aide du AWS CLI
Création ou mise à jour d'une action de règle avec traitement par lots
-
Utilisez la AWS CLI commande appropriée pour créer ou mettre à jour une règle :
-
Pour créer une nouvelle règle, utilisez la create-topic-rulecommande suivante :
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
Pour mettre à jour une règle existante, utilisez la replace-topic-rulecommande :
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
Activez les fonctionnalités de traitement par lots en définissant le paramètre EnableBatching sur true dans la charge utile de votre règle de sujet :
{ "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} } } ] } -
Configurez les paramètres de traitement par lots. Il n'est pas nécessaire de spécifier tous les paramètres du lot. Vous pouvez choisir de spécifier 1, 2 ou les 3 paramètres de lot. Si vous ne spécifiez aucun paramètre de lot, Rules Engine met à jour ce paramètre avec les valeurs par défaut. Pour plus d'informations sur les paramètres de traitement par lots et leurs valeurs par défaut, consultez la section Paramètres HTTP.