PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment faire en sorte que la commande de copie continue son exécution en redshift même après que la fonction lambda qui l'a lancée a expiré ?

La documentation AWS n'est pas explicite sur ce qui se passe lorsque le délai d'attente se produit. Mais je pense qu'il est prudent de dire qu'il passe à la phase "Arrêt", à quel point le conteneur d'exécution est fermé de force par l'environnement.

Cela signifie que la connexion socket utilisée par la connexion à la base de données sera fermée et que le processus Redshift qui écoute cette socket recevra une fin de fichier -- une déconnexion du client. Le comportement normal de toute base de données dans cette situation est de mettre fin à toutes les requêtes en attente et d'annuler leurs transactions.

La raison pour laquelle j'ai donné cette description est de vous faire savoir que vous ne pouvez pas prolonger la durée de vie d'une requête au-delà de la durée de vie du Lambda qui lance cette requête. Si vous souhaitez continuer à utiliser une bibliothèque de connexion à une base de données, vous devrez utiliser un service qui n'expire pas :AWS Batch ou ECS sont deux options.

Mais il existe une meilleure option :l'l'API de données Redshift , qui est pris en charge par Boto3 .

Cette API fonctionne de manière asynchrone :vous soumettez une requête à Redshift et obtenez un jeton qui peut être utilisé pour vérifier le fonctionnement de la requête. Vous pouvez également demander à Redshift d'envoyer un message à AWS Eventbridge lorsque la requête se termine/échoue (afin que vous puissiez créer un autre Lambda pour prendre les mesures appropriées).