下表列出了针对 Lambda 函数每个调用的运行时资源限制。
AWS Lambda 资源限制
资源 | 默认限制 |
---|---|
临时磁盘容量(“/tmp”空间) | 512MB |
文件描述符数 | 1024 |
过程和线程数(合并总数量 | 1024 |
每个请求的最大执行时长 | 300 秒 |
Invoke 请求正文有效负载大小 (RequestResponse) | 6MB |
Invoke 请求正文有效负载大小 (Event) | 128 K |
Invoke 响应正文有效负载大小 (RequestResponse) | 6MB |
每个区域的 AWS Lambda 账户限
资源 | 默认限制 |
---|---|
并发执行数(请参阅Lambda 函数并行执行) | 100 |
AWS Lambda:工作原理
AWS Lambda 代表您执行您的 Lambda 函数时,它负责预配置和管理运行 Lambda 函数所需的资源。在您创建 Lambda 函数时,您指定配置信息,例如您希望允许 Lambda 函数使用的内存量和最长执行时间。调用 Lambda 函数时,AWS Lambda 根据您提供的配置设置启动容器(即,执行环境)
注意
这一部分的内容仅用于信息目的。AWS Lambda 管理容器创建和删除操作,没有供您管理容器的 AWS Lambda API。
设置容器需要一些时间并进行必需的引导,这会在每次调用 Lambda 函数时增加一些延迟。通常,在首次调用 Lambda 函数或者在更新该函数后会看到此延迟,因为 AWS Lambda 尝试重用容器进行 Lambda 函数的后续调用。
在执行 Lambda 函数之后,AWS Lambda 会保持容器一段时间,预期用于另一次 Lambda 函数调用。其效果是,服务在 Lambda 函数完成后冻结容器,如果再次调用 Lambda 函数时 AWS Lambda 选择重用容器,则解冻容器供重用。此容器重用方法的意义在于:
您的 Lambda 函数代码(handler 代码的外部,请参阅编程模型)中的任何声明保持已初始化的状态,再次调用函数时提供额外的优化功能。例如,如果您的 Lambda 函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。您可以在代码中添加逻辑,在创建新连接之前检查是否已存在连接。
每个容器在 /tmp 目录中提供一些磁盘空间。冻结容器时,目录内容会保留,提供可用于多次调用的暂时性缓存。您可以添加额外的代码来检查缓存中是否有您存储的数据。有关磁盘空间大小,请参阅AWS Lambda 限制。
如果 AWS Lambda 选择重用容器,而您的 Lambda 函数在结束时有未完成的后台进程或者回调,则函数将继续它们。您应确保代码中的任何后台进程或回调(使用 Node.js 时)在代码退出前已完成。
注意
在您编写 Lambda 函数代码时,请勿假定 AWS Lambda 始终重用容器,因为 AWS Lambda 可能会选择不重用容器。根据版本或其他因素,AWS Lambda 可能仅仅创建新的容器而非重用现有容器。