使用 AWS Lambda 在 S3 存储桶中更改文件

Posted

技术标签:

【中文标题】使用 AWS Lambda 在 S3 存储桶中更改文件【英文标题】:Mutating File at S3 Bucket w/ AWS Lambda 【发布时间】:2015-03-21 21:54:17 【问题描述】:

给定一个位于s3://path/to/bucket/file 的 S3 文件,我想执行一个附加“BAR”的 AWS Lambda 函数。

为了澄清,假设一个包含“FOO”的文件位于s3://path/to/bucket/file。我想执行一个附加“BAR”的 javascript 函数。

因此,在 S3 文件位置改变文件后,s3://path/to/bucket/file 的内容将显示为“FOOBAR”。

我该怎么做?

【问题讨论】:

您确实意识到 S3 对象不是文件,并且不能附加到,对吧? S3 中唯一可用的操作是覆盖/替换。完成此操作的唯一方法是获取对象,在内存或本地磁盘上对其进行修改,然后将新更改的对象上传到 S3。 小心在同一个存储桶中执行此操作,因为 s3 将产生一个新事件并且“循环即将到来” 您找到解决方案了吗? @Casper - 我最终使用 AWS Lambda 在 bucket1 上监听插入事件。在将对象插入bucket1 后,AWS Lambda 会将对象从bucket1 复制到bucket2,将一个函数应用于复制的object(我使用的是JSON)以将一个新的key-value 对添加到JSON .我是在 2015 年初这样做的。对我来说,我发现 AWS Lambda 文档很难阅读。但是,那是大约 1 1/2 年前的事了,所以也许他们已经改进了。 我也想要这个令人遗憾的缺失功能 【参考方案1】:

在您的 s3.getObject 回调中,您可以使用 data.Body.toString() 读取文件内容,然后将“BAR”附加到它,然后使用相同的存储桶名称覆盖对象(保存到同一文件)和您从带有新字符串的事件处理程序收到的键名。

【讨论】:

如果文件很大,我认为这会很慢

以上是关于使用 AWS Lambda 在 S3 存储桶中更改文件的主要内容,如果未能解决你的问题,请参考以下文章

S3 存储桶中的 AWS Lambda 代码未更新

AWS 云形成 |配置 Lambda 以使用 S3 存储桶中的最新版本代码

使用 aws lambda node js 获取存储在 s3 存储桶中的视频的视频元数据

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流

AWS Lambda使用S3