Uso del filtrado de eventos con una fuente de eventos de DynamoDB
Puede utilizar el filtrado de eventos para controlar qué registros de un flujo o una cola envía Lambda a su función. Para obtener información general sobre cómo funciona el filtrado de eventos, consulte Controle qué eventos envía Lambda a la función.
Esta sección se centra en el filtrado de eventos para las fuentes de eventos de DynamoDB.
Temas
evento de DynamoDB
Supongamos que tiene una tabla de DynamoDB con la clave principal CustomerName
y los atributos AccountManager
y PaymentTerms
. El siguiente es un registro de ejemplo de flujo de la tabla de 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" } } }
Para filtrar en función de los valores de clave y atributos en la tabla de DynamoDB, utilice la clave dynamodb
del registro. En las siguientes secciones, se muestran ejemplos de diferentes tipos de filtros.
Filtrar con claves de tabla
Supongamos que desea que su función procese únicamente los registros en los que la clave principal CustomerName
sea “AnyCompany Industries”. El objeto FilterCriteria
sería el siguiente.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }" } ] }
Para mayor claridad, este es el valor del Pattern
del filtro ampliado en JSON no cifrado.
{ "dynamodb": { "Keys": { "CustomerName": { "S": [ "AnyCompany Industries" ] } } } }
Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.
Filtrar con atributos de tabla
Con DynamoDB, también puede utilizar las claves NewImage
y OldImage
para filtrar por los valores de los atributos. Supongamos que desea filtrar los registros en los que el atributo AccountManager
de la última imagen de la tabla sea “Pat Candella” o “Shirley Rodriguez”. El objeto FilterCriteria
sería el siguiente.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }" } ] }
Para mayor claridad, este es el valor del Pattern
del filtro ampliado en JSON no cifrado.
{ "dynamodb": { "NewImage": { "AccountManager": { "S": [ "Pat Candella", "Shirley Rodriguez" ] } } } }
Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.
Filtrar con expresiones booleanas
También puede crear filtros mediante expresiones booleanas AND. Estas expresiones pueden incluir tanto los parámetros de clave como los de atributo de la tabla. Supongamos que desea filtrar los registros en los que el valor NewImage
de AccountManager
es “Pat Candella” y el valor OldImage
es “Terry Whitlock”. El objeto FilterCriteria
sería el siguiente.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } }" } ] }
Para mayor claridad, este es el valor del Pattern
del filtro ampliado en JSON no cifrado.
{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } }, "dynamodb": { "OldImage": { "AccountManager": { "S": [ "Terry Whitlock" ] } } } }
Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.
nota
El filtrado de eventos de DynamoDB no es compatible con el uso de operadores numéricos (equivalentes numéricos e intervalo numérico). Incluso si los elementos de la tabla se almacenan como números, estos parámetros se convierten en cadenas en el objeto de registro JSON.
Uso del operador Exists
Debido a la forma en que están estructurados los objetos de eventos JSON de DynamoDB, el uso del operador Exists requiere un cuidado especial. El operador Exists solo funciona en los nodos hoja en el evento JSON, por lo que si el patrón de filtro usa Exists para probar la presencia de un nodo intermedio, no funcionará. Considere el siguiente elemento de la tabla de DynamoDB:
{ "UserID": {"S": "12345"}, "Name": {"S": "John Doe"}, "Organizations": {"L": [ {"S":"Sales"}, {"S":"Marketing"}, {"S":"Support"} ] } }
Es posible que deba crear un patrón de filtro como el siguiente para comprobar si hay eventos que contengan "Organizations"
:
{ "dynamodb" : { "NewImage" : { "Organizations" : [ { "exists": true } ] } } }
Sin embargo, este patrón de filtro nunca devolvería una coincidencia porque "Organizations"
no es un nodo hoja. El siguiente ejemplo muestra cómo utilizar correctamente el operador Exists para crear el patrón de filtro deseado:
{ "dynamodb" : { "NewImage" : {"Organizations": {"L": {"S": [ {"exists": true } ] } } } } }
Formato JSON para filtrado de DynamoDB
Para filtrar correctamente los eventos de orígenes de DynamoDB, tanto el campo de datos como los criterios de filtro del campo de datos (dynamodb
) deben estar en un formato JSON válido. Si el formato JSON de alguno de los campos no es válido, Lambda elimina el mensaje o genera una excepción. En la siguiente tabla se resume el comportamiento específico:
Formato de los datos entrantes | Formato del patrón de filtro para las propiedades de datos | Acción resultante |
---|---|---|
JSON válido |
JSON válido |
Lambda filtra en función de los criterios de filtro. |
JSON válido |
Sin patrón de filtro para las propiedades de datos |
Lambda filtra (solo en las demás propiedades de metadatos) en función de los criterios de filtro. |
JSON válido |
No JSON |
Lambda genera una excepción al crear o actualizar la asignación de origen de eventos. El formato JSON del patrón de filtro de las propiedades de datos debe ser válido. |
No JSON |
JSON válido |
Lambda elimina el registro. |
No JSON |
Sin patrón de filtro para las propiedades de datos |
Lambda filtra (solo en las demás propiedades de metadatos) en función de los criterios de filtro. |
No JSON |
No JSON |
Lambda genera una excepción al crear o actualizar la asignación de origen de eventos. El formato JSON del patrón de filtro de las propiedades de datos debe ser válido. |