【问题标题】:How to debug InvalidArgument error on deleteObjects using aws-sdk for nodeJs如何使用 aws-sdk for nodeJs 调试 deleteObjects 上的 InvalidArgument 错误
【发布时间】:2021-12-29 21:00:07
【问题描述】:

我目前在 nodeJS 应用程序中使用版本 ^2.962.0 上的aws-sdk 来连接到 Google Cloud Storage 存储桶并删除文件,但我收到“InvalidArgument: Invalid argument”错误。

obs:我目前正在从事的项目曾经使用 AWS S3,但已迁移到 GCS,因此我们现在使用Migration from AWS to GSC 解决方案。其他方法和库工作正常。

这是我使用 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)
}

我在将参数传递给 s3.deleteObjects 方法时尝试了各种配置,但我无法解决该错误:

//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
}

是否有人知道在这种情况下提取确切参数或获取预期参数日志并交付以便可以比较它的任何方法?我已经设法将 S3 客户端实例上的记录器配置打开为documentation suggests,但在调试方面似乎并不更精确。谁能发现错误?

【问题讨论】:

  • 第一句是错字吗?我不认为 AWS-sdk 能够与 GCS 交互。
  • @CollinD 不,我目前正在从事的项目曾经使用 AWS S3,但后来迁移到 GCS,所以我们现在使用Migration from AWS to GSC 解决方案。但是其他的方法都很好用,就是这种错误真的很难去调试。
  • 这太棒了,今天我学会了。感谢分享!

标签: javascript node.js typescript google-cloud-storage aws-sdk-js


【解决方案1】:

Google Cloud Storage 似乎不支持某些 aws sdk 功能,包括 deleteObjects。 This answer 对此问题进行了更多讨论。尽管如此,我还是没有找到任何其他“简单”的方法来调试这种 InvalidArgument 类型的错误。

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2014-12-06
    • 2019-10-01
    • 2013-02-09
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    相关资源
    最近更新 更多