【问题标题】:AWS Lambda doesn't terminate function instance after callingAWS Lambda 调用后不终止函数实例
【发布时间】:2016-05-27 11:55:30
【问题描述】:

我有 AWS lambda 函数,用于从 S3 下载、创建 zip 存档并上传回 S3。 有时我在日志中看到我的函数调用了两次。我将尝试详细描述。我的 lambda 函数等待一些参数:

 "OutputBucket": 'bucketName',
 "OutputKey": 'Zip/result.zip', * just for example
 "SourceBucket": 'bucketName',
 "SourcePrefix": 'projects/1990/6068/' *this is path to folder in S3

当用户点击按钮时,我调用 lambda 函数:

_lambdaClient.Invoke(invokeRequest);

我在调试器中看到,所有数据都正确填写,并且这段代码调用了一次。

但在日志中,我看到 lambda 调用了两次并使用不同的参数。当我单击按钮时会发生这种情况,然后等到它完成然后再次单击另一个项目。

这是日志截图:

如您所见,有两条 START/END 记录。他们之间也间隔4分钟。 结果我有一个包含来自两个不同项目的文件的 zip 文件。

哪里出了问题?

【问题讨论】:

  • “当我单击按钮时会发生这种情况,然后等到它完成然后再次单击另一个项目”因此您单击了两次按钮,并看到 Lambda 函数被调用了两次。这不正是你所期望的吗?这看起来完全按照预期工作。请说明您的预期行为。
  • @MarkB 是的,但我后来点击了。几分钟后。因此,我的第二次执行包含第一次执行的文件。这是错误的,在这种情况下,第二个用户可以从第一个用户那里获取文件。这是一个重要的安全问题。
  • 每次执行都没有得到一个新的环境。它们被重复使用。您需要在函数结束时删除所有文件以防止出现问题。

标签: c# amazon-s3 aws-lambda


【解决方案1】:

"在执行 Lambda 函数后,AWS Lambda 会维护 容器一段时间以期待另一个 Lambda 函数 调用。实际上,服务在一个 Lambda 函数完成并解冻容器以供重用,如果 AWS Lambda 选择在 Lambda 函数运行时重用容器 再次调用。”

它肯定会在一段时间内尝试重用您以前的功能。对于我们这些使用 Lambda 实例化 Kestrel 服务器的人来说,它有助于防止每次调用的设置代码重复。

http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2021-12-12
    • 2018-11-07
    • 1970-01-01
    • 2015-07-13
    • 2022-11-25
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多