通过 Lambda 运行代码
编写 Lambda 函数时,您创建的代码将在独特的无服务器环境中运行。了解 Lambda 实际如何运行您的代码涉及两个关键方面:定义您的代码如何与 Lambda 交互的编程模型,以及确定 Lambda 如何管理您的代码的运行时环境的执行环境生命周期。
Lambda 编程模型
编程模型充当 Lambda 如何与您的代码协同工作的一组通用规则,无论您使用 Python、Java 还是任何其他受支持的语言编写。编程模型包括运行时和处理程序。
对于标准函数:
-
Lambda 接收事件。
-
Lambda 使用运行时以您的代码可使用的格式准备事件。
-
运行时将格式化的事件发送到处理程序。
-
处理程序使用您编写的代码来处理事件。
对于持久性函数:
-
Lambda 接收事件
-
运行时会同时准备事件和 DurableContext
-
您的处理程序可以:
使用自动检查点机制处理步骤
不消耗资源的情况下暂停执行
从上次成功的检查点恢复
在各步骤间保持状态
此模型的核心是处理程序,Lambda 将事件发送到处理程序,供您的代码处理。可以将其视为代码的入口点。当 Lambda 收到事件时,它会将此事件及其一些上下文信息传递给处理程序。然后,处理程序会运行代码来处理这些事件,例如,它可能会读取上传到 Amazon S3 的文件、分析图像或更新数据库。当代码完成对一个事件的处理后,处理程序便可以处理下一个事件。
Lambda 执行模型
虽然编程模型定义了 Lambda 如何与您的代码交互,但执行环境才是 Lambda 实际运行函数的地方,它是一个专为您的函数创建的安全、隔离的计算空间。
每个环境都有其自身的生命周期,其在标准函数和持久性函数之间有所不同:
标准函数(最长 15 分钟):
-
初始化:环境设置和代码加载
-
调用:单次执行函数代码
-
关闭:环境清理
持久性函数(最长 1 年):
-
初始化:环境和持久状态设置
-
调用:具有自动检查点机制的多个步骤
-
等待状态:在不消耗资源的情况下暂停执行
-
恢复:从上一个检查点重新启动
-
关闭:清理持久状态
此环境负责处理运行函数的重要方面。它为您的函数提供内存和 /tmp 目录用于临时存储。对于持久性函数,它还管理:
步骤之间的自动状态持久性
检查点存储和恢复
等待状态协调
长时间运行的执行的进度跟踪