Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Batch-Verarbeitung von HTTP-Aktionsnachrichten
Sie können Batching verwenden, um mehrere HTTP-Aktionsnachrichten in einer einzigen Anfrage zu senden.
-Übersicht
Durch Batching können Sie Nachrichten von der AWS IoT Core Rules Engine stapelweise an Ihre HTTP-Endpunkte senden. Mit dieser Funktion können Sie Ihre Kosten senken, indem Sie die Anzahl der ausgeführten HTTP-Aktionen verringern und die Effizienz verbessern, indem der mit der Einrichtung neuer Verbindungen verbundene Aufwand reduziert wird.
Anmerkung
Die HTTP-Aktion im Batchmodus wird als einzelne Aktion berechnet. Die Zählung erfolgt in Schritten von 5 KiB, basierend auf der Größe der ausgehenden Batch-Payload, die von der Rules Engine an den AWS IoT Core Downstream-Service gesendet wird. Weitere Informationen finden Sie in der AWS IoT Core Preisliste
Wenn Sie Batching in der Definition Ihrer IoT-Regelaktion aktivieren, stehen die folgenden Parameter für die Konfiguration zur Verfügung:
maxBatchOpenMs-
Die maximale Zeitspanne (in Millisekunden), für die eine ausgehende Nachricht darauf wartet, dass andere Nachrichten den Stapel erstellen. Je höher die Einstellung, desto länger ist die Latenz der HTTP-Batch-Aktion.
Mindestwert: 5 ms. Maximalwert: 200 ms.
Standardwert: 20 ms
Unterstützt Ersatzvorlagen: Nein
maxBatchSize-
Die maximale Anzahl von Nachrichten, die in einer einzigen Ausführung einer IoT-Regelaktion gebündelt werden.
Mindestwert: 2 Nachrichten. Höchstwert: 10 Nachrichten
Standardwert: 10 Nachrichten
Unterstützt Ersatzvorlagen: Nein
maxBatchSizeBytes-
Maximale Größe eines Nachrichtenstapels in Byte.
Mindestwert: 100 Byte. Maximalwert: 131.072 Byte
Standardwert: 5120 Byte
Unterstützt Ersatzvorlagen: Nein
Wichtig
Wenn Sie mehrere Batch-Parameter angeben, wird die Batchverarbeitung abgeschlossen, wenn das erste Limit erreicht ist. Wenn Sie beispielsweise 100 ms als maximale Batch-Öffnungszeit und 5 KiB als maximale Batch-Größe angeben und Rules Engine innerhalb von 100 ms nur 2 KiB stapelt, wird ein 2-KB-Batch erstellt und gesendet.
Verwendung von HTTP-Headern in einem Batch
Wenn Sie in Ihrer HTTP-Aktion Header verwenden, verwendet die Batch-Anfrage den Header-Wert der letzten Nachricht, die dem Batch hinzugefügt wurde (nicht unbedingt die letzte Nachricht, die Sie veröffentlicht haben). Wir empfehlen die Verwendung von Header-Werten, die entweder:
-
Identisch für alle Nachrichten im Batch
-
Gilt für alle Nachrichten (z. B. Authentifizierungsdaten)
Die Header werden mit der HTTP-Anfrage gesendet und sind nicht Teil des Nachrichtentexts.
Anmerkung
Wenn Batching aktiviert ist:
Die Batch-Anfrage enthält automatisch den
Content-Type: application/jsonHeader, da der Batch als JSON-Array gesendet wird.Wir können nicht garantieren, dass die letzte Nachricht im Batch die letzte Nachricht ist, die Sie veröffentlicht haben. Es ist die letzte Nachricht, die es in den Stapel geschafft hat.
Beispiel für eine Nutzlast
Das folgende Beispiel zeigt die Struktur einer gebündelten Nachrichtennutzlast, die an Ihren HTTP-Endpunkt gesendet wird:
[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]
Einschränkungen
Im Folgenden sind Einschränkungen für die Batchverarbeitung aufgeführt:
AWS IoT Core garantiert nicht die allgemeine Reihenfolge der Nachrichten. Die Batchverarbeitung erfolgt lokal auf jedem Host, was dazu führen kann, dass Nachrichten innerhalb eines Batches in einer anderen Reihenfolge verarbeitet werden, als sie empfangen wurden.
AWS IoT Core bietet keine Unterstützung für die Nachrichtenverarbeitung auf der Empfängerseite. Sie sind dafür verantwortlich, dass Ihr Downstream-Service so konfiguriert ist, dass er Daten stapelweise akzeptiert und verarbeitet.
Kontoübergreifendes Batching wird nicht unterstützt, auch wenn Nachrichten für dieselbe Ressourcen-ID (HTTP-URL oder Ressourcen-ARN) bestimmt sind.
AWS IoT Core garantiert nicht, dass die Batchgröße der von Ihnen angegebenen Konfiguration entspricht. Je nach Zeitpunkt und Nachrichtenfluss können Batches unter den von Ihnen konfigurierten Grenzwerten liegen.
Wenn Batching aktiviert ist, werden binäre Payloads (Nicht-UTF-8-Daten) nicht unterstützt. Nur UTF-8-Textnutzlasten (wie JSON) werden akzeptiert. Um Binärdaten zu senden, kodieren Sie sie mit Base64, bevor Sie sie an die HTTP-Aktion senden, und dekodieren Sie sie dann an Ihrem Empfangsendpunkt. Sie können beispielsweise die Encode-Funktion in IoT-Regeln verwenden, um die binäre Nutzlast zu codieren. Alternativ können Sie die binäre Nutzlast in Ihrem IoT-Gerät codieren und auf veröffentlichen. AWS IoT Core
Fehleraktionen beim Batching
Sie können in Ihrer Fehleraktionsdefinition keine separate Batching-Logik definieren. Ihre Fehleraktion unterstützt jedoch die Batchverarbeitung, wenn Sie in Ihrer primären Aktion eine Batching-Logik definiert haben.
Wenn eine Batchanforderung fehlschlägt, folgt AWS IoT Core die Rules Engine der Wiederholungslogik für HTTP-Aktionen. Nach dem letzten Wiederholungsversuch wird eine Fehleraktion für den gesamten fehlgeschlagenen Batch aufgerufen.
Im Folgenden finden Sie ein Beispiel für eine Fehlermeldung mit aktivierter Batchverarbeitung:
{ "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" } ] }
Anmerkung
Fehler bei gebündelten Aktionen führen auch zu größeren Nutzlasten für Fehleraktionen, wodurch sich die Wahrscheinlichkeit erhöhen kann, dass Fehleraktionen aufgrund ihrer Größe fehlschlagen. Mithilfe der Metrik können Sie fehlgeschlagene Fehleraktionen überwachen. ErrorActionFailure Weitere Informationen finden Sie unter Regelaktionsmetriken.
Batching von HTTP-Aktionsnachrichten mit dem AWS CLI
Erstellen oder Aktualisieren einer Regelaktion mit Batching
-
Verwenden Sie den entsprechenden AWS CLI Befehl, um eine Regel zu erstellen oder zu aktualisieren:
-
Verwenden Sie den create-topic-rulefolgenden Befehl, um eine neue Regel zu erstellen:
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
Verwenden Sie den replace-topic-rulefolgenden Befehl, um eine bestehende Regel zu aktualisieren:
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
Aktivieren Sie die Batching-Funktionen, indem Sie den Parameter enableBatching in der Payload Ihrer Themenregel auf true setzen:
{ "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} } } ] } -
Konfigurieren Sie die Batching-Parameter. Sie müssen nicht alle Batch-Parameter angeben. Sie können wählen, ob Sie 1, 2 oder alle 3 Batch-Parameter angeben möchten. Wenn Sie keinen Batch-Parameter angeben, aktualisiert Rules Engine diesen Parameter mit den Standardwerten. Weitere Informationen zu Batching-Parametern und ihren Standardwerten finden Sie unter HTTP-Parameter.