PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come fare in modo che il comando di copia continui la sua esecuzione in redshift anche dopo che la funzione lambda che lo ha avviato è scaduta?

La documentazione AWS non è esplicito su cosa succede quando si verifica il timeout. Ma penso che si possa affermare con sicurezza che passa alla fase di "Spegnimento", a quel punto il contenitore di runtime viene forzato dall'ambiente.

Ciò significa che la connessione socket utilizzata dalla connessione al database verrà chiusa e il processo Redshift che sta ascoltando quel socket riceverà una fine del file, una disconnessione del client. Il comportamento normale di qualsiasi database in questa situazione consiste nel terminare qualsiasi query in sospeso e ripristinare le transazioni.

Il motivo per cui ho fornito questa descrizione è per farti sapere che non puoi estendere la durata di una query oltre la durata della Lambda che avvia quella query. Se desideri continuare a utilizzare una libreria di connessione al database, dovrai utilizzare un servizio che non scade:AWS Batch o ECS sono due opzioni.

Ma c'è un'opzione migliore:l'Redshift Data API , che è supportato da Boto3 .

Questa API funziona in modo asincrono:invii una query a Redshift e ottieni un token che può essere utilizzato per verificare il funzionamento della query. Puoi anche indicare a Redshift di inviare un messaggio ad AWS Eventbridge quando la query viene completata/non riuscita (in modo da poter creare un altro Lambda per intraprendere l'azione appropriata).