Usar a filtragem de eventos com uma origem de eventos do Amazon SQS
É 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 Amazon MSK.
Conceitos básicos de filtragem de eventos do Amazon SQS
Suponha que sua fila do Amazon SQS contenha mensagens no formato JSON a seguir.
{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }
Um exemplo de registro para essa fila seria como a seguir.
{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }
Para filtrar com base no conteúdo de suas mensagens do Amazon SQS, use a chave body
no registro de mensagens do Amazon SQS. Suponha que você queira processar somente os registros onde o RequestCode
na sua mensagem do Amazon SQS seja “BBBB”. O objeto FilterCriteria
seria como a seguir.
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }
Para maior clareza, aqui está o valor de Pattern
do filtro expandido em JSON simples.
{ "body": { "RequestCode": [ "BBBB" ] } }
É possível adicionar seu filtro usando o console, a AWS CLI ou um modelo do AWS SAM.
Suponha que você queira que sua função processe somente os registros onde RecordNumber
seja maior que 9999. O objeto FilterCriteria
seria como a seguir.
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }
Para maior clareza, aqui está o valor de Pattern
do filtro expandido em JSON simples.
{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }
É possível adicionar seu filtro usando o console, a AWS CLI ou um modelo do AWS SAM.
No Amazon SQS, o corpo da mensagem pode ser qualquer string. Porém, isso pode ser problemático se os FilterCriteria
esperarem que o body
esteja em um formato JSON válido. O cenário oposto também é verdadeiro: se o corpo da mensagem recebida estiver em formato JSON, mas seus critérios de filtragem esperarem que o body
seja uma string simples, isso poderá levar um comportamento não pretendido.
Para evitar esse problema, certifique-se de que o formato do corpo nos seus FilterCriteria
corresponda ao formato esperado do body
nas mensagens que você receber da fila. Antes de filtrar suas mensagens, o Lambda avalia automaticamente o formato do corpo da mensagem recebida e do seu padrão de filtro para o body
. Se houver incompatibilidade, o Lambda descartará a mensagem. A tabela a seguir resume essa avaliação:
Formato do body da mensagem recebida |
Formato do body do padrão de filtro |
Ação resultante |
---|---|---|
String simples |
String simples |
Filtros do Lambda com base em seus critérios de filtro. |
String simples |
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. |
String simples |
JSON válido |
O Lambda descarta a mensagem. |
JSON válido |
String simples |
O Lambda descarta a mensagem. |
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 |
JSON válido |
Filtros do Lambda com base em seus critérios de filtro. |