PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lässt sich der Kopierbefehl auch nach Ablauf der Lambda-Funktion, die ihn initiiert hat, in Rotverschiebung fortsetzen?

Die AWS-Dokumentation ist nicht explizit darüber, was passiert, wenn eine Zeitüberschreitung auftritt. Aber ich denke, man kann mit Sicherheit sagen, dass es in die "Shutdown"-Phase übergeht, an welcher Stelle der Runtime-Container zwangsweise von der Umgebung beendet wird.

Dies bedeutet, dass die von der Datenbankverbindung verwendete Socket-Verbindung geschlossen wird und der Redshift-Prozess, der auf diesen Socket lauscht, ein Dateiende erhält – eine Client-Trennung. Das normale Verhalten jeder Datenbank in dieser Situation besteht darin, alle ausstehenden Abfragen zu beenden und ihre Transaktionen rückgängig zu machen.

Der Grund, warum ich diese Beschreibung gegeben habe, ist, Sie wissen zu lassen, dass Sie nicht können Verlängern Sie die Lebensdauer einer Abfrage über die Lebensdauer des Lambda hinaus, das diese Abfrage initiiert. Wenn Sie bei der Verwendung einer Datenbankverbindungsbibliothek bleiben möchten, müssen Sie einen Dienst ohne Zeitüberschreitung verwenden:AWS Batch oder ECS sind zwei Optionen.

Aber es gibt eine bessere Option:die Redshift Data API , das von Boto3 unterstützt wird .

Diese API arbeitet asynchron:Sie senden eine Abfrage an Redshift und erhalten ein Token, mit dem die Funktionsweise der Abfrage überprüft werden kann. Sie können Redshift auch anweisen, eine Nachricht an AWS Eventbridge zu senden, wenn die Abfrage abgeschlossen/fehlgeschlagen ist (damit Sie ein weiteres Lambda erstellen können, um entsprechende Maßnahmen zu ergreifen).