Ija*_*d N 27 amazon-s3 amazon-web-services aws-lambda
我正在使用aws lambda函数将存储桶中的上传的wav文件转换为mp3格式,然后将文件移动到另一个存储桶.它工作正常.但是触发有问题.当我上传小wav文件时,lambda函数被调用一次.但是当我上传一个大型的wav文件时,会多次触发此功能.
我已经google了这个问题,发现它是无状态的,所以它会被多次调用(不确定这个触发器是多次上传还是同一次上传).
https://aws.amazon.com/lambda/faqs/
是否有任何方法可以为单个上传调用此函数一次?
rk2*_*rk2 23
简短版本: 尝试在lambda函数配置中增加超时设置.
长版:
我猜你正在遇到lambda函数在这里超时.
S3事件本质上是异步的,并且在该事件被拒绝之前至少重试3次侦听S3事件的lambda函数.您提到在执行转换和重新上载的较小尺寸上传期间,您的lambda函数只执行一次(没有错误).从您的代码转换和重新上传所需的时间可能大于lambda函数的超时设置.
因此,您可能希望尝试增加lambda函数配置中的超时设置.
顺便提一下,确认你的lambda函数被多次调用的一种方法是查看事件id(67fe6073-e19c-11e5-1111-6bqw43hkbea3)发生的cloudwatch日志-
START RequestId: 67jh48x4-abcd-11e5-1111-6bqw43hkbea3 Version: $LATEST
Run Code Online (Sandbox Code Playgroud)
此事件id表示调用lambda的特定事件,并且对于负责同一S3事件的所有lambda执行应该相同.
此外,您可以在以下日志行中查找标记一个lambda执行结束的执行时间(持续时间) -
REPORT RequestId: 67jh48x4-abcd-11e5-1111-6bqw43hkbea3 Duration: 244.10 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 20 MB
Run Code Online (Sandbox Code Playgroud)
如果不是解决方案,它至少会给你一些调整正确方向的空间.让我知道事情的后续.
为了深入了解这个问题,您应该研究消息传递保证。然后,您可以使用幂等消费者模式实现解决方案。
该context对象包含有关您当前正在处理的请求 ID 的信息。即使同一事件触发多次,该 ID 也不会更改。您可以在每次事件触发时保存此 ID,然后在处理消息之前检查该 ID 是否已被处理。
| 归档时间: |
|
| 查看次数: |
12924 次 |
| 最近记录: |