

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Filtrage des événements provenant d’Amazon MSK et sources d’événements Apache Kafka autogéré
<a name="kafka-filtering"></a>

Vous pouvez utiliser le filtrage d’événements pour contrôler les enregistrements d’un flux ou d’une file d’attente que Lambda envoie à votre fonction. Pour obtenir des informations générales sur le fonctionnement du filtrage des événements, consultez [Contrôle des événements envoyés par Lambda à votre fonction](invocation-eventfiltering.md).

**Note**  
Les mappages Amazon MSK et Apache Kafka autogéré ne prennent en charge que le filtrage sur la clé `value`.

**Topics**
+ [Notions de base du filtrage d’événements Lambda](#filtering-kafka)

## Notions de base du filtrage d’événements Lambda
<a name="filtering-kafka"></a>

Supposons qu’un producteur écrive des messages à une rubrique de votre cluster Kafka, au format JSON valide ou sous forme de chaînes simples. Un exemple d’enregistrement ressemblerait à ce qui suit, avec le message converti en chaîne encodée en Base64 dans le champ `value`.

```
{
    "mytopic-0":[
        {
            "topic":"mytopic",
            "partition":0,
            "offset":15,
            "timestamp":1545084650987,
            "timestampType":"CREATE_TIME",
            "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
            "headers":[]
        }
    ]
}
```

Supposons que votre producteur Apache Kafka écrive des messages dans votre rubrique au format JSON suivant.

```
{
    "device_ID": "AB1234",
    "session":{
        "start_time": "yyyy-mm-ddThh:mm:ss",
        "duration": 162
    }
}
```

Vous pouvez utiliser la clé `value` pour filtrer les enregistrements. Supposons que vous vouliez filtrer uniquement les enregistrements où `device_ID` commence par les lettres AB. L’objet `FilterCriteria` serait le suivant.

```
{
    "Filters": [
        {
            "Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\": \"AB\" } ] } }"
        }
    ]
}
```

Pour plus de clarté, voici la valeur du `Pattern` de filtre étendu en JSON simple :

```
{
    "value": {
        "device_ID": [ { "prefix": "AB" } ]
      }
}
```

Vous pouvez ajouter votre filtre à l’aide de la console, d’AWS CLI ou d’un modèle AWS SAM.

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

Pour ajouter ce filtre à l’aide de la console, suivez les instructions de [Attacher des critères de filtre à un mappage de sources d’événements (console)](invocation-eventfiltering.md#filtering-console) et saisissez la chaîne suivante comme **critère de filtre**.

```
{ "value" : { "device_ID" : [ { "prefix":  "AB" } ] } }
```

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

Pour créer un nouveau mappage des sources d’événements avec ces critères de filtrage à l’aide de l’outil AWS Command Line Interface (AWS CLI), exécutez la commande suivante.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\":  \"AB\" } ] } }"}]}'
```

Pour ajouter ces critères de filtre à un mappage des sources d’événements existant, exécutez la commande suivante.

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

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

Pour ajouter ce filtre à l’aide d’AWS SAM, ajoutez l’extrait suivant au modèle YAML de votre source d’événement.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "value" : { "device_ID" : [ { "prefix":  "AB" } ] } }'
```

------

Avec Kafka, vous pouvez également filtrer les enregistrements dont le message est une chaîne simple. Supposons que vous vouliez ignorer les messages dont la chaîne est « error ». L’objet `FilterCriteria` se présente comme suit.

```
{
    "Filters": [
        {
            "Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"
        }
    ]
}
```

Pour plus de clarté, voici la valeur du `Pattern` de filtre étendu en JSON simple :

```
{
    "value": [
        {
        "anything-but": [ "error" ]
        }
    ]
}
```

Vous pouvez ajouter votre filtre à l’aide de la console, d’AWS CLI ou d’un modèle AWS SAM.

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

Pour ajouter ce filtre à l’aide de la console, suivez les instructions de [Attacher des critères de filtre à un mappage de sources d’événements (console)](invocation-eventfiltering.md#filtering-console) et saisissez la chaîne suivante comme **critère de filtre**.

```
{ "value" : [ { "anything-but": [ "error" ] } ] }
```

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

Pour créer un nouveau mappage des sources d’événements avec ces critères de filtrage à l’aide de l’outil AWS Command Line Interface (AWS CLI), exécutez la commande suivante.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"}]}'
```

Pour ajouter ces critères de filtre à un mappage des sources d’événements existant, exécutez la commande suivante.

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

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

Pour ajouter ce filtre à l’aide d’AWS SAM, ajoutez l’extrait suivant au modèle YAML de votre source d’événement.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "value" : [ { "anything-but": [ "error" ] } ] }'
```

------

Les messages Kafka doivent être des chaînes codées en UTF-8, soit des chaînes en texte brut, soit au format JSON. En effet, Lambda décode les tableaux d’octets Kafka en UTF-8 avant d’appliquer des critères de filtre. Si vos messages utilisent un autre encodage, tel que UTF-16 ou ASCII, ou si le format du message ne correspond pas au format `FilterCriteria`, Lambda traite uniquement les filtres de métadonnées. Le tableau suivant résume le comportement spécifique :


| Format du du message entrant | Modèle de filtre de format pour les propriétés des messages | Action obtenue. | 
| --- | --- | --- | 
|  Chaîne de texte brut  |  Chaîne de texte brut  |  Lambda filtre en fonction de vos critères de filtre.  | 
|  Chaîne de texte brut  |  Pas de modèle de filtre pour les propriétés des données  |  Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.  | 
|  Chaîne de texte brut  |  JSON valide  |  Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.  | 
|  JSON valide  |  Chaîne de texte brut  |  Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.  | 
|  JSON valide  |  Pas de modèle de filtre pour les propriétés des données  |  Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.  | 
|  JSON valide  |  JSON valide  |  Lambda filtre en fonction de vos critères de filtre.  | 
|  Chaîne non codée UTF-8  |  JSON, chaîne de texte brut ou aucun modèle  |  Lambda filtre (uniquement selon les autres propriétés de métadonnées) en fonction de vos critères de filtre.  | 