Uso del filtrado de eventos con una fuente de eventos de Amazon SQS
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 Amazon MSK.
Conceptos básicos de filtrado de eventos de Amazon SQS
Supongamos que su cola de Amazon SQS contiene mensajes en el siguiente formato JSON.
{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }
Un registro de ejemplo para esta cola tendría el siguiente aspecto.
{ "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 en función del contenido de los mensajes de Amazon SQS, utilice la clave body
del registro de mensajes de Amazon SQS. Supongamos que desea procesar solo los registros en los que el RequestCode
del mensaje de Amazon SQS sea “BBBB”. El objeto FilterCriteria
sería el siguiente.
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }
Para mayor claridad, este es el valor del Pattern
del filtro ampliado en JSON no cifrado.
{ "body": { "RequestCode": [ "BBBB" ] } }
Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.
Supongamos que desea que su función procese solo los registros en los que RecordNumber
sea un valor superior a 9999. El objeto FilterCriteria
sería el siguiente.
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }
Para mayor claridad, este es el valor del Pattern
del filtro ampliado en JSON no cifrado.
{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }
Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.
Para Amazon SQS, el cuerpo del mensaje puede ser cualquier cadena. No obstante, esto puede ser problemático si los FilterCriteria
esperan que el formato JSON del body
sea válido. La situación inversa también es problemática: si el cuerpo del mensaje entrante está en formato JSON, pero los criterios de filtro esperan que el body
sea una cadena sin formato, puede producirse un comportamiento no deseado.
Para evitar este problema, asegúrese de que el formato del cuerpo de los FilterCriteria
coincida con el formato esperado del body
de los mensajes que recibe de la cola. Antes de filtrar los mensajes, Lambda evalúa automáticamente el formato del cuerpo del mensaje entrante y del patrón de filtro del body
. Si no coincide, Lambda elimina el mensaje. En la siguiente tabla se resume esta evaluación:
Formato del body del mensaje entrante |
Formato del body del patrón de filtro |
Acción resultante |
---|---|---|
Cadena sin formato |
Cadena sin formato |
Lambda filtra en función de los criterios de filtro. |
Cadena sin formato |
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. |
Cadena sin formato |
JSON válido |
Lambda elimina el mensaje. |
JSON válido |
Cadena sin formato |
Lambda elimina el mensaje. |
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 |
JSON válido |
Lambda filtra en función de los criterios de filtro. |