Filtrare gli eventi da una fonte di eventi Amazon MQ - AWS Lambda

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à.

Filtrare gli eventi da una fonte di eventi Amazon MQ

Puoi utilizzare il filtraggio degli eventi per controllare quali record di un flusso o di una coda Lambda invia alla funzione. Per informazioni generali su come funziona il filtraggio degli eventi, consulta. Controlla quali eventi Lambda invia alla tua funzione

Questa sezione si concentra sul filtraggio degli eventi per le sorgenti di eventi Amazon MQ.

Nozioni di base sul filtraggio degli eventi di Amazon MQ

Supponiamo che la coda di messaggi di Amazon MQ contenga messaggi in JSON formato valido o come stringhe semplici. Un record di esempio sarebbe simile al seguente, con i dati convertiti in una stringa codificata Base64 nel campo data.

ActiveMQ
{ "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-east-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 1, "correlationId": "myJMSCoID", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"QUJDOkFBQUE=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } }
RabbitMQ
{ "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 }, "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" }

Per i broker sia Active MQ sia Rabbit MQ, puoi utilizzare il filtraggio degli eventi per filtrare i record utilizzando la chiave data. Supponiamo che la coda di Amazon MQ contenga messaggi nel seguente JSON formato.

{ "timeout": 0, "IPAddress": "203.0.113.254" }

Per filtrare solo i record in cui il campo timeout è maggiore di 0, l'oggetto FilterCriteria sarebbe il seguente.

{ "Filters": [ { "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }" } ] }

Per maggiore chiarezza, ecco il valore del filtro Pattern espanso in chiaro. JSON

{ "data": { "timeout": [ { "numeric": [ ">", 0 ] } ] } }

Puoi aggiungere il filtro utilizzando la console AWS CLI o un AWS SAM modello.

Console

Per aggiungere questo filtro utilizzando la console, segui le istruzioni riportate in Collegamento dei criteri di filtro a una mappatura dell'origine evento (console) e inserisci la seguente stringa per i criteri di filtraggio.

{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
AWS CLI

Per creare una nuova mappatura dell'origine degli eventi con questi criteri di filtro utilizzando AWS Command Line Interface (AWS CLI), esegui il comando seguente.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'

Per aggiungere questi criteri di filtraggio a una mappatura dell'origine degli eventi esistente, esegui il comando seguente.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'

Per aggiungere questi criteri di filtraggio a una mappatura dell'origine degli eventi esistente, esegui il comando seguente.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
AWS SAM

Per aggiungere questo filtro utilizzando AWS SAM, aggiungete il seguente frammento al YAML modello per la fonte dell'evento.

FilterCriteria: Filters: - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'

Con Amazon MQ, puoi anche filtrare i record in cui il messaggio è una stringa semplice. Supponiamo di voler elaborare solo i record in cui il messaggio inizia con "Risultato: ". L'oggetto FilterCriteria dovrebbe avere la struttura seguente.

{ "Filters": [ { "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }" } ] }

Per maggiore chiarezza, ecco il valore del filtro Pattern espanso in chiaro. JSON

{ "data": [ { "prefix": "Result: " } ] }

Puoi aggiungere il filtro utilizzando la console AWS CLI o un AWS SAM modello.

Console

Per aggiungere questo filtro utilizzando la console, segui le istruzioni riportate in Collegamento dei criteri di filtro a una mappatura dell'origine evento (console) e inserisci la seguente stringa per i criteri di filtraggio.

{ "data" : [ { "prefix": "Result: " } ] }
AWS CLI

Per creare una nuova mappatura dell'origine degli eventi con questi criteri di filtro utilizzando AWS Command Line Interface (AWS CLI), esegui il comando seguente.

aws lambda create-event-source-mapping \ --function-name my-function \ --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'

Per aggiungere questi criteri di filtraggio a una mappatura dell'origine degli eventi esistente, esegui il comando seguente.

aws lambda update-event-source-mapping \ --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \ --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
AWS SAM

Per aggiungere questo filtro utilizzando AWS SAM, aggiungete il seguente frammento al YAML modello per la fonte dell'evento.

FilterCriteria: Filters: - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'

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

Formato messaggio in arrivo Formato del modello di filtro per le proprietà di messaggi Operazione risultante

Stringa normale

Stringa normale

Filtri Lambda in base ai criteri di filtro.

Stringa normale

Nessun modello di filtro per le proprietà dei dati

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

Stringa normale

Valido JSON

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

Valido JSON

Stringa normale

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

Valido JSON

Nessun modello di filtro per le proprietà dei dati

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

Valido JSON

Valido JSON

Filtri Lambda in base ai criteri di filtro.

Stringa codificata non UTF -8

JSON, stringa semplice o nessun modello

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