繁体   English   中英

AWS Lambda - 删除版本化 S3 存储桶中的对象

[英]AWS Lambda - Delete an object in a versioned S3 Bucket

我正在用 JavaScript 设置 Lambda 函数。 我希望这个函数在删除 dynamodb 记录时获取一些数据,并使用它来查找和删除它对应的 S3 对象(在版本化存储桶中)。 这是我到目前为止所拥有的:

 import { Context, APIGatewayProxyResult, APIGatewayEvent } from 'aws-lambda'; const AWS = require('aws-sdk'); const s3 = new AWS.S3({ region: 'eu-west-2' }); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { event.Records.forEach(async record => { if (record.eventName == "REMOVE") { _processRecord(record.dynamodb.OldImage).promise(); } }); }; async function _processRecord(oldImage) { const parameters = { Bucket: process.env.BUCKETNAME, Key: oldImage.propertyId.S }; try { s3.headObject(parameters).promise(); console.log('File located in S3'); try { s3.deleteObject(parameters).promise(); console.log('File deleted from S3'); } catch (error) { console.log("ERROR in file Deleting : " + JSON.stringify(error)); } } catch (error) { console.log("File not Found ERROR : " + error.code) } }

在我进入 S3 部分之前,一切似乎都很好。 当我调用该函数时,我得到一个 202 响应,看起来一切正常,但是当我签入 S3 时文件并没有被删除。 我尝试在参数中添加一个版本,但这似乎也不起作用。 任何帮助将不胜感激。

当您从启用了版本控制的 S3 存储桶中删除对象时,该对象不会被永久删除。 相反,最新版本被特别标记为已删除。 向该对象发出的任何 get 对象都将返回,就好像该对象已被删除一样。

要永久删除版本化存储桶中的对象,您必须删除该对象的所有版本。

您可以在删除对象版本文档中找到更多详细信息。

我做了更多的挖掘工作,并且能够找出问题所在。 我认为我的主要问题实际上是在异步函数中使用foreach for (const record of Records)替换它可以让事情顺利进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM