Transformation Amazon EventBridge Amazon-Eingaben - 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.

Transformation Amazon EventBridge Amazon-Eingaben

Sie können den Text eines Ereignisses anpassen, bevor EventBridge die Informationen an das Ziel einer Regel weitergegeben werden. Mithilfe des Eingabe-Transformators in der Konsole oder der API definieren Sie Variablen, die den JSON-Pfad verwenden, um auf Werte in der ursprünglichen Ereignisquelle zu verweisen. Das transformierte Ereignis wird anstelle des ursprünglichen Ereignisses an ein Ziel gesendet. Dynamische Pfadparameter müssen jedoch auf das ursprüngliche Ereignis verweisen, nicht auf das transformierte Ereignis. Sie können bis zu 100 Variablen definieren und dabei jeder einen Wert aus der Eingabe zuweisen. Anschließend können Sie diese Variablen in der Eingabevorlage als <variable-name> verwenden.

Ein Tutorial zur Verwendung des Eingabe-Transformators finden Sie unter Tutorial: Verwenden des Eingabe-Transformators, um die EventBridge-Ausgabe an das Ereignisziel anzupassen.

Anmerkung

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

  • Punktnotation (zum Beispiel $.detail)

  • Bindestriche

  • Unterstriche

  • Alphanumerische Zeichen

  • Array-Indizes

  • Platzhalter (*)

Vordefinierte Variablen

Es gibt vordefinierte Variablen, die Sie verwenden können, ohne einen JSON-Pfad zu definieren. Diese Variablen sind reserviert und Sie können keine Variablen mit diesen Namen erstellen:

  • aws.events.rule-arn— Der Amazon-Ressourcenname (ARN) der EventBridge Regel.

  • aws.events.rule-name— Der Name der EventBridge Regel.

  • aws.events.event.ingestion-time— Die Uhrzeit, zu der die Veranstaltung bei eingegangen ist EventBridge. Dies ist ein ISO-8601-Zeitstempel. Diese Variable wird von generiert EventBridge und kann nicht überschrieben werden.

  • aws.events.event – Die ursprüngliche Ereignisnutzlast als JSON (ohne das detail-Feld) Kann nur als Wert für ein JSON-Feld verwendet werden, da dessen Inhalt nicht durch Escape-Zeichen geschützt ist

  • aws.events.event.json – Die gesamte ursprüngliche Ereignisnutzlast als JSON (mit dem detail-Feld) Kann nur als Wert für ein JSON-Feld verwendet werden, da dessen Inhalt nicht durch Escape-Zeichen geschützt ist

Beispiele für die Eingabetransformation

Im Folgenden sehen Sie ein Amazon-EC2-Beispielereignis.

{ "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" } }

Wenn Sie eine Regel in der Konsole definieren, wählen Sie die Option Input Transformer unter Configure input (Eingabe konfigurieren) aus. Diese Option zeigt zwei Textfelder an: eines für den Input Path (Eingabepfad) und eines für die Input Template (Eingabevorlage).

Der Eingabepfad wird verwendet, um Variablen zu definieren. Verwenden Sie den JSON-Pfad, um auf Elemente in Ihrem Ereignis zu verweisen und diese Werte in Variablen zu speichern. Sie könnten beispielsweise einen Eingabepfad erstellen, um auf Werte in dem Beispielereignis zu verweisen, indem Sie Folgendes in das erste Textfeld eingeben. Sie können auch Klammern und Indizes verwenden, um Elemente aus Arrays abzurufen.

Anmerkung

EventBridge ersetzt Eingangstransformatoren zur Laufzeit, um eine gültige JSON-Ausgabe sicherzustellen. Setzen Sie aus diesem Grund Variablen, die auf JSON-Pfadparameter verweisen, in Anführungszeichen, Variablen, die sich auf JSON-Objekte oder -Arrays beziehen, jedoch nicht in Anführungszeichen.

{ "timestamp" : "$.time", "instance" : "$.detail.instance-id", "state" : "$.detail.state", "resource" : "$.resources[0]" }

Damit werden vier Variablen definiert, <timestamp>, <instance>, <state> und <resource>. Sie können auf diese Variablen beim Erstellen Ihrer Eingabevorlage verweisen.

Die Eingabevorlage ist eine Vorlage für die Informationen, die Sie an Ihr Ziel übergeben möchten. Sie können eine Vorlage erstellen, die entweder eine Zeichenfolge oder JSON an das Ziel übergibt. Unter Verwendung des vorherigen Ereignisses und Eingabepfads wird das Ereignis in den folgenden Beispielen für Eingabevorlagen in die Beispielausgabe transformiert, bevor es an ein Ziel weitergeleitet wird.

Beschreibung Vorlage Output
Einfache Zeichenfolge
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

Zeichenfolge mit Anführungszeichen, die durch Escape-Zeichen geschützt sind

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

Beachten Sie, dass dies das Verhalten in der EventBridge Konsole ist. In der AWS CLI werden die Schrägstriche durch Escape-Zeichen geschützt. Das Ergebnis lautet "instance "i-0123456789" is in RUNNING".

Einfache JSON

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

JSON mit Zeichenfolgen und Variablen

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

JSON mit einer Mischung aus Variablen und statischen Informationen

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

Einbeziehen von reservierten Variablen in JSON

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

Einbeziehen von reservierten Variablen in eine Zeichenfolge

"<aws.events.rule-name> triggered"
"example triggered"

CloudWatch Amazon-Protokollgruppe

{ "timestamp" : <timestamp>, "message": "instance \"<instance>\" is in <state>" }
{ "timestamp" : 2015-11-11T21:29:54Z, "message": "instance "i-0123456789" is in RUNNING }

Transformation von Eingaben mithilfe der EventBridge API

Informationen zur Verwendung der EventBridge API zur Transformation von Eingaben finden Sie unter Verwenden von Input Transformer, um Daten aus einem Ereignis zu extrahieren und diese Daten in das Ziel einzugeben.

Transformieren von Eingaben mithilfe von AWS CloudFormation

Hinweise zur Verwendung AWS CloudFormation zum Transformieren von Eingaben finden Sie unter AWS::Events::Rule InputTransformer.

Häufige Probleme beim Transformieren von Eingaben

Dies sind einige häufig auftretende Probleme bei der Transformation von Eingaben in EventBridge:

  • Für Zeichenfolgen sind Anführungszeichen erforderlich.

  • Beim Erstellen des JSON-Pfads für Ihre Vorlage erfolgt keine Validierung.

  • Wenn Sie eine Variable angeben, die einem JSON-Pfad entspricht, der im Ereignis nicht vorhanden ist, wird diese Variable nicht erstellt und nicht in der Ausgabe angezeigt.

  • JSON-Eigenschaften wie aws.events.event.json können nur als Wert eines JSON-Felds verwendet werden, nicht inline in anderen Zeichenfolgen.

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

  • Wenn ein JSON-Pfad auf ein JSON-Objekt oder ein JSON-Array verweist, die Variable jedoch in einer Zeichenfolge referenziert wird, werden alle internen Anführungszeichen EventBridge entfernt, um sicherzustellen, dass eine gültige Zeichenfolge vorliegt. Bei einer Variablen, auf die <detail> verwiesen wird$.detail, <detail>würde „Detail is“ beispielsweise dazu führen, dass Anführungszeichen aus dem Objekt EventBridge 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 {"detail": <detail>}.

  • Für Variablen, die Zeichenfolgen darstellen, sind keine Anführungszeichen erforderlich. Sie sind zulässig, fügen aber während der Transformation EventBridge automatisch Anführungszeichen zu Zeichenkettenvariablenwerten hinzu, um sicherzustellen, dass es sich bei der Transformationsausgabe um ein gültiges JSON-Format handelt. EventBridge fügt Variablen, die JSON-Objekte oder -Arrays darstellen, keine Anführungszeichen hinzu. Fügen Sie für Variablen, die JSON-Objekte oder -Arrays darstellen, keine Anführungszeichen hinzu.

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

    { "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }

    Das Ergebnis ist gültiges JSON mit den richtigen Anführungszeichen:

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Bei (Nicht-JSON-) Textausgabe als mehrzeilige Zeichenfolgen setzen Sie jede einzelne Zeile in Ihrer Eingabevorlage in doppelte Anführungszeichen.

    Wenn Sie beispielsweise Amazon Inspector Finding-Ereignisse mit dem folgenden Ereignismuster abgleichen würden:

    { "detail": { "severity": ["HIGH"], "status": ["ACTIVE"] }, "detail-type": ["Inspector2 Finding"], "source": ["inspector2"] }

    Und mit dem folgenden Eingabepfad:

    { "account": "$.detail.awsAccountId", "ami": "$.detail.resources[0].details.awsEc2Instance.imageId", "arn": "$.detail.findingArn", "description": "$.detail.description", "instance": "$.detail.resources[0].id", "platform": "$.detail.resources[0].details.awsEc2Instance.platform", "region": "$.detail.resources[0].region", "severity": "$.detail.severity", "time": "$.time", "title": "$.detail.title", "type": "$.detail.type" }

    Sie könnten die folgende Eingabevorlage verwenden, um eine mehrzeilige Zeichenkettenausgabe zu generieren:

    "<severity> severity finding <title>" "Description: <description>" "ARN: \"<arn>\"" "Type: <type>" "AWS Account: <account>" "Region: <region>" "EC2 Instance: <instance>" "Platform: <platform>" "AMI: <ami>"