Tenho algum código assíncrono na minha função AWS Lambda e não importa qual código assíncrono esteja em execução, ele nunca resolve. Ele apenas faz com que o Lambda atinja o tempo limite.
export const handler: Handler = async (event) => {
console.log("stops after this");
const test = new Promise(() => setTimeout(() => void 1000));
await test;
// Never runs
console.log("test");
}
Aqui está o código na minha pilha para o lambda. Ele está vinculado ao gateway da API:
const api = new cdk.aws_apigatewayv2.HttpApi(this, "devpad-api");
const projectLambda = new lambda.Function(this, "ProjectLambda", {
runtime: lambda.Runtime.NODEJS_20_X,
handler: "index.handler",
code: lambda.Code.fromAsset("./lambdas/project/out/"),
timeout: cdk.Duration.seconds(10),
environment: {
MONGODB_CONNECTION_STRING: process.env.MONGODB_CONNECTION_STRING || "",
CLERK_SECRET_KEY: process.env.CLERK_SECRET_KEY || "",
},
});
Por que isso está acontecendo?
O problema na sua função Lambda é com a criação e resolução da Promise. A Promise atual nunca é resolvida porque o setTimeout não é manipulado corretamente.
A configuração da pilha do CDK parece correta, mas você pode querer considerar: 1 - aumentar a memória (se necessário); 2 - adicionar configuração de registro de propriedade; 3 - configurar a integração correta da API.