Usar Lambda con Amazon MQ - AWS Lambda

Usar Lambda con Amazon MQ

Amazon MQ es un servicio de agente de mensajes administrado para Apache ActiveMQ y RabbitMQ. Lambda solo admite Apache ActiveMQ. Un agente de mensajes permite que las aplicaciones de software y los componentes se comuniquen mediante varios lenguajes de programación, sistemas operativos y protocolos de mensajería formales a través de destinos de eventos de tema o de cola.

Amazon MQ también puede administrar Amazon Elastic Compute Cloud (Amazon EC2) instancias en su nombre instalando brokers de ActiveMQ y proporcionando diferentes topologías de red y otras necesidades de infraestructura.

Puede utilizar una función Lambda para procesar registros de su agente de mensajes Amazon MQ. Su función se activa a través de una asignación de origen de eventos, un recurso Lambda que lee los mensajes de su agente e invoca la función sincrónicamente.

La asignación de origen de eventos Amazon MQ tiene las siguientes restricciones de configuración:

  • Cuentas cruzadas – No se admite el procesamiento de cuentas cruzadas. No se puede utilizar Lambda para procesar registros de un agente de mensajes de Amazon MQ que se encuentra en una cuenta diferente.

  • Autenticación – Solo se admite ActiveMQ SimpleAuthenticationPlugin. Las credenciales de usuario asociadas con el agente son el único método de conexión. Para obtener más información acerca de la autenticación, vea Autenticación y autorización de mensajería para ActiveMQ en Guía para desarrolladores de Amazon MQ.

  • – Los agentes de cuota de conexión tienen un número máximo de conexiones permitidas por protocolo de nivel de cable. Esta cuota se basa en el tipo de instancia del broker. Para obtener más información, consulte la sección Corredores de Cuotas Amazon MQen el Guía para desarrolladores de Amazon MQ.

  • Conectividad – Puede crear agentes en Virtual Private Cloud (VPC) pública o privada. En el caso de las VPC privadas, su función Lambda necesita acceso a la VPC para interactuar con los registros. Para obtener más información, consulte API de mapeo de origen de eventos más adelante en este tema.

  • Destinos de eventos – Solo se admiten los destinos de cola. Sin embargo, puede utilizar un tema virtual, que se comporta como un tema internamente mientras interactúa con Lambda como una cola. Para obtener más información, consulte Destinos virtuales en el sitio web de Apache ActiveMQ.

  • Topología de red – Solo se admite una instancia única o agente en espera por asignación de origen de eventos. Los agentes de instancia única requieren un punto de enlace por error. Para obtener más información acerca de estos modos de implementación de broker, consulte Amazon MQ Arquitectura de agentes en Guía para desarrolladores de Amazon MQ.

  • Los protocolos – Lambda consumen mensajes mediante el protocolo OpenWire/Java Message Service (JMS). No se admiten otros protocolos. Dentro del protocolo JMS, sólo TextMessage y BytesMessage son compatibles. Para obtener más información acerca del protocolo OpenWire, consulte OpenWire en el sitio web de Apache ActiveMQ.

Lambda admite automáticamente las últimas versiones de ActiveMQ que Amazon MQ soporta. Para obtener las últimas versiones admitidas, consulte Notas de laAmazon MQ versión en Guía para desarrolladores de Amazon MQ.

nota

De forma predeterminada, Amazon MQ tiene una ventana de mantenimiento semanal para los corredores. Durante esa ventana de tiempo, los corredores no están disponibles. Para los brokers sin espera, Lambda no puede procesar ningún mensaje durante esa ventana.

Grupo de consumidores de Lambda

Para interactuar con Amazon MQ, Lambda crea un grupo de consumidores que puede leer de sus Amazon MQ corredores. El grupo de consumidores se crea con el mismo ID que el UUID de mapeo de origen de eventos.

Lambda extraerá mensajes hasta que haya procesado un máximo de 6 MB, hasta que se agote el tiempo de espera o hasta que se cumpla el tamaño del lote. Cuando se configura, el tamaño del lote determina el número máximo de elementos que se recuperarán en un solo lote. Su lote se convierte en una carga útil Lambda y se invoca la función de destino. Los mensajes no se mantienen ni se deserializan. En su lugar, el grupo de consumidores los recupera como un BLOB de bytes y están codificados en base64 para una carga útil JSON.

nota

El tiempo máximo de invocación de la función es de 14 minutos.

Lambda procesa todos los lotes entrantes simultáneamente y escala automáticamente la concurrencia para satisfacer las demandas. Puede supervisar el uso de concurrencia de una función determinada utilizando la métrica ConcurrentExecutions en Amazon CloudWatch. Para obtener más información acerca de la simultaneidad, consulte Administración de la simultaneidad para una función de Lambda.

ejemplo Evento de registro de Amazon MQ

{ "eventSource": "aws:amq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": { [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "data": "QUJDOkFBQUE=", "connectionId": "myJMSCoID", "redelivered": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType":"jms/bytes-message", "data": "3DTOOW7crj51prgVLQaGQ82S48k=", "connectionId": "myJMSCoID1", "persistent": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 } ] } }

Permisos de rol de ejecución

Para leer registros de un agente Amazon MQ, su función Lambda necesita los siguientes permisos agregados a su rol de ejecución:

nota

Cuando utilice una clave administrada por el cliente cifrada, agregue también el permiso kms:Decrypt.

Configuración de un agente como origen de eventos

Cree una asignación de origen de eventos Lambda para indicar que envíe registros de un agente Amazon MQ a una función Lambda. Puede crear varios mapeos de orígenes de eventos para procesar los mismos datos con distintas funciones o para procesar elementos de varias fuentes con una sola función.

Para configurar la función para leer de Amazon MQ, cree un desencadenador de MQ en la consola de Lambda.

Para crear un disparador

  1. Abra la Página de funciones en la consola de Lambda.

  2. Elija una función.

  3. En Function overview (Descripción general de la función), elija Add trigger (Agregar disparador).

  4. Elija un tipo de disparador.

  5. Configure las opciones necesarias y, a continuación, elija Add (Añadir).

Lambda admite las siguientes opciones para los orígenes de eventos de Amazon MQ:

  • Agente de MQ – Seleccione un agente Amazon MQ.

  • Tamaño del lote – Establezca el número máximo de mensajes que se recuperarán en un solo lote.

  • Nombre de la cola – Escriba la cola Amazon MQ que se va a consumir.

  • Configuración de acceso de origen – Seleccione el AWS Secrets Manager secreto que almacena las credenciales del agente.

  • Enable trigger (Activar desencadenador): desactive el desencadenador para detener el procesamiento de registros.

Para habilitar o desactivar el desencadenador (o eliminarlo), elija el desencadenador de MQ en el diseñador. Para volver a configurar el desencadenador, utilice las operaciones de API de asignación de origen de eventos.

API de mapeo de origen de eventos

Para administrar un origen de eventos con la AWS CLI o el SDK de AWS, puede utilizar las siguientes operaciones de la API:

Para crear el mapeo de origen del evento con la AWS Command Line Interface (AWS CLI), use el comando create-event-source-mapping.

De forma predeterminada, Amazon MQ los brokers se crean con el indicador PubliclyAccessible establecido en falso. Solo cuando PubliclyAccessible se establece en verdadero que el corredor recibe una dirección IP pública.

Para tener acceso completo con la asignación de origen de eventos, el agente debe utilizar un punto de enlace público o proporcionar acceso a la VPC. Para cumplir los requisitos de acceso de Amazon VPC, puede realizar una de las siguientes acciones:

Las reglas de grupo de seguridad de Amazon Virtual Private Cloud (Amazon VPC) que configure deben cumplir, como mínimo, los siguientes requisitos:

  • Reglas de entrada – Para un agente sin acceso público, permita todo el tráfico en todos los puertos para el grupo de seguridad especificado como origen. Para un corredor con accesibilidad pública, permita todo el tráfico en todos los puertos para todos los destinos.

  • Reglas de salida: permitir todo el tráfico en todos los puertos para todos los destinos.

La configuración Amazon VPC se puede detectar a través de la Amazon MQ API y no necesita configurarse en la configuración create-event-source-mapping.

El siguiente comando AWS CLI de ejemplo crea un origen de eventos que asigna una función Lambda denominada MQ-Example-Function a un agente Amazon MQ denominado ExampleMQBroker. El comando también proporciona un Secrets Manager secreto llamado ExampleMQBrokerUserPassword que almacena las credenciales del agente.

aws lambda create-event-source-mapping \ --event-source-arn arn:aws:mq:us-east-1:12345678901:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca \ --function-name MQ-Example-Function \ --source-access-configuration Type=BASIC_AUTH,URI=arn:aws:secretsmanager:us-east-1:12345678901:secret:ExampleMQBrokerUserPassword-xPBMTt \ --queues ExampleQueue

Debería ver los siguientes datos de salida:

{ "UUID": "91eaeb7e-c976-1234-9451-8709db01f137", "BatchSize": 100, "EventSourceArn": "arn:aws:mq:us-east-1:12345678901:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:12345678901:function:MQ-Example-Function", "LastModified": 1601927898.741, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "USER_INITIATED", "Queues": [ "ExampleQueue" ], "SourceAccessConfigurations": [ { "Type": "BASIC_AUTH", "URI": "arn:aws:secretsmanager:us-east-1:12345678901:secret:ExampleMQBrokerUserPassword-xPBMTt" } ] }

Con el comando update-event-source-mapping, puede configurar opciones adicionales, tales como la forma en que se procesan los lotes y especificar cuándo descartar los registros que no se pueden procesar. El siguiente comando de ejemplo actualiza una asignación de origen de eventos para que tenga un tamaño de lote de 2.

aws lambda update-event-source-mapping \ --uuid 91eaeb7e-c976-1234-9451-8709db01f137 \ --batch-size 2

Debería ver los siguientes datos de salida:

{ "UUID": "91eaeb7e-c976-1234-9451-8709db01f137", "BatchSize": 2, "EventSourceArn": "arn:aws:mq:us-east-1:12345678901:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:12345678901:function:MQ-Example-Function", "LastModified": 1601928393.531, "LastProcessingResult": "No records processed", "State": "Updating", "StateTransitionReason": "USER_INITIATED" }

La configuración actualizada se aplica de forma asincrónica y no se refleja en la salida hasta que se completa el proceso. Para consultar el estado actual del recurso, utilice el comando get-event-source-mapping

aws lambda get-event-source-mapping \ --uuid 91eaeb7e-c976-4939-9451-8709db01f137

Debería ver los siguientes datos de salida:

{ "UUID": "91eaeb7e-c976-4939-9451-8709db01f137", "BatchSize": 2, "EventSourceArn": "arn:aws:mq:us-east-1:12345678901:broker:ExampleMQBroker:b-b4d492ef-bdc3-45e3-a781-cd1a3102ecca", "FunctionArn": "arn:aws:lambda:us-east-1:12345678901:function:MQ-Example-Function", "LastModified": 1601928393.531, "LastProcessingResult": "No records processed", "State": "Enabled", "StateTransitionReason": "USER_INITIATED" }

Errores de mapeo de origen de eventos

Cuando una función Lambda encuentra un error irrecuperable, el consumidor Amazon MQ dejará de procesar registros. Cualquier otro consumidor puede continuar procesando, siempre que no encuentre el mismo error. Para determinar la causa potencial de un consumidor detenido, marque el campo StateTransitionReason en los detalles de devolución de su EventSourceMapping para obtener uno de los siguientes códigos:

ESM_CONFIG_NOT_VALID

La configuración de mapeo de origen del evento no es válida.

EVENT_SOURCE_AUTHN_ERROR

Lambda ha producido un error al autenticar el origen del evento.

EVENT_SOURCE_AUTHZ_ERROR

Lambda no tiene los permisos necesarios para acceder al origen del evento.

FUNCTION_CONFIG_NOT_VALID

La configuración de la función no es válida.

Los registros también quedan sin procesar si se eliminan debido a su tamaño. El límite de tamaño para los registros de Lambda es de 6 MB. Para volver a entregar mensajes en caso de error de función, puede utilizar una política de reentrega y el manejo de cola de cartas sin salida (DLQ) con Amazon MQ. Para obtener más información, consulte Reentrega de mensajes y gestión de DLQ en el sitio web de Apache ActiveMQ.