Lidar com o tempo limite do API Gateway quando a função Lamda requer mais de 30 segundos para ser concluída
Precisa da sua ajuda! No API Gateway, estou tentando acionar uma função do Lambda. Essa função do Lambda criará uma pilha do CloudFormation e a pilha, por sua vez, implantará uma instância do EC2. Abaixo está parte do código que inicia a criação da pilha e aguarda que o status de criação da pilha seja definido como concluído antes de poder retornar uma resposta. O problema é que o API Gateway tem um valor de tempo limite embutido em código de 30 segundos e a criação da pilha não é concluída antes de 30 segundos. Nesse cenário, a solicitação da API atinge o tempo limite, retornando um erro interno do servidor. Como lidar com isso?
# Create the CloudFormation Stack
StackID = cf_client.create_stack(
StackName=stackname,
TemplateURL='https://s3-bucket/template1.template',
Capabilities=['CAPABILITY_NAMED_IAM']
)
waiter = cf_client.get_waiter('stack_create_complete')
waiter.wait(
StackName=stackname,
WaiterConfig={
'Delay' : 5,
'MaxAttempts' : 50
}
)
Respostas
Talvez, em vez de o Lambda criar diretamente a pilha do CloudFormation, ele pudesse acionar uma função de etapa com uma função do Lambda apenas para criar as pilhas do CloudFormation. A função original pode retornar o ID de execução quando retornar após executar a função start_execution .
Isso traz 2 benefícios, o primeiro é que será muito mais rápido (assim que a execução da função de etapa começar, uma resposta será retornada pelo SDK, portanto, será mais rápido), além de ser resistente a falhas (você tem a opção de tente novamente ou notifique sobre erros).
Alternativamente, se você quiser que a própria solicitação faça isso dentro da solicitação HTTP do cliente, você precisará examinar um ALB que atende o tráfego para seu Lambda em vez do API Gateway (que tem um corte máximo). Um ALB pode suportar um tempo limite maior de até 4.000 segundos .