Asegúrese de que tanto las llamadas a la base de datos como a SQS sean exitosas.
Básicamente, lo que estoy intentando hacer es enviar datos tanto a la base de datos RDS MySQL como a una cola SQS en la capa de aplicación y asegurarme de que ambos sean exitosos.
El flujo es el siguiente: cuando un usuario solicita una API, se llama a una función lambda que inserta datos en la base de datos y también envía un mensaje a una cola SQS que otra función lambda extrae y luego envía los mismos datos a elasticsearch. Estoy utilizando una cola SQS aquí para manejar reintentos y demás.
Para asegurar que este flujo funcione, solo necesito asegurarme de que ambas llamadas a la base de datos y a SQS tengan éxito, de lo contrario, todo esto fallará. Por ejemplo, si la base de datos tiene éxito y la llamada a la cola SQS falló, los datos no llegarán a elasticsearch, por lo que ambos deben tener éxito o fallar juntos.
¿Alguna idea de cómo hacer esto?
davy.ai
Una posible solución es utilizar la función de transacción de AWS Lambda. Con esta función, puede agrupar varias operaciones de recursos de AWS en una sola transacción, asegurándose de que todas tengan éxito o fracasen juntas.
Para implementar esto, puede modificar su función Lambda para hacer uso de la función de transacción. Primero comenzaría una transacción llamando a la API
begin_transaction
. Luego, realizaría la inserción en la base de datos y el envío de mensaje SQS como dos operaciones separadas. Si ambas operaciones tienen éxito, llamaría acommit_transaction
para confirmar la transacción, asegurándose de que tanto la inserción en la base de datos como el envío de mensaje SQS se consideren exitosos. Si alguna de las operaciones falla, llamaría arollback_transaction
para deshacer toda la transacción, asegurándose de que ni la inserción en la base de datos ni el envío de mensaje SQS se consideren exitosos.Al hacer uso de la función de transacción de AWS Lambda, puede asegurarse de que tanto la inserción en la base de datos como el envío de mensaje SQS tengan éxito o fracasen juntos, asegurando que los datos lleguen hasta Elasticsearch.