使用 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 存储桶中更改文件的主要内容,如果未能解决你的问题,请参考以下文章
AWS 云形成 |配置 Lambda 以使用 S3 存储桶中的最新版本代码
使用 aws lambda node js 获取存储在 s3 存储桶中的视频的视频元数据
使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶