AWS-dokumentationen er ikke eksplicit om, hvad der sker, når timeout opstår. Men jeg tror, det er sikkert at sige, at det går over i "Shutdown"-fasen, hvorefter runtime-beholderen bliver tvangsafsluttet af miljøet.
Hvad dette betyder er, at socketforbindelsen, der bruges af databaseforbindelsen, vil blive lukket, og Redshift-processen, der lytter til den socket, vil modtage en end-of-fil - en klientafbrydelse. Den normale adfærd for enhver database i denne situation er at afslutte alle udestående forespørgsler og rulle deres transaktioner tilbage.
Grunden til, at jeg gav den beskrivelse, er for at fortælle dig, at du ikke kan forlænge levetiden af en forespørgsel ud over levetiden for den Lambda, der starter forespørgslen. Hvis du vil blive ved med at bruge et databaseforbindelsesbibliotek, skal du bruge en tjeneste, der ikke timeout:AWS Batch eller ECS er to muligheder.
Men der er en bedre mulighed:Redshift Data API , som er understøttet af Boto3 .
Denne API fungerer asynkront:du sender en forespørgsel til Redshift og får et token, der kan bruges til at kontrollere forespørgslens drift. Du kan også instruere Redshift om at sende en besked til AWS Eventbridge, når forespørgslen fuldføres/mislykkes (så du kan oprette en anden Lambda for at tage passende handling).