Actualmente estoy usando aws-sdk en la versión ^ 2.962.0 en una aplicación nodeJS en la que estoy trabajando para conectarme a un depósito de Google Cloud Storage y eliminar archivos, pero recibo el error "Argumento no válido: argumento no válido".
obs: el proyecto en el que estoy trabajando actualmente solía trabajar con AWS S3 pero migró a GCS, por lo que estamos usando las soluciones de migración de AWS a GSC por ahora. Otros métodos y librerías funcionan bien.
Aquí hay parte del código donde estoy usando el método deleteObjects:
import { S3 } from 'aws-sdk'; const s3 = new S3({ accessKeyId: process.env.S3_ACCESS_KEY, secretAccessKey: process.env.S3_SECRET, endpoint: process.env.S3_ENDPOINT, logger: console } const bucket = process.env.S3_BUCKET_FILES; const folderPath = 'someFolder/'; try{ const objectsKeys: Array<any> = []; const objectsList = await s3.listObjects( { Bucket: bucket, Delimiter: '/', Prefix: folderPath } ).promise(); objectsList.Contents.forEach( ( file ) => { const objectKey = file.Key; if ( objectKey === folderPath ) { return; } objectsKeys.push( { Key: objectKey } ); } ); await s3.deleteObjects( { //<< There seems to be some error of argument Bucket: bucket, Delete: { Objects: objectsKeys } } ).promise(); } catch(err){ console.log(err) }Probé todo tipo de configuraciones al pasar los parámetros al método s3.deleteObjects pero no puedo evitar el error:
//AWS logs and error [AWS s3 200 0.378s 0 retries] listObjects({ Bucket: 'myBucket-files', Delimiter: '/', Prefix: 'testFolder/' }) [AWS s3 400 0.216s 0 retries] deleteObjects({ Bucket: 'myBucket-files', Delete: { Objects: [ { Key: 'testFolder/e96ab708dab513e6c00ff21afbf02773' }, [length]: 1 ] } }) InvalidArgument: Invalid argument. at Request.extractError (C:\...) { // all the path until the error at the package folder code: 'InvalidArgument', region: null, time: 2021-12-29T20:34:04.924Z, requestId: null, extendedRequestId: undefined, cfId: undefined, statusCode: 400, retryable: false, retryDelay: 94.12732588991155 }¿Alguien sabe alguna forma de extraer el argumento exacto en tales casos o de obtener un registro de los parámetros esperados y entregarlos para poder compararlos? Me las arreglé para activar la configuración del registrador en la instancia del cliente S3 como sugiere la documentación, pero no parece ser más preciso en la depuración. ¿Alguien puede detectar el error?
Parece que Google Cloud Storage no es compatible con algunas de las funciones de aws sdk, incluido deleteObjects. Esta respuesta discute un poco más sobre este tema. Aún así, no encontré ninguna otra forma "fácil" de depurar este tipo de error InvalidArgument.