

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.

# Utilisation de Lambda avec Amazon MQ
<a name="with-mq"></a>

**Note**  
Si vous souhaitez envoyer des données à une cible autre qu'une fonction Lambda ou enrichir les données avant de les envoyer, consultez [Amazon EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html) Pipes.

Amazon MQ est un service d’agent de messages géré pour [Apache ActiveMQ](https://activemq.apache.org/) et [RabbitMQ](https://www.rabbitmq.com). Un *agent de messages* permet à des applications et composants logiciels de communiquer à l’aide de divers langages de programmation, systèmes d’exploitation et autres protocoles de messagerie formels par le biais de rubriques ou d’événements en file d’attente.

Amazon MQ peut également gérer des instances Amazon Elastic Compute Cloud (Amazon EC2) en votre nom en installant des agents ActiveMQ ou RabbitMQ, et en fournissant différentes topologies réseau et infrastructures.

Vous pouvez utiliser une fonction Lambda pour traiter des enregistrements de votre agent de messages Amazon MQ. Lambda invoque votre fonction via un [mappage de source d’événement](invocation-eventsourcemapping.md), une ressource Lambda qui lit les messages de votre agent et invoque la fonction [de manière synchrone](invocation-sync.md).

**Avertissement**  
Les mappages des sources d’événements Lambda traitent chaque événement au moins une fois, et le traitement des enregistrements peut être dupliqué. Pour éviter les problèmes potentiels liés à des événements dupliqués, nous vous recommandons vivement de rendre votre code de fonction idempotent. Pour en savoir plus, consultez [Comment rendre ma fonction Lambda idempotente](https://repost.aws/knowledge-center/lambda-function-idempotent) dans le Knowledge Center. AWS 

Le mappage de source d’événement Amazon MQ est sujet aux restrictions de configuration suivantes :
+ Simultanéité : les fonctions Lambda qui utilisent un mappage des sources d’événements Amazon MQ disposent d’un paramètre de [simultanéité](lambda-concurrency.md) maximale par défaut. Pour ActiveMQ, le service Lambda limite le nombre d’environnements d’exécution simultanés à cinq par mappage des sources d’événements Amazon MQ. Pour RabbitMQ, le nombre d’environnements d’exécution simultanés est limité à 1 par mappage des sources d’événements Amazon MQ. Même si vous modifiez les paramètres de simultanéité réservés ou fournis de votre fonction, le service Lambda ne mettra pas plus d’environnements d’exécution à disposition. Pour demander une augmentation de la simultanéité maximale par défaut pour un seul mappage de source d'événement Amazon MQ, Support contactez l'UUID du mappage de source d'événement, ainsi que la région. Étant donné que les augmentations sont appliquées au niveau de chaque mappage des sources d’événements, et non au niveau du compte ou de la région, vous devez demander manuellement une augmentation de mise à l’échelle pour chaque mappage des sources d’événements.
+ Traitement entre comptes – Lambda ne prend pas en charge le traitement entre comptes. Vous ne pouvez pas utiliser Lambda pour traiter des enregistrements d’un agent de messages Amazon MQ se trouvant dans un autre Compte AWS.
+ Authentification — Pour ActiveMQ, seul ActiveMQ est pris en charge. [SimpleAuthenticationPlugin](https://activemq.apache.org/security#simple-authentication-plugin) Pour RabbitMQ, seule l’authentification [PLAIN](https://www.rabbitmq.com/access-control.html#mechanisms) est prise en charge. Les utilisateurs doivent utiliser AWS Secrets Manager pour gérer leurs informations d'identification. Pour plus d’informations sur l’authentification ActiveMQ, consultez [Intégration d’agents ActiveMQ avec LDAP](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html) dans le *Guide du développeur Amazon MQ*.
+ Quota de connexion – Les agents ont un nombre maximum de connexions autorisées par protocole de niveau filaire. Ce quota est basé sur le type d’instance de l’agent. Pour plus d’informations, consultez la section [Agents](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-limits.html#broker-limits) de **Quotas dans Amazon** dans le *Manuel du développeur Amazon MQ*.
+ Connectivité – Vous pouvez créer des agents dans un cloud privé virtuel (VPC) public ou privé. Pour le mode privé VPCs, votre fonction Lambda doit accéder au VPC pour recevoir des messages. Pour plus d’informations, consultez [Configurer la sécurité réseau](process-mq-messages-with-lambda.md#process-mq-messages-with-lambda-networkconfiguration), plus loin dans cette section.
+ Destinations d’événements – Seules les destinations en file d’attente sont prises en charge. Toutefois, vous pouvez utiliser une rubrique virtuelle qui se comporte comme une rubrique en interne tout en interagissant avec Lambda en tant que file d’attente. Pour plus d’informations, consultez [Virtual Destinations (Destinations virtuelles)](https://activemq.apache.org/virtual-destinations) sur le site web Apache ActiveMQ, et [Virtual Hosts (Hôtes virtuels)](https://www.rabbitmq.com/vhosts.html) sur le site web RabbitMQ.
+ Topologie réseau – Pour ActiveMQ, un mappage de source d’événement prend en charge une seule instance ou un seul agent en veille. Pour RabbitMQ, un mappage de source d’événement prend en charge un seul agent d’instance ou un seul déploiement de cluster. Les agents à instance unique nécessitent un point de terminaison de basculement. Pour plus d’informations sur ces modes de déploiement d’agent, consultez [Architecture d’agent ActiveMQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-broker-architecture.html) et [Architecture d’agent RabbitMQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/rabbitmq-broker-architecture.html) dans le *Guide du développeur Amazon MQ*.
+ Protocoles – Les protocoles pris en charge dépendent du type d’intégration d’Amazon MQ.
  + Pour les intégrations ActiveMQ, Lambda consomme les messages à l'aide OpenWire/Java du protocole Message Service (JMS). Aucun autre protocole n’est pris en charge pour la consommation de messages. Dans le protocole JMS, seuls [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html) et [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html) sont pris en charge. Lambda prend également en charge les propriétés personnalisées JMS. Pour plus d'informations sur le OpenWire protocole, consultez [OpenWire](https://activemq.apache.org/openwire.html)le site Web d'Apache ActiveMQ.
  + Pour les intégrations RabbitMQ, Lambda consomme des messages à l’aide du protocole AMQP 0-9-1. Aucun autre protocole n’est pris en charge pour la consommation de messages. Pour plus d’informations sur l’implémentation par RabbitMQ du protocole AMQP 0-9-1, consultez [Guide de référence complet AMQP 0-9-1](https://www.rabbitmq.com/amqp-0-9-1-reference.html) sur le site web de RabbitMQ.

Lambda prend automatiquement en charge les dernières versions d’ActiveMQ et de RabbitMQ qu’Amazon MQ prend en charge. Pour connaître les dernières versions prises en charge, consultez [Notes de mise à jour Amazon MQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-release-notes.html) dans le *Guide du développeur Amazon MQ*.

**Note**  
Par défaut, Amazon MQ comporte une fenêtre de maintenance hebdomadaire pour les agents. Pendant cette période, les agents ne sont pas disponibles. Pendant ce temps, Lambda ne peut pas traiter les messages des agents sans veille.

**Topics**
+ [Comprendre le groupe de consommateurs Lambda pour Amazon MQ](#services-mq-configure)
+ [Configuration de source d’événements Amazon MQ pour Lambda](process-mq-messages-with-lambda.md)
+ [Paramètres de mappage des sources d’événements](services-mq-params.md)
+ [Filtrer les événement à partir d’une source d’événements Amazon MQ](with-mq-filtering.md)
+ [Résoudre les erreurs de mappage des sources d’événement Amazon MQ](services-mq-errors.md)

## Comprendre le groupe de consommateurs Lambda pour Amazon MQ
<a name="services-mq-configure"></a>

Pour interagir avec Amazon MQ, Lambda crée un groupe de consommateurs qui peut être lu à partir de vos agents Amazon MQ. Le groupe de consommateurs est créé avec le même ID qu’un mappage de source d’événements UUID.

Pour les sources d’événements Amazon MQ, Lambda réunit les enregistrements par lots et les envoie à votre fonction dans une seule charge utile. Pour contrôler le comportement, vous pouvez configurer la fenêtre de traitement par lots et la taille du lot. Lambda extrait les messages jusqu’à ce qu’il traite la taille maximale de la charge utile de 6 Mo, que la fenêtre de traitement par lots expire ou que le nombre d’enregistrements atteigne la taille totale du lot. Pour de plus amples informations, veuillez consulter [Comportement de traitement par lots](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Le groupe de consommateurs récupère les messages sous forme de BLOB d’octets, puis les code en base64 dans une charge unique JSON puis invoque votre fonction. Si votre fonction renvoie une erreur pour l’un des messages d’un lot, Lambda réessaie le lot de messages complet jusqu’à ce que le traitement réussisse ou que les messages expirent.

**Note**  
Alors que les fonctions Lambda ont généralement un délai d’expiration maximal de 15 minutes, les mappages des sources d’événement pour Amazon MSK, Apache Kafka autogéré, Amazon DocumentDB et Amazon MQ pour ActiveMQ et RabbitMQ ne prennent en charge que les fonctions dont le délai d’expiration maximal est de 14 minutes. Cette contrainte garantit que le mappage des sources d’événements peut gérer correctement les erreurs de fonction et effectuer de nouvelles tentatives.

Vous pouvez surveiller l'utilisation simultanée d'une fonction donnée à l'aide de la `ConcurrentExecutions` métrique d'Amazon CloudWatch. Pour de plus amples informations sur la simultanéité, consultez [Configuration de la simultanéité réservée pour une fonction](configuration-concurrency.md).

**Example Événements d’enregistrement Amazon MQ**  

```
{
   "eventSource": "aws:mq",
   "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
   "messages": [
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.govskope.ca-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"
        }
      },
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.govskope.ca-37557-1234520418293-4:1:1:1:1",
        "messageType": "jms/bytes-message",
        "deliveryMode": 1,
        "replyTo": null,
        "type": null,
        "expiration": "60000",
        "priority": 2,
        "correlationId": "myJMSCoID1",
        "redelivered": false,
        "destination": { 
          "physicalName": "testQueue" 
        },
        "data":"LQaGQ82S48k=",
        "timestamp": 1598827811958,
        "brokerInTime": 1598827811958, 
        "brokerOutTime": 1598827811959, 
        "properties": {
          "index": "1",
          "doAlarm": "false",
          "myCustomProperty": "value"
        }
      }
   ]
}
```

```
{
  "eventSource": "aws:rmq",
  "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8",
  "rmqMessagesByQueue": {
    "pizzaQueue::/": [
      {
        "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=="
      }
    ]
  }
}
```
Dans l’exemple RabbitMQ, `pizzaQueue` est le nom de la file d’attente RabbitMQ, et `/` est le nom de l’hôte virtuel. Lors de la réception de messages, la source d’événement répertorie les messages sous `pizzaQueue::/`.