PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como fazer com que o comando de cópia continue sua execução no redshift mesmo após a função lambda que o iniciou ter expirado?


A documentação da AWS não é explícito sobre o que acontece quando ocorre o tempo limite. Mas acho que é seguro dizer que ele faz a transição para a fase "Shutdown", ponto em que o contêiner de tempo de execução é encerrado à força pelo ambiente.

O que isso significa é que a conexão de soquete usada pela conexão de banco de dados será fechada e o processo Redshift que está ouvindo esse soquete receberá um fim de arquivo -- uma desconexão de cliente. O comportamento normal de qualquer banco de dados nessa situação é encerrar quaisquer consultas pendentes e reverter suas transações.

A razão pela qual eu dei essa descrição é para que você saiba que você não pode estender a vida útil de uma consulta além da vida útil do Lambda que inicia essa consulta. Se você quiser continuar usando uma biblioteca de conexão de banco de dados, precisará usar um serviço que não atinja o tempo limite:AWS Batch ou ECS são duas opções.

Mas há uma opção melhor:a API de dados Redshift , que é suportado pelo Boto3 .

Essa API opera de forma assíncrona:você envia uma consulta ao Redshift e obtém um token que pode ser usado para verificar a operação da consulta. Você também pode instruir o Redshift a enviar uma mensagem ao AWS Eventbridge quando a consulta for concluída/falhar (para que você possa criar outro Lambda para executar a ação apropriada).