Filtraggio Amazon EventBridge Pipes - 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à.

Filtraggio Amazon EventBridge Pipes

Con EventBridge Pipes, puoi filtrare gli eventi di una determinata fonte ed elaborarne solo un sottoinsieme. Questo filtraggio funziona allo stesso modo del filtraggio su un bus di EventBridge eventi o sulla mappatura della sorgente di eventi Lambda, utilizzando modelli di eventi. Per ulteriori informazioni sui modelli di eventi, consulta Modelli di EventBridge eventi Amazon.

Un oggetto FilterCriteria criterio di filtro è una struttura costituita da un elenco di filtri (Filters). Ogni filtro è una struttura che definisce un modello di filtro (Pattern). Un Pattern è una rappresentazione di stringa di una regola di filtro JSON. L'aspetto di un oggetto FilterCriteria è simile a quanto illustrato nell'esempio seguente:

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

Per una maggiore chiarezza, ecco il valore del Pattern del filtro espanso in JSON semplice:

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

Le parti principali di un oggetto FilterCriteria sono le proprietà di metadati e le proprietà di dati.

  • Le proprietà di metadati sono i campi dell'oggetto evento. Nell'esempio, FilterCriteria.Metadata1 si riferisce a una proprietà di metadati.

  • Le proprietà di dati sono i campi dell'oggetto evento. Nell'esempio, FilterCriteria.Data1 si riferisce a una proprietà di dati.

Ad esempio, supponiamo che il tuo flusso Kinesis contenga un evento come questo:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

Quando l'evento attraversa la tua pipe, avrà il seguente aspetto con il campo data con codifica base64:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

Le proprietà di metadati nell'evento Kinesis sono qualsiasi campo esterno all'oggettodata, ad esempio partitionKey o sequenceNumber.

Le proprietà di metadati dell'evento Kinesis sono i campi nell'oggetto data, ad esempio City o Temperature.

Quando applichi i filtri per trovare una corrispondenza con questo evento, puoi farlo sui campi decodificati. Ad esempio, per filtrare in base a partitionKey e City devi utilizzare il seguente filtro:

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }

Quando crei filtri per eventi, EventBridge Pipes può accedere al contenuto degli eventi. Questo contenuto può avere caratteri di escape JSON, come il campo body di Amazon SQS, o la codifica base64, come il campo data di Kinesis. Se i dati sono JSON valido, i modelli di input o i percorsi JSON per i parametri di destinazione possono fare riferimento direttamente al contenuto. Ad esempio, se un'origine di evento Kinesis è JSON valido, puoi fare riferimento a una variabile utilizzando <$.data.someKey>.

Quando si creano modelli di eventi, è possibile filtrare in base ai campi inviati dall'API di origine e non ai campi aggiunti dall'operazione di polling. I seguenti campi non possono essere utilizzati nei modelli di eventi:

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

Campi dati e messaggio

Ogni sorgente EventBridge Pipe contiene un campo che contiene il messaggio o i dati principali. Questi campi sono denominati campi messaggio o campi dati. Sono speciali perché possono avere caratteri di escape JSON o la codifica base64, ma quando sono JSON valido possono essere filtrati con modelli JSON come se il corpo non avesse caratteri di escape. Il contenuto di questi campi può essere utilizzato senza problemi in trasformatori di input.

Filtro corretto dei messaggi Amazon SQS

Se un messaggio Amazon SQS non soddisfa i tuoi criteri di filtro, rimuove EventBridge automaticamente il messaggio dalla coda. Non è necessario eliminare manualmente questi messaggi in Amazon SQS.

Per Amazon SQS il messaggio body può essere qualsiasi stringa. Tuttavia, questo può essere problematico se il FilterCriteria si aspetta che body sia in un formato JSON valido. Anche lo scenario inverso è vero: se il messaggio in arrivo body è in un formato JSON valido ma i criteri di filtro si aspettano che body sia una stringa semplice, si ha un comportamento non previsto.

Per evitare questo problema, assicurati che il formato di body in FilterCriteria corrisponda al formato previsto di body nei messaggi ricevuti dalla coda. Prima di filtrare i messaggi, valuta EventBridge automaticamente il formato del messaggio in arrivo body e il modello di filtro per. body Se c'è una mancata corrispondenza, EventBridge elimina il messaggio. La tabella seguente riepiloga questa valutazione:

Formato body messaggio in arrivo Formato body modello di filtro Operazione risultante

Stringa normale

Stringa normale

EventBridge filtra in base ai tuoi criteri di filtro.

Stringa normale

Nessun modello di filtro per le proprietà dei dati

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

Stringa normale

JSON valido

EventBridge rilascia il messaggio.

JSON valido

Stringa normale

EventBridge rilascia il messaggio.

JSON valido

Nessun modello di filtro per le proprietà dei dati

EventBridge filtra (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

JSON valido

JSON valido

EventBridge filtri in base ai tuoi criteri di filtro.

Se non lo includi body come parte del tuoFilterCriteria, EventBridge salta questo controllo.

Filtraggio corretto dei messaggi Kinesis e Dynamo DB

Dopo che i criteri di filtro elaborano un record Kinesis o DynamoDB, l'iteratore di flussi ignora tale record. Se il registro non soddisfa i criteri di filtro, non è necessario eliminare manualmente il record dall'origine dell'evento. Dopo il periodo di conservazione, Kinesis e DynamoDB eliminano automaticamente questi vecchi record. Se vuoi che i record vengano eliminati prima, consulta Modifica del periodo di conservazione dei dati.

Per filtrare correttamente gli eventi dalle origini degli eventi di flusso, sia il campo dati che i criteri di filtro per il campo dati devono essere in formato JSON valido (per Kinesis, il campo dati è data, per Dynamo DB, il campo dati è dynamodb). Se uno dei due campi non è in un formato JSON valido, EventBridge elimina il messaggio o genera un'eccezione. La tabella seguente riepiloga il comportamento specifico:

Formato dei dati in entrata (data o dynamodb) Formato del modello di filtro per le proprietà di dati Operazione risultante

JSON valido

JSON valido

EventBridge filtra in base ai tuoi criteri di filtro.

JSON valido

Nessun modello di filtro per le proprietà dei dati

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

JSON valido

Non-JSON

EventBridge genera un'eccezione al momento della pipe o dell'aggiornamento. Il modello di filtro per le proprietà dei dati deve essere in un formato JSON valido.

Non-JSON

JSON valido

EventBridge elimina il record.

Non-JSON

Nessun modello di filtro per le proprietà dei dati

EventBridge filtra (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

Non-JSON

Non-JSON

EventBridge genera un'eccezione al momento della creazione o dell'aggiornamento della pipe. Il modello di filtro per le proprietà dei dati deve essere in un formato JSON valido.

Filtro corretto dei messaggi di Streaming gestito da Amazon per Apache Kafka, Apache Kafka autogestito e Amazon MQ

Per le origini Amazon MQ, il campo del messaggio è data. Per le origini Apache Kafka (Amazon MSK e Apache Kafka autogestito), sono disponibili due campi di messaggio: key e value.

EventBridge elimina i messaggi che non corrispondono a tutti i campi inclusi nel filtro. Per Apache Kafka, esegue il EventBridge commit degli offset per i messaggi corrispondenti e non corrispondenti dopo aver richiamato correttamente la funzione. Per Amazon MQ, EventBridge riconosce i messaggi corrispondenti dopo aver richiamato correttamente la funzione e riconosce i messaggi non corrispondenti quando li filtra.

I messaggi Kafka e Amazon MQ devono essere stringhe codificate UTF-8, stringhe semplici o in formato JSON. Questo perché EventBridge decodifica gli array di byte Apache Kafka e Amazon MQ in UTF-8 prima di applicare i criteri di filtro. Se i tuoi messaggi utilizzano un'altra codifica, come UTF-16 o ASCII, o se il formato del messaggio non corrisponde al formato, elabora solo i filtri dei metadati. FilterCriteria EventBridge La tabella seguente riepiloga il comportamento specifico:

Formato del messaggio in arrivo (data o key e value) Formato del modello di filtro per le proprietà di messaggi Operazione risultante

Stringa normale

Stringa normale

EventBridge filtri in base ai tuoi criteri di filtro.

Stringa normale

Nessun modello di filtro per le proprietà dei dati

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

Stringa normale

JSON valido

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

JSON valido

Stringa normale

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

JSON valido

Nessun modello di filtro per le proprietà dei dati

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

JSON valido

JSON valido

EventBridge filtri in base ai tuoi criteri di filtro.

Stringa senza codifica UTF-8

JSON, stringa semplice o nessun modello

EventBridge filtri (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.

Differenze tra Lambda ESM e Pipes EventBridge

Quando filtrano gli eventi, Lambda ESM EventBridge e Pipes funzionano generalmente allo stesso modo. La differenza principale è che il campo eventSourceKey non è presente nei payload ESM.