我有一个AWS lambda,它是由 SNS queue。 lambda使用节点10.x作为引擎和aws-sdk,在触发时应从S3收集对象列表并进行一些处理。所有这些对象都有一个带有公共前缀(从SNS事件中提取)的名称。我正在使用listObjectsV2从具有相同前缀的S3存储桶中获取所有对象键(假定可以在一个调用中检索所有对象元数据),然后使用getObject来构建承诺以检索对象数据。 相关代码如下:
const params = {
Bucket: bucketName,
Prefix: prefix,
MaxKeys: maxKeys,
};
const objectsListResponse = await s3.listObjectsV2(params).promise();
const promises = objectsListResponse.Contents.map(o => s3.getObject({
Bucket: bucketName,
Key: o.Key,
}).promise());
const results = await Promise.all(promises);
我的问题是有时(并非总是)我遇到NoSuchKey: The specified key does not exist
错误。我的假设是,listObjectsV2
响应中包含的所有键都是有效的,但事实并非总是如此。有人对此问题有任何建议或解决方法吗?
注意:存储在S3存储桶中的所有对象都具有有效的键名,而没有特殊字符