

# Filtrar eventos de una fuente de eventos de Amazon MQ
<a name="with-mq-filtering"></a>

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](invocation-eventfiltering.md).

Esta sección se centra en el filtrado de eventos para las fuentes de eventos de Amazon MQ.

**nota**  
Las asignaciones de orígenes de eventos de Amazon MQ solo admiten el filtrado en la clave `data`.

**Topics**
+ [Conceptos básicos de filtrado de eventos de Amazon MQ](#filtering-AMQ)

## Conceptos básicos de filtrado de eventos de Amazon MQ
<a name="filtering-AMQ"></a>

Supongamos que su cola de mensajes de Amazon MQ contiene mensajes en formato JSON válido o como cadenas simples. Un registro de ejemplo tendría el siguiente aspecto, con los datos convertidos en una cadena codificada en Base64 en el campo `data`.

------
#### [ ActiveMQ ]

```
{ 
    "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", 
    "messageType": "jms/text-message",
    "deliveryMode": 1,
    "replyTo": null,
    "type": null,
    "expiration": "60000",
    "priority": 1,
    "correlationId": "myJMSCoID",
    "redelivered": false,
    "destination": { 
      "physicalName": "testQueue" 
    },
    "data":"QUJDOkFBQUE=",
    "timestamp": 1598827811958,
    "brokerInTime": 1598827811958, 
    "brokerOutTime": 1598827811959, 
    "properties": {
      "index": "1",
      "doAlarm": "false",
      "myCustomProperty": "value"
    }
}
```

------
#### [ RabbitMQ ]

```
{
    "basicProperties": {
        "contentType": "text/plain",
        "contentEncoding": null,
        "headers": {
            "header1": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  49
                ]
            },
            "header2": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  50
                ]
            },
            "numberInHeader": 10
        },
        "deliveryMode": 1,
        "priority": 34,
        "correlationId": null,
        "replyTo": null,
        "expiration": "60000",
        "messageId": null,
        "timestamp": "Jan 1, 1970, 12:33:41 AM",
        "type": null,
        "userId": "AIDACKCEVSQ6C2EXAMPLE",
        "appId": null,
        "clusterId": null,
        "bodySize": 80
        },
    "redelivered": false,
    "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
}
```

------

Tanto para los agentes de Active MQ como los de Rabbit MQ, puede utilizar el filtrado de eventos para filtrar los registros mediante la clave `data`. Supongamos que su cola de Amazon MQ contiene mensajes en el siguiente formato JSON.

```
{
    "timeout": 0,
    "IPAddress": "203.0.113.254"
}
```

Para filtrar solo los registros en los que el campo `timeout` sea mayor que 0, el objeto `FilterCriteria` sería el siguiente.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }"
        }
    ]
}
```

Para mayor claridad, este es el valor del `Pattern` del filtro ampliado en JSON no cifrado.

```
{
    "data": {
        "timeout": [ { "numeric": [ ">", 0 ] } ]
        }
}
```

Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.

------
#### [ Console ]

Para agregar este filtro mediante la consola, siga las instrucciones que se indican en [Adjuntar criterios de filtro a una asignación de origen de eventos (consola)](invocation-eventfiltering.md#filtering-console) e ingrese la siguiente cadena para los **Criterios de filtro**.

```
{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
```

------
#### [ AWS CLI ]

Para crear una nueva asignación de orígenes de eventos con estos criterios de filtro mediante la AWS Command Line Interface (AWS CLI), ejecute el siguiente comando.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

Para agregar estos criterios de filtro a una asignación de orígenes de eventos existente, ejecute el siguiente comando.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

Para agregar estos criterios de filtro a una asignación de orígenes de eventos existente, ejecute el siguiente comando.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

------
#### [ AWS SAM ]

Para agregar este filtro mediante AWS SAM, agregue el siguiente fragmento a la plantilla YAML de su origen de eventos.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'
```

------

Con Amazon MQ, también puede filtrar los registros en los que el mensaje sea una cadena simple. Supongamos que desea procesar solo los registros en los que el mensaje comienza por “Resultado:”. El objeto `FilterCriteria` tendría el siguiente aspecto.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"
        }
    ]
}
```

Para mayor claridad, este es el valor del `Pattern` del filtro ampliado en JSON no cifrado.

```
{
    "data": [
        {
        "prefix": "Result: "
        }
    ]
}
```

Puede agregar el filtro mediante la consola, la AWS CLI o una plantilla de AWS SAM.

------
#### [ Console ]

Para agregar este filtro mediante la consola, siga las instrucciones que se indican en [Adjuntar criterios de filtro a una asignación de origen de eventos (consola)](invocation-eventfiltering.md#filtering-console) e ingrese la siguiente cadena para los **Criterios de filtro**.

```
{ "data" : [ { "prefix": "Result: " } ] }
```

------
#### [ AWS CLI ]

Para crear una nueva asignación de orígenes de eventos con estos criterios de filtro mediante la AWS Command Line Interface (AWS CLI), ejecute el siguiente comando.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

Para agregar estos criterios de filtro a una asignación de orígenes de eventos existente, ejecute el siguiente comando.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

------
#### [ AWS SAM ]

Para agregar este filtro mediante AWS SAM, agregue el siguiente fragmento a la plantilla YAML de su origen de eventos.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'
```

------

Los mensajes de Amazon MQ deben ser cadenas codificadas en UTF-8, cadenas simples o en formato JSON. Esto se debe a que Lambda decodifica las matrices de bytes de Amazon MQ en UTF-8 antes de aplicar los criterios de filtro. Si los mensajes utilizan otra codificación, como UTF-16 o ASCII, o el formato del mensaje no coincide con el formato de `FilterCriteria`, Lambda solo procesa los filtros de metadatos. En la siguiente tabla se resume el comportamiento específico:


| Formato del mensaje entrante | Formato del patrón de filtro para las propiedades del mensaje | 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 filtra (solo en las demás propiedades de metadatos) en función de los criterios de filtro.  | 
|  JSON válido  |  Cadena sin formato  |  Lambda filtra (solo en las demás propiedades de metadatos) 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  |  JSON válido  |  Lambda filtra en función de los criterios de filtro.  | 
|  Cadena no codificada con UTF-8  |  JSON, cadena sin formato o sin patrón  |  Lambda filtra (solo en las demás propiedades de metadatos) en función de los criterios de filtro.  | 