Usar a filtragem de eventos com uma origem de eventos do DynamoDB
É possível usar filtragem de eventos para controlar quais registros de um stream ou fila que o Lambda enviará para a função. Para obter informações gerais sobre como a filtragem de eventos funciona, consulte Controlar quais eventos o Lambda envia para a função.
Esta seção tem como foco a filtragem de eventos para as origens de eventos do DynamoDB.
Tópicos
evento do DynamoDB
Suponha que você tenha uma tabela do DynamoDB com chave primária CustomerName
e atributos AccountManager
e PaymentTerms
. Veja a seguir um exemplo de registro do stream da sua tabela do 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 com base nos valores de chave e atributo em sua tabela do DynamoDB, use a chave dynamodb
no registro. As seções a seguir fornecem exemplos de diferentes tipos de filtro.
Como filtrar com chaves de tabela
Suponha que você queira que sua função processe somente os registros em que a chave primária CustomerName
seja “AnyCompany Industries”. O objeto FilterCriteria
seria como a seguir.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"Keys\" : { \"CustomerName\" : { \"S\" : [ \"AnyCompany Industries\" ] } } } }" } ] }
Para maior clareza, aqui está o valor de Pattern
do filtro expandido em JSON simples.
{ "dynamodb": { "Keys": { "CustomerName": { "S": [ "AnyCompany Industries" ] } } } }
É possível adicionar seu filtro usando o console, a AWS CLI ou um modelo do AWS SAM.
Como filtrar com atributos de tabela
Com o DynamoDB, você também pode usar as teclas NewImage
e OldImage
para filtrar os valores dos atributos. Suponha que você queira filtrar registros em que o atributo AccountManager
na imagem mais recente da tabela seja “Pat Candella” ou “Shirley Rodriguez”. O objeto FilterCriteria
seria como a seguir.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\", \"Shirley Rodriguez\" ] } } } }" } ] }
Para maior clareza, aqui está o valor de Pattern
do filtro expandido em JSON simples.
{ "dynamodb": { "NewImage": { "AccountManager": { "S": [ "Pat Candella", "Shirley Rodriguez" ] } } } }
É possível adicionar seu filtro usando o console, a AWS CLI ou um modelo do AWS SAM.
Como filtrar com expressões boolianas
Você também pode criar filtros usando expressões boolianas AND. Essas expressões podem incluir os parâmetros de chave e de atributo da tabela. Suponha que você queira filtrar registros em que o valor de NewImage
de AccountManager
seja “Pat Candella” e o valor de OldImage
seja “Terry Whitlock”. O objeto FilterCriteria
seria como a seguir.
{ "Filters": [ { "Pattern": "{ \"dynamodb\" : { \"NewImage\" : { \"AccountManager\" : { \"S\" : [ \"Pat Candella\" ] } } } , \"dynamodb\" : { \"OldImage\" : { \"AccountManager\" : { \"S\" : [ \"Terry Whitlock\" ] } } } }" } ] }
Para maior clareza, aqui está o valor de Pattern
do filtro expandido em JSON simples.
{ "dynamodb" : { "NewImage" : { "AccountManager" : { "S" : [ "Pat Candella" ] } } }, "dynamodb": { "OldImage": { "AccountManager": { "S": [ "Terry Whitlock" ] } } } }
É possível adicionar seu filtro usando o console, a AWS CLI ou um modelo do AWS SAM.
nota
A filtragem de eventos do DynamoDB não oferece suporte ao uso de operadores numéricos (igualdade numérica e intervalo numérico). Mesmo que os itens em sua tabela sejam armazenados como números, esses parâmetros são convertidos em strings no objeto do registro JSON.
Usar o operador Exists
Devido à forma de estruturação dos objetos de evento JSON do DynamoDB, o uso do operador Exists requer cuidados especiais. O operador Exists só funciona em nós terminais no evento JSON. Portanto, se seu padrão de filtro usar Exists para testar um nó intermediário, ele não funcionará. Considere o seguinte item de tabela do DynamoDB:
{ "UserID": {"S": "12345"}, "Name": {"S": "John Doe"}, "Organizations": {"L": [ {"S":"Sales"}, {"S":"Marketing"}, {"S":"Support"} ] } }
Talvez você queira criar um padrão de filtro como o seguinte, que teste os eventos que contenham "Organizations"
:
{ "dynamodb" : { "NewImage" : { "Organizations" : [ { "exists": true } ] } } }
No entanto, esse padrão de filtro nunca retornaria uma correspondência porque "Organizations"
não é um nó terminal. O exemplo a seguir mostra como usar corretamente o operador Exists para estruturar o padrão de filtro desejado:
{ "dynamodb" : { "NewImage" : {"Organizations": {"L": {"S": [ {"exists": true } ] } } } } }
Formato JSON para filtragem do DynamoDB
Para filtrar corretamente eventos de origens do DynamoDB, tanto o campo de dados como os critérios de filtro para o campo de dados (dynamodb
) devem estar em formato JSON válido. Se algum desses campos não estiver em um formato JSON válido, o Lambda descartará a mensagem ou emitirá uma exceção. A tabela a seguir resume o comportamento específico:
Formato dos dados recebidos | Formato de filtro padrão para propriedades de dados | Ação resultante |
---|---|---|
JSON válido |
JSON válido |
Filtros do Lambda com base em seus critérios de filtro. |
JSON válido |
Nenhum padrão de filtro para propriedades de dados |
Filtros do Lambda (somente nas outras propriedades de metadados) com base nos seus critérios de filtro. |
JSON válido |
Não JSON |
O Lambda emite uma exceção no momento da criação ou atualização do mapeamento da fonte de eventos. O padrão de filtro para propriedades de dados deve estar em um formato JSON válido. |
Não JSON |
JSON válido |
O Lambda descarta o registro. |
Não JSON |
Nenhum padrão de filtro para propriedades de dados |
Filtros do Lambda (somente nas outras propriedades de metadados) com base nos seus critérios de filtro. |
Não JSON |
Não JSON |
O Lambda emite uma exceção no momento da criação ou atualização do mapeamento da fonte de eventos. O padrão de filtro para propriedades de dados deve estar em um formato JSON válido. |