Lamda finaliza el proceso y no espera la respuesta de la API. aquí está mi código:
exports.handler = async (event, context, cb) => { try { console.log('FETCHING RECORDS FROM DATOCMS') const allItems = await client.items.all({}, { allPages: true }) if (!fs.existsSync(backupDir)){ // Create backup directory console.log('CRETING BACKUP DIRECTORY') fs.mkdirSync(backupDir, { recursive: true }); } console.log('FILL JSON WITH RECORDS FETCHED FROM DATOCMS') fs.writeFileSync('backup/records.json', JSON.stringify(allItems, null, 2)); console.log('ADDING BACKUP FOLDER TO ZIP') zip.addLocalFolder(backupDir); const zipFileContents = zip.toBuffer(); const params = { Bucket: S3_BUCKET, Key: `backup_zip-${backupDate}`, Body: zipFileContents, ContentType: "application/zip", ContentDisposition: `attachment; filename="${fileName}-${backupDate}"` } console.log('UPLOADING ZIP TO S3', params) s3.putObject(params, (err, data) => { if (err) { cb(null, 'Error') throw new Error('The zip file could not be uploaded', err); } console.log('Uploaded correctly') cb(null, 'Success') fs.rmdirSync(backupDir, { recursive: true }); }) } catch (err) { cb(null, 'Error..') throw new Error('An error occurred', err) } }También intenté agregar estas dos líneas sin suerte.
setInterval(() => {}, 1000); context.callbackWaitsForEmptyEventLoop = false;¿Alguien puede ayudarme? He estado probando Promises, Async/Await, Callbacks y no tuve suerte con eso. ¡Gracias!
Intente mapear las promesas, luego await en Promise.all . No estoy seguro de si all devuelve una matriz de promesas.
const promises = client.items.map(it=>...) const promises = client.items.all(it=>...) await Promise.all(promises)No está esperando s3.putObject . Debería ser:
const data = s3.putObject(params).promise();Usted maneja el error en un intento/captura.
Quite la palabra clave async del controlador. No puede usar la función de devolución de llamada en la función async/await.
Intente usar la función aws sdk con .promise();