Batch-Verarbeitung von HTTP-Aktionsnachrichten - AWS IoT Core

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/json Header, 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

  1. 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-name myrule --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-name myrule --topic-rule-payload file://myrule.json
  2. 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 } } } ] }
  3. 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.