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 fontes de eventos do Amazon SMQ.
nota
Os mapeamentos das origens dos eventos do Amazon SQS é compatível apenas com filtragem na chave body
.
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. |