【问题标题】:Does AWS Lambda run every invocation in a separate Firecracker VM?AWS Lambda 是否在单独的 Firecracker VM 中运行每个调用?
【发布时间】:2020-12-31 15:52:48
【问题描述】:

我知道 AWS Lambda 中的冷启动和热启动。

但是,我不确定在热启动期间 Lambda 架构是否在后端重用 Firecracker 虚拟机?还是在新的虚拟机中调用?

有没有办法通过其他 AWS 解决方案对每次调用强制执行 VM 级别隔离?

【问题讨论】:

    标签: amazon-web-services aws-lambda firecracker


    【解决方案1】:

    根据Lambda execution context 文档中的说明,Lambda 尝试在后续执行之间重用执行上下文,这就是导致冷启动(当上下文启动时)和热启动(当现有上下文被重用)。

    您通常会在首次调用 Lambda 函数时或在其更新后看到此延迟,因为 AWS Lambda 尝试将执行上下文重用于 Lambda 函数的后续调用。

    Lambda Runtime Environment 文档中的另一条声明证实了这一点,其中指出:

    当调用 Lambda 函数时,数据平面会为该函数分配一个执行环境,或者选择已经为该函数设置的现有执行环境,然后在该环境中运行函数代码。

    同一页面后面的段落提供了有关环境/资源如何在同一 AWS 账户中的功能和执行之间共享的更多信息:

    执行环境在硬件虚拟机 (microVM) 上运行。 microVM 专用于 AWS 账户,但可以由账户内跨功能的执行环境重复使用。 [...] 执行环境永远不会跨函数共享,microVM 永远不会跨 AWS 账户共享。

    此外,还有another doc page 提供了有关环境之间隔离的更多详细信息,但同样没有提及每个环境强制执行 1 次的能力。

    据我所知,没有办法让新的执行使用新环境而不是现有环境。 AWS 在这方面没有提供太多见解,但围绕该主题的措辞似乎表明大多数人实际上试图做与您正在寻找的相反的事情:

    当您编写 Lambda 函数代码时,不要假设 AWS Lambda 会自动将执行上下文重用于后续函数调用。其他因素可能要求 AWS Lambda 创建新的执行上下文,这可能会导致意外结果,例如数据库连接失败。

    我想说,如果您担心与其他客户/账户的隔离,AWS 通过虚拟化保证隔离,虽然不在物理级别,但取决于他们的 SLA 和您的 SLA/要求可能就足够了。相反,如果您正在考虑创建某种多租户基础架构,需要将 Lambda 执行相互隔离,那么此组件可能不是您想要的。

    【讨论】:

    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多