sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo hacer que el comando de copia continúe ejecutándose en corrimiento al rojo incluso después de que la función lambda que lo inició haya expirado?

La documentación de AWS no es explícito sobre lo que sucede cuando se agota el tiempo de espera. Pero creo que es seguro decir que pasa a la fase de "Cierre", momento en el que el entorno finaliza a la fuerza el contenedor de tiempo de ejecución.

Lo que esto significa es que la conexión de socket utilizada por la conexión de la base de datos se cerrará y el proceso Redshift que está escuchando ese socket recibirá un fin de archivo:una desconexión del cliente. El comportamiento normal de cualquier base de datos en esta situación es finalizar cualquier consulta pendiente y revertir sus transacciones.

La razón por la que di esa descripción es para hacerle saber que no puede extender la vida de una consulta más allá de la vida de Lambda que inicia esa consulta. Si desea seguir utilizando una biblioteca de conexión de base de datos, deberá utilizar un servicio que no agote el tiempo de espera:AWS Batch o ECS son dos opciones.

Pero hay una mejor opción:la Redshift Data API , que es compatible con Boto3 .

Esta API funciona de forma asíncrona:envía una consulta a Redshift y obtiene un token que se puede usar para verificar el funcionamiento de la consulta. También puede indicarle a Redshift que envíe un mensaje a AWS Eventbridge cuando la consulta se complete o falle (para que pueda crear otro Lambda para tomar la acción adecuada).