Estou construindo uma API serverless com Node.js usando AWS Lambda, e minha função interage com o DynamoDB para recuperar dados. No entanto, toda vez que tento interagir com o DynamoDB, a função Lambda atinge o tempo limite antes que a solicitação seja concluída.
Configurei corretamente a função de execução da minha função Lambda com as permissões necessárias e assegurei que o AWS SDK v3 ( @aws-sdk/client-dynamodb
) esteja instalado e inicializado corretamente. Apesar disso, a função Lambda atinge o tempo limite sem consultar o DynamoDB com sucesso.
Aqui está o que eu fiz até agora:
O tempo limite da função Lambda foi configurado para 30 segundos, mas ele ainda atinge o tempo limite.
Verifiquei as permissões para a função Lambda, que inclui acesso ao DynamoDB.
Eu usei
async/await
para lidar com solicitações assíncronas.
Espero que a função Lambda seja concluída com sucesso e retorne dados do DynamoDB sem nenhum tempo limite.
Tentei aumentar o tempo limite da função Lambda para 30 segundos.
Tentei ajustar a capacidade de leitura/gravação da tabela do DynamoDB, mas isso não resolveu o problema.
Eu esperava que a função Lambda fosse executada sem atingir o tempo limite e recuperasse os dados do DynamoDB com sucesso.
Task timed out after 30.01 seconds
const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb");
const client = new DynamoDBClient({ region: "us-east-1" });
const params = {
TableName: "MyTable",
Key: { "id": { S: "123" } }
};
exports.handler = async (event) => {
try {
const data = await client.send(new GetItemCommand(params));
return {
statusCode: 200,
body: JSON.stringify(data),
};
} catch (err) {
console.error("Error", err);
return {
statusCode: 500,
body: JSON.stringify({ error: "Could not retrieve data" }),
};
}
};
Verifiquei que a tabela do DynamoDB existe e contém dados para o fornecido id
, mas a função Lambda ainda atinge o tempo limite.
O problema de timeout pode ser causado por vários fatores. Aqui estão algumas sugestões para resolvê-lo:
Aumente o tempo limite do Lambda: certifique-se de que a configuração de tempo limite da sua função Lambda seja maior do que o tempo de execução esperado. Ele deve ser aumentado de 30 segundos para algo maior, se necessário (por exemplo, 60 segundos).
Verifique as permissões: verifique novamente se a função de execução do Lambda tem as permissões corretas. Anexe a política AmazonDynamoDBFullAccess à função do Lambda, caso ainda não tenha feito isso.
Tratamento assíncrono: certifique-se de que a sintaxe await esteja correta e que não haja operações de bloqueio ou síncronas que possam estar causando o travamento da função.
Verifique as configurações do VPC: se sua função Lambda estiver dentro de um VPC, certifique-se de que ela tenha acesso adequado ao DynamoDB, que é um serviço público da AWS. Talvez seja necessário configurar as configurações do VPC do Lambda para permitir acesso de saída à Internet por meio de um NAT Gateway.
Aqui está uma versão modificada do seu manipulador Lambda com tempo limite aumentado e invocação assíncrona:
O motivo mais óbvio para o tempo limite da função Lambda ao se conectar ao DynamoDB (ou qualquer ponto de extremidade da Internet) é que você configurou a função Lambda para se conectar a uma VPC .
A menos que você precise acessar outros recursos dentro do seu VPC, como um banco de dados RDS, não há necessidade de anexar a função Lambda ao seu VPC, então reconfigure e reimplante a função Lambda. A função Lambda usará então uma rota padrão para a internet fornecida pelo serviço Lambda.
Se você precisar acessar outros recursos dentro da sua VPC, adicione um endpoint da VPC do DynamoDB à sua VPC.