AWS Lambda 功能 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Lambda 功能

AWS Lambda 提供了用于管理和调用函数的管理控制台和 API。它提供的运行时支持一组标准功能,以便您能够根据需要轻松地在语言和框架之间进行切换。除了函数之外,您还可以创建版本、别名、层和自定义运行时。

编程模型

代码编写细节因运行时而异,但所有运行时都共用一个通用的编程模型,该模型定义了代码与运行时代码之间的接口。通过在函数配置中定义处理程序来告诉运行时运行哪个方法,然后运行时会运行该方法。运行时将对象(例如函数名和请求 ID)传递给包含调用事件以及上下文的处理程序。

在处理程序完成第一个事件的处理后,运行时会向处理程序发送另一个事件。函数的类保留在内存中,因此,可以重用初始化代码中在处理程序方法外部声明的客户端和变量。要节省后续事件的处理时间,请在初始化期间创建可重用的资源,如 AWS 开发工具包客户端。在初始化后,函数的每个实例都可以处理数千个请求。

初始化将作为函数实例所处理的首次调用的持续时间的一部分计费。在启用 X-Ray 跟踪时,运行时会单独记录初始化和执行的子分段。


        包含初始化和调用子分段的 X-Ray 跟踪。

此外,您的函数有权访问 /tmp 目录中的本地存储。正在处理请求的函数实例在被回收之前会保持活动状态几个小时。

运行时捕获来自函数的日志记录输出,并将它发送到 Amazon CloudWatch Logs。除了记录函数的输出外,运行时还会在执行开始和结束时记录条目。这包括具有请求 ID、计费持续时间、初始化持续时间和其他详细信息的报告日志。如果函数引发一个错误,则运行时会将该错误返回到调用程序。

注意

日志记录需要遵循 CloudWatch Logs 限制。由于节流或在某些情况下函数实例停止,日志数据可能会丢失。

有关您常用的编程语言中的编程模式的实际操作介绍,请参阅以下章节。

Lambda 通过在需求增加时运行其他实例并在需求减少时停止实例来扩展您的函数。除非另有说明,否则传入请求可能会不按次序处理或同时处理。将应用程序的状态存储在其他服务中,并且不依赖长期存在的函数实例。虽然可使用本地存储和类级别对象来提高性能,但应将部署包的大小和传输到执行环境中的数据量保持在最小值。

部署程序包

您的函数代码由脚本或编译的程序及其依赖项组成。在 Lambda 控制台或工具包中编写函数时,客户端会创建代码的 ZIP 存档(称为部署包)。然后,客户端将该部署包发送到 Lambda 服务。使用 Lambda API、命令行工具或软件开发工具包管理函数时,您可以创建部署包。您还需要为编译语言手动创建部署包,并为您的函数添加依赖项。

有关特定于语言的说明,请参阅以下主题。

Lambda 层是适用于库、自定义运行时和其他函数依赖项的分配机制。利用层,您可独立于其使用的不变代码和资源来管理开发中的函数代码。您可以将函数配置为使用您创建的层、AWS 提供的层或来自其他 AWS 客户的层。

有关更多信息,请参阅AWS Lambda 层

扩展

Lambda 管理运行代码的基础设施,并且会自动扩展以响应传入请求。当您的函数的调用速度快于函数的单个实例可处理事件的速度时,Lambda 会通过运行其他实例来进行扩展。当流量减少时,不活动的实例将被冻结或停止。您只需为函数初始化或处理事件的时间付费。


        您的函数根据打开的请求数自动扩展。

有关更多信息,请参阅AWS Lambda 函数扩展

并发控制

使用并发设置来确保您的生产应用程序实现高可用性和快速响应。为了防止函数使用太多并发,并为函数预留账户可用并发的一部分,请使用预留并发。预留并发将可用并发池拆分为子集。具有预留并发的函数仅使用其专用池中的并发。


        分配给两个函数的预留并发。

要使函数能够在延迟不发生波动的情况下进行扩展,请使用预配置并发。对于需要很长时间才能初始化的函数,或者所有调用需要极低延迟的函数,预配置并发使您能够预先初始化函数的实例并保持它们始终运行。Lambda 与 Application Auto Scaling 集成以支持基于使用率的预配置并发自动扩展。


        使用 Application Auto Scaling 自动扩展预配置的并发。

有关更多信息,请参阅管理 Lambda 函数的并发

异步调用

调用函数时,您可以选择同步或异步调用。使用同步调用时,您将等待函数处理该事件并返回响应。使用异步调用时,Lambda 会将事件排队等待处理并立即返回响应。


        Lambda 队列在将事件发送到函数之间异步调用事件。

对于异步调用,如果函数返回错误或被限制,则 Lambda 处理重试。要自定义此行为,您可以在函数、版本或别名上配置错误处理设置。您还可以配置 Lambda 以将处理失败的事件发送到死信队列,或将任何调用的记录发送到目标

有关更多信息,请参阅异步调用

事件源映射

要处理流或队列中的项,您可以创建事件源映射。事件源映射是 Lambda 中的一个资源,它从 Amazon SQS 队列、Amazon Kinesis 流或 Amazon DynamoDB 流中读取项目,并将它们批量发送到您的函数。您的函数处理的每个事件可以包含数百个或数千个项。


        事件源映射从 Kinesis 流读取记录。

事件源映射维护未处理项目的本地队列,并在函数返回错误或受到限制时处理重试。您可以配置事件源映射以自定义批处理行为和错误处理,或者将处理失败的项目记录发送到目标

有关更多信息,请参阅AWS Lambda 事件源映射

目标

目标是接收函数调用记录的 AWS 资源。对于异步调用,您可以配置 Lambda 以将调用记录发送到队列、主题、函数或事件总线。您可以为成功调用和处理失败的事件配置单独的目标。调用记录包含有关事件、函数的响应和记录发送原因的详细信息。


        Lambda 会根据结果将调用记录发送到队列或事件总线目标。

对于从流读取的事件源映射,您可以配置 Lambda 以将处理失败的批处理记录发送到队列或主题。事件源映射的失败记录包含有关批处理的元数据,并指向流中的项目。

有关更多信息,请参阅将 AWS Lambda 与 Amazon DynamoDB 结合使用将 AWS Lambda 与 Amazon Kinesis 结合使用配置异步调用目标及错误处理部分。

函数蓝图

当您在 Lambda 控制台中创建函数时,可以选择从头开始、使用蓝图或者从 AWS Serverless Application Repository 中部署应用程序。蓝图提供了示例代码,展示如何将 Lambda 与 AWS 服务或流行的第三方应用程序结合使用。蓝图包括 Node.js 和 Python 运行时的示例代码和函数配置预设。

蓝图是根据无权利保留协议许可证提供给用户使用的。它们仅在 Lambda 控制台中提供。

应用程序模板

您可以使用 Lambda 控制台创建具有持续交付管道的应用程序。Lambda 控制台中的应用程序模板包括一个或多个函数的代码、一个用于定义函数和提供支持的 AWS 资源的应用程序模板,以及一个定义 AWS CodePipeline 管道的基础设施模板。管道具有构建和部署阶段,在每次将更改推送到包含的 Git 存储库时,都会运行这些阶段。

应用程序模板是根据 MIT 无署名归属许可证提供给用户使用的。它们仅在 Lambda 控制台中提供。

有关更多信息,请参阅在 Lambda 控制台中创建具有持续交付功能的应用程序