Amazon EventBridge Pipes-Eingabetransformation - Amazon EventBridge

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.

Amazon EventBridge Pipes-Eingabetransformation

Amazon EventBridge Pipes unterstützt optionale Eingangstransformatoren bei der Weitergabe von Daten an die Anreicherung und das Ziel. Sie können Eingangstransformatoren verwenden, um die Nutzlast der JSON Ereigniseingabe so umzugestalten, dass sie den Anforderungen des Anreicherungs- oder Zieldienstes gerecht wird. Für Amazon API Gateway und API Ziele gestalten Sie das Eingabeereignis auf diese Weise nach Ihrem RESTful ModellAPI. Eingabe-Transformatoren werden als InputTemplate-Parameter modelliert. Dabei kann es sich um Freitext, einen JSON Pfad zur Ereignisnutzlast oder ein JSON Objekt handeln, das JSON Inline-Pfade zur Ereignisnutzlast enthält. Zur Anreicherung stammt die Ereignisnutzlast aus der Quelle. Bei Zielen ist die Ereignisnutzlast das, was von der Anreicherung zurückgegeben wird, sofern eine solche für die Pipe konfiguriert ist. Zusätzlich zu den servicespezifischen Daten in der Ereignisnutzlast können Sie reservierte Variablen in Ihrer InputTemplate verwenden, um auf Daten für die Pipe zu verweisen.

Verwenden Sie die Notation mit eckigen Klammern, um auf Elemente in einem Array zuzugreifen.

Anmerkung

EventBridge unterstützt nicht die gesamte JSON Path-Syntax und wertet sie nicht zur Laufzeit aus. Die unterstützte Syntax umfasst:

  • Punktnotation (zum Beispiel $.detail)

  • Bindestriche

  • Unterstriche

  • Alphanumerische Zeichen

  • Array-Indizes

  • Platzhalter (*)

Im Folgenden finden Sie InputTemplate Beispielparameter, die auf eine SQS Amazon-Event-Payload verweisen:

Statische Zeichenfolge

InputTemplate: "Hello, sender"

JSONPfad

InputTemplate: <$.attributes.SenderId>

Dynamische Zeichenfolge

InputTemplate: "Hello, <$.attributes.SenderId>"

Statisch JSON

InputTemplate: > { "key1": "value1", "key2": "value2", "key3": "value3", }

Dynamisch JSON

InputTemplate: > { "key1": "value1" "key2": <$.body.key>, "d": <aws.pipes.event.ingestion-time> }

Verwenden der Notation mit eckigen Klammern, um auf ein Element in einem Array zuzugreifen:

InputTemplate: > { "key1": "value1" "key2": <$.body.Records[3]>, "d": <aws.pipes.event.ingestion-time> }
Anmerkung

EventBridge ersetzt Eingangstransformatoren zur Laufzeit, um einen gültigen JSON Ausgang zu gewährleisten. Setzen Sie aus diesem Grund Variablen, die sich auf JSON Pfadparameter beziehen, in Anführungszeichen, Variablen, die sich auf JSON Objekte oder Arrays beziehen, jedoch nicht in Anführungszeichen.

Reservierte Variablen

Eingabevorlagen können die folgenden reservierten Variablen verwenden:

  • <aws.pipes.pipe-arn>— Der Amazon-Ressourcenname (ARN) der Pipe.

  • <aws.pipes.pipe-name> – Der Name der Pipe

  • <aws.pipes.source-arn>— Der ARN der Ereignisquelle der Pipe.

  • <aws.pipes.enrichment-arn>— Die ARN Anreicherung des Rohres.

  • <aws.pipes.target-arn>— Das Ziel ARN des Rohres.

  • <aws.pipes.event.ingestion-time> – Der Zeitpunkt, zu dem das Ereignis vom Eingabe-Transformator empfangen wurde Dies ist ein ISO 8601-Zeitstempel. Diese Zeit ist für den Eingabe-Transformator der Anreicherung und den Eingabe-Transformator des Ziels unterschiedlich, je nachdem, wann die Anreicherung die Verarbeitung des Ereignisses abgeschlossen hat.

  • <aws.pipes.event> – Das Ereignis, wie es vom Eingabe-Transformator empfangen wurde

    Bei einem Eingabe-Transformator der Anreicherung ist dies das Ereignis aus der Quelle. Dies enthält die ursprüngliche Nutzlast aus der Quelle sowie zusätzliche servicespezifische Metadaten. Weitere servicespezifische Beispiele finden Sie in den Themen unter Amazon EventBridge Pipes-Quellen.

    Bei einem Eingabe-Transformator des Ziels ist dies das Ereignis, das von der Anreicherung zurückgegeben wird, sofern eine solche konfiguriert ist, ohne zusätzliche Metadaten. Daher kann es sein, dass eine Payload, die durch eine Anreicherung zurückgegeben wird, nicht- ist. JSON Wenn für die Pipe keine Anreicherung konfiguriert ist, ist dies das Ereignis aus der Quelle mit Metadaten.

  • <aws.pipes.event.json>— Das Gleiche wieaws.pipes.event, aber die Variable hat nur dann einen Wert, wenn die ursprüngliche Payload, entweder von der Quelle oder von der Anreicherung zurückgegeben, ist. JSON Wenn die Pipe ein codiertes Feld hat, z. B. das SQS body Amazon-Feld oder Kinesisdata, werden diese Felder dekodiert und in gültige Felder umgewandelt. JSON Da sie nicht maskiert ist, kann die Variable nur als Wert für ein Feld verwendet werden. JSON Weitere Informationen finden Sie unter Implizites Textdatenparsen.

Beispiel für die Eingabetransformation

Im Folgenden finden Sie ein Beispiel für ein EC2 Amazon-Ereignis, das wir als Beispielereignis verwenden können.

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" ], "detail": { "instance-id": "i-0123456789", "state": "RUNNING" } }

Lassen Sie uns das Folgende JSON als unseren Transformer verwenden.

{ "instance" : <$.detail.instance-id>, "state": <$.detail.state>, "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

Die resultierende Ausgabe sieht wie folgt aus:

{ "instance" : "i-0123456789", "state": "RUNNING", "pipeArn" : "arn:aws:pipe:us-east-1:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }

Implizites Textdatenparsen

Die folgenden Felder in der eingehenden Payload können JSON -escape sein, wie das SQS body Amazon-Objekt, oder Base64-kodiert sein, wie das Kinesis-Objekt. data EventBridge Transformiert diese Felder sowohl für die Filterung als auch für die Eingabetransformation in gültige JSON Felder, sodass Unterwerte direkt referenziert werden können. Zum Beispiel <$.data.someKey> für Kinesis.

Damit das Ziel die ursprüngliche Nutzlast ohne zusätzliche Metadaten erhält, verwenden Sie einen Eingabe-Transformator mit diesen Textdaten, die für die Quelle spezifisch sind. Zum Beispiel <$.body> für Amazon SQS oder <$.data> für Kinesis. Wenn die ursprüngliche Payload eine gültige JSON Zeichenfolge ist (zum Beispiel{"key": "value"}), führt die Verwendung des Eingangstransformators mit quellenspezifischen Textdaten dazu, dass die Anführungszeichen innerhalb der ursprünglichen Quell-Payload entfernt werden. Zum Beispiel wird {"key": "value"} zu "{key: value}", wenn es an das Ziel übermittelt wird. Wenn Ihr Ziel gültige JSON Payloads benötigt (z. B. EventBridge Lambda oder Step Functions), führt dies zu einem Zustellungsfehler. Damit das Ziel die ursprünglichen Quelldaten empfängt, ohne dass ungültige Daten generiert werdenJSON, schließen Sie den Dateneingangstransformator des Quelltextes ein. JSON Beispiel, {"data": <$.data>}.

Implizites Textparsen kann auch verwendet werden, um Werte für die meisten Pipe-Ziel- oder Anreicherungsparameter dynamisch aufzufüllen. Weitere Informationen finden Sie unter Dynamische Pfadparameter

Anmerkung

Wenn die ursprüngliche Payload gültig istJSON, enthält dieses Feld die nicht maskierten, nicht Base64-kodierten Daten. JSON Wenn die Payload jedoch nicht gültig istJSON, EventBridge codiert Base64 für die unten aufgeführten Felder, mit Ausnahme von Amazon. SQS

  • Aktives MQ – data

  • Kinesis – data

  • Amazon MSKkey und value

  • Rabbit MQ – data

  • Selbstverwaltetes Apache Kafka – key und value

  • Amazon SQSbody

Häufige Probleme beim Transformieren von Eingaben

Dies sind einige der häufigsten Probleme bei der Transformation von Eingaben in EventBridge Pipes:

  • Für Zeichenfolgen sind Anführungszeichen erforderlich.

  • Beim Erstellen des JSON Pfads für Ihre Vorlage erfolgt keine Überprüfung.

  • Wenn Sie eine Variable angeben, die einem JSON Pfad entspricht, der in dem Ereignis nicht existiert, wird diese Variable nicht erstellt und erscheint nicht in der Ausgabe.

  • JSONEigenschaften wie aws.pipes.event.json können nur als Wert eines JSON Felds verwendet werden, nicht als Inline in anderen Zeichenketten.

  • EventBridge maskiert Werte, die vom Eingabepfad extrahiert wurden, nicht, wenn die Eingabevorlage für ein Ziel gefüllt wird.

  • Wenn ein JSON Pfad auf ein JSON Objekt oder ein Array verweist, die Variable jedoch in einer Zeichenfolge referenziert wird, werden alle internen Anführungszeichen EventBridge entfernt, um sicherzustellen, dass es sich um eine gültige Zeichenfolge handelt. Beispielsweise würde „Body is <$.body>“ dazu führen, dass Anführungszeichen EventBridge aus dem Objekt entfernt werden.

    Wenn Sie also ein JSON Objekt ausgeben möchten, das auf einer einzelnen JSON Pfadvariablen basiert, müssen Sie es als Schlüssel platzieren. In diesem Beispiel {"body": <$.body>}.

  • Für Variablen, die Zeichenfolgen darstellen, sind keine Anführungszeichen erforderlich. Sie sind zulässig, aber EventBridge Pipes fügt Zeichenkettenvariablenwerten während der Transformation automatisch Anführungszeichen hinzu, um sicherzustellen, dass die Transformationsausgabe gültig istJSON. EventBridge Pipes fügt Variablen, die JSON Objekte oder Arrays darstellen, keine Anführungszeichen hinzu. Fügen Sie keine Anführungszeichen für Variablen hinzu, die JSON Objekte oder Arrays darstellen.

    Die folgende Eingabevorlage enthält beispielsweise Variablen, die sowohl Zeichenketten als auch JSON Objekte darstellen:

    { "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

    Das Ergebnis ist gültig JSON mit dem richtigen Zitat:

    { "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Bei Lambda- oder Step Functions Functions-Anreicherungen oder -Targets werden Batches als JSON Arrays an das Ziel geliefert, auch wenn die Batchgröße 1 ist. Eingangstransformatoren werden jedoch weiterhin auf einzelne Datensätze im JSON Array angewendet, nicht auf das gesamte Array. Weitere Informationen finden Sie unter Batching und Parallelität von Amazon EventBridge Pipes.