Nir*_*raj 2 amazon-s3 amazon-web-services aws-lambda
我已经创建了一个lambda函数来从s3存储桶读取文件(input.csv)并对其进行一些更改并将该文件(output.csv)保存在同一个存储桶中.注意:我还没有删除存储桶中的input.csv文件.lambda函数由object-created(All)事件触发.但是当桶中存在输入文件时,该函数被无限次地连续调用.是应该发生这样的?还是错了?
这是你的错 :)
您已经设置了递归触发器 - 每次更新文件时,您实际上都在编写它的新副本,从而触发事件等.
这是Lambda发布时初始演示中的关键警告(图像上传到S3,lambda被触发创建缩略图 - 如果缩略图写入同一个存储桶,它将再次触发,等等)
正如@chris指出的那样,你已经通过S3 PUT事件触发事件触发了一个递归循环,而S3 PUT事件依次执行另一个PUT,一次又一次地调用触发器.
为了避免这个问题,最简单的方法是使用两个S3桶 - 一个用于在处理之前放置文件,另一个用于放置后处理的文件.
如果您不想使用两个S3存储桶,则可以修改触发条件以包含FilterRules(docs).这允许您控制触发器,使其仅在将对象放置在S3中的某个"文件夹"中时才执行(当然,S3中不存在文件夹,它们只是键前缀).
这是一个例子:
{
"LambdaFunctionConfigurations": [
{
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "Prefix",
"Value": "queue/"
}
]
}
},
"LambdaFunctionArn": <lambda_func_arn>,
"Id": "<lambda_func_name>:app.lambda_handler",
"Events": [
"s3:ObjectCreated:*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |