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à.
Puoi utilizzare il filtraggio degli eventi per controllare quali record di un flusso o di una coda Lambda invia alla funzione. Per informazioni generali sul funzionamento del filtraggio eventi, consulta Controllare gli eventi che Lambda invia alla funzione.
In questa sezione viene descritto il filtraggio degli eventi per le origini eventi DynamoDB.
Argomenti
Evento DynamoDB
Supponiamo di avere una tabella DynamoDB con la chiave primaria CustomerName
e gli attributi AccountManager
e PaymentTerms
. Di seguito è riportato un esempio di record dal flusso della tabella DynamoDB.
{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"ApproximateCreationDateTime": "1678831218.0",
"Keys": {
"CustomerName": {
"S": "AnyCompany Industries"
},
"NewImage": {
"AccountManager": {
"S": "Pat Candella"
},
"PaymentTerms": {
"S": "60 days"
},
"CustomerName": {
"S": "AnyCompany Industries"
}
},
"SequenceNumber": "111",
"SizeBytes": 26,
"StreamViewType": "NEW_IMAGE"
}
}
}
Per filtrare in base ai valori della chiave e degli attributi nella tabella DynamoDB, utilizza la chiave dynamodb
nel record. Le seguenti sezioni forniscono esempi per diversi tipi di filtri.
Filtraggio con chiavi di tabella
Supponiamo che tu voglia che la tua funzione elabori solo i record in cui la chiave primaria CustomerName
è «AnyCompany Industries». L'oggetto FilterCriteria
dovrebbe avere la struttura seguente.
{
"Filters": [
{
"Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }"
}
]
}
Per una maggiore chiarezza, ecco il valore del Pattern
del filtro espanso in JSON semplice.
{
"dynamodb": {
"Keys": {
"CustomerName": {
"S": [ "AnyCompany Industries" ]
}
}
}
}
Puoi aggiungere il filtro utilizzando la console AWS CLI o un AWS SAM modello.
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.
{ "dynamodb" : { "Keys" : { "CustomerName" : { "S" : [ "AnyCompany Industries" ] } } } }
Filtraggio con attributi di tabella
Con DynamoDB, puoi anche utilizzare le chiavi NewImage
e OldImage
per filtrare i valori degli attributi. Supponiamo di voler filtrare i record in cui l'attributo AccountManager
nell'ultima immagine della tabella è "Pat Candella" o "Shirley Rodriguez". L'oggetto FilterCriteria
dovrebbe avere la struttura seguente.
{
"Filters": [
{
"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }"
}
]
}
Per una maggiore chiarezza, ecco il valore del Pattern
del filtro espanso in JSON semplice.
{
"dynamodb": {
"NewImage": {
"AccountManager": {
"S": [ "Pat Candella", "Shirley Rodriguez" ]
}
}
}
}
Puoi aggiungere il filtro utilizzando la console o un modello. AWS CLI AWS SAM
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.
{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella", "Shirley Rodriguez" ] } } } }
Filtraggio con espressioni booleane
È inoltre possibile creare filtri utilizzando espressioni booleane AND. Queste espressioni possono includere sia i parametri chiave sia quelli degli attributi della tabella. Supponiamo che tu voglia filtrare i record in cui il valore di NewImage
di AccountManager
è "Pat Candella" e il valore di OldImage
è "Terry Whitlock". L'oggetto FilterCriteria
dovrebbe avere la struttura seguente.
{
"Filters": [
{
"Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } }"
}
]
}
Per una maggiore chiarezza, ecco il valore del Pattern
del filtro espanso in JSON semplice.
{
"dynamodb" : {
"NewImage" : {
"AccountManager" : {
"S" : [
"Pat Candella"
]
}
}
},
"dynamodb": {
"OldImage": {
"AccountManager": {
"S": [
"Terry Whitlock"
]
}
}
}
}
Puoi aggiungere il filtro utilizzando la console o un modello. AWS CLI AWS SAM
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.
{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } } , "dynamodb" : { "OldImage" : { "AccountManager" : { "S" : [ "Terry Whitlock" ] } } } }
Nota
Il filtraggio degli eventi DynamoDB non supporta l'uso di operatori numerici (uguali numerici e intervallo numerico). Anche se gli elementi della tabella sono memorizzati come numeri, questi parametri vengono convertiti in stringhe nell'oggetto record JSON.
Utilizzo dell'operatore Exists
A causa del modo in cui sono strutturati gli oggetti evento JSON di DynamoDB, l'utilizzo dell'operatore Exists richiede particolare attenzione. L'operatore Exists funziona solo sui nodi foglia nel JSON dell'evento, quindi se il modello di filtro utilizza Exists per testare un nodo intermedio, non funzionerà. Considera il seguente elemento della tabella DynamoDB:
{
"UserID": {"S": "12345"},
"Name": {"S": "John Doe"},
"Organizations": {"L": [
{"S":"Sales"},
{"S":"Marketing"},
{"S":"Support"}
]
}
}
Potresti voler creare uno schema di filtro come il seguente per verificare la presenza di eventi contenenti "Organizations"
:
{ "dynamodb" : { "NewImage" : { "Organizations" : [ { "exists": true } ] } } }
Tuttavia, questo modello di filtro non restituirebbe mai una corrispondenza perché "Organizations"
non è un nodo foglia. L'esempio seguente mostra come utilizzare correttamente l'operatore Exists per creare lo schema di filtro desiderato:
{ "dynamodb" : { "NewImage" : {"Organizations": {"L": {"S": [ {"exists": true } ] } } } } }
Formato JSON per il filtro DynamoDB
Per filtrare correttamente gli eventi da origini DynamoDB, sia il campo dati sia i criteri di filtraggio per il campo dati (dynamodb
) devono essere in un formato JSON valido. Se uno dei due campi non è in un formato JSON valido, Lambda rilascia il messaggio o genera un'eccezione. La tabella seguente riepiloga il comportamento specifico:
Formato dei dati in entrata | Formato del modello di filtro per le proprietà di dati | Operazione risultante |
---|---|---|
JSON valido |
JSON valido |
Filtri Lambda in base ai criteri di filtro. |
JSON valido |
Nessun modello di filtro per le proprietà dei dati |
Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro. |
JSON valido |
Non-JSON |
Lambda genera un'eccezione al momento della creazione o dell'aggiornamento della mappatura dell'origine evento. Il modello di filtro per le proprietà dei dati deve essere in un formato JSON valido. |
Non-JSON |
JSON valido |
Lambda rilascia il registro. |
Non-JSON |
Nessun modello di filtro per le proprietà dei dati |
Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro. |
Non-JSON |
Non-JSON |
Lambda genera un'eccezione al momento della creazione o dell'aggiornamento della mappatura dell'origine evento. Il modello di filtro per le proprietà dei dati deve essere in un formato JSON valido. |