Trasformazione degli EventBridge input di Amazon - Amazon EventBridge

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Trasformazione degli EventBridge input di Amazon

Puoi personalizzare il testo di un evento prima di EventBridge passare le informazioni al destinatario di una regola. Utilizzando il trasformatore di input nella console o nell'API, definisci le variabili che utilizzano il percorso JSON per fare riferimento ai valori nell'origine dell'evento originale. L'evento trasformato viene inviato a una destinazione anziché all'evento originale. Tuttavia, i parametri di percorso dinamici devono fare riferimento all'evento originale, non all'evento trasformato. Puoi definire fino a 100 variabili, assegnando a ciascuna un valore dall'input. Puoi quindi utilizzare queste variabili nel modello di input nel formato <nome-variabile>.

Per un tutorial sull'uso del trasformatore di input, consulta Tutorial: utilizzo del trasformatore di input per personalizzare gli elementi che EventBridge passa alla destinazione di un evento.

Nota

EventBridge non supporta tutta la sintassi di JSON Path e la valuta in fase di esecuzione. La sintassi supportata include:

  • notazione a punti (ad esempio, $.detail)

  • trattini

  • caratteri di sottolineatura

  • caratteri alfanumerici

  • indici array

  • caratteri jolly (*)

Variabili predefinite

Esistono variabili predefinite che puoi utilizzare senza definire un percorso JSON. Queste variabili sono riservate e non puoi creare variabili con questi nomi:

  • aws.events.rule-arn— L'Amazon Resource Name (ARN) della EventBridge regola.

  • aws.events.rule-name— Il nome della EventBridge regola.

  • aws.events.event.ingestion-time— L'ora in cui l'evento è stato ricevuto da EventBridge. Si tratta di un timestamp ISO 8601. Questa variabile è generata da EventBridge e non può essere sovrascritta.

  • aws.events.event: il payload dell'evento originale in formato JSON (senza il campo detail). Può essere utilizzato solo come valore per un campo JSON, poiché il relativo contenuto non ha caratteri di escape.

  • aws.events.event.json: il payload completo dell'evento originale in formato JSON. (con il campo detail). Può essere utilizzato solo come valore per un campo JSON, poiché il relativo contenuto non ha caratteri di escape.

Esempi di trasformazione di input

Di seguito è riportato un esempio di evento Amazon EC2.

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

Quando definisci una regola nella console, seleziona l'opzione Input Transformer (Trasformatore di input) in Configure input (Configura input). Questa opzione visualizza due caselle di testo: una per Input Path (Percorso di input) e una per Input Template (Modello di input).

Percorso di input viene utilizzato per definire le variabili. Utilizza il percorso JSON per fare riferimento a elementi nel tuo evento e archiviare tali valori in variabili. Ad esempio, puoi creare un Input Path (Percorso di input) per fare riferimento ai valori nell'evento di esempio immettendo quanto segue nella prima casella di testo. È inoltre possibile utilizzare parentesi e indici per ottenere elementi dagli array.

Nota

EventBridge sostituisce i trasformatori di input in fase di esecuzione per garantire un output JSON valido. Per questo motivo, inserisci tra virgolette le variabili che fanno riferimento ai parametri di percorso JSON, ma non le variabili che si riferiscono a oggetti o array JSON.

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

In questo modo, si definiscono quattro variabili, <timestamp>, <instance>, <state> e <resource>. Puoi fare riferimento a queste variabili durante la creazione di Input Path (Percorso di input).

Input Template (Modello di input) è un modello per le informazioni che desideri passare alla destinazione. Puoi creare un modello che passa una stringa o un codice JSON alla destinazione. Utilizzando l'evento precedente e Input Path (Percorso di input), i seguenti esempi di Input Template (Modello di input) trasformeranno l'evento nell'output di esempio prima di indirizzarlo a una destinazione.

Descrizione Modello Output
Stringa semplice
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

Stringa con virgolette di escape

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

Nota che questo è il comportamento della console. EventBridge AWS CLI esegue l'escape dei caratteri di barra e il risultato è "instance "i-0123456789" is in RUNNING".

JSON semplice

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

JSON con stringhe e variabili

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

JSON con un mix di variabili e informazioni statiche

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

Inclusione di variabili riservate 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 } }

Inclusione di variabili riservate in una stringa

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

Gruppo di CloudWatch log Amazon

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

Trasformazione dell'input utilizzando l'API EventBridge

Per informazioni sull'utilizzo dell' EventBridge API per trasformare l'input, consulta Utilizzare Input Transformer per estrarre dati da un evento e immettere tali dati nella destinazione.

Trasformazione dell'input utilizzando AWS CloudFormation

Per informazioni sull'utilizzo AWS CloudFormation per trasformare l'input, vedere AWS::Events::Rule InputTransformer.

Problemi comuni con la trasformazione di input

Questi sono alcuni problemi comuni quando si trasforma l'input in EventBridge:

  • Per le stringhe, le virgolette sono obbligatorie.

  • Non vi è alcuna convalida durante la creazione del percorso JSON per il modello.

  • Se specifichi una variabile per la corrispondenza con un percorso JSON che non esiste nell'evento, quella variabile non viene creata e non appare nell'output.

  • Le proprietà JSON come aws.events.event.json possono essere utilizzate solo come valore di un campo JSON, non in linea in altre stringhe.

  • EventBridge non sfugge ai valori estratti da Input Path, quando compila il modello di input per un target.

  • Se un percorso JSON fa riferimento a un oggetto o a un array JSON, ma la variabile è referenziata in una stringa, EventBridge rimuove tutte le virgolette interne per garantire una stringa valida. Ad esempio, per una variabile a cui si <detail> punta$.detail, «Detail is<detail>" comporterebbe la EventBridge rimozione delle virgolette dall'oggetto.

    Pertanto, se come output vuoi un oggetto JSON basato su una singola variabile di percorso JSON, devi posizionarlo come chiave. In questo esempio, {"detail": <detail>}.

  • Le virgolette non sono necessarie per le variabili che rappresentano stringhe. Sono consentite, ma aggiungono EventBridge automaticamente le virgolette ai valori delle variabili di stringa durante la trasformazione, per garantire che l'output della trasformazione sia JSON valido. EventBridge non aggiunge virgolette alle variabili che rappresentano oggetti o array JSON. Non aggiungere virgolette alle variabili che rappresentano oggetti o array JSON.

    Ad esempio, il seguente modello di input include variabili che rappresentano sia stringhe che oggetti JSON:

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

    Il risultato è JSON valido con un uso corretto delle virgolette:

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Per l'output di testo (non JSON) come stringhe multilinea, raccogli ogni riga separata del modello di input tra virgolette doppie.

    Ad esempio, se stavi Amazon Inspector confrontando gli eventi di Finding con il seguente schema di eventi:

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

    E utilizzando il seguente percorso di input:

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

    È possibile utilizzare il modello di input seguente per generare un output di stringhe multilinea:

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