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

使用 AWS Lambda 扩展

您可以使用 Lambda 扩展来增强您的 Lambda 函数。例如,使用 Lambda 扩展将函数与您首选的监控、可观察性、安全性和监管工具集成。您可以从 AWS Lambda 合作伙伴提供的一系列工具中进行选择,也可以创建自己的 Lambda 扩展

Lambda 支持内部和外部扩展。外部扩展作为独立进程在执行环境中运行,并在完全处理函数调用后继续运行。由于扩展作为单独的进程运行,因此它们可以用不同于函数的语言编写。

内部扩展作为运行时进程的一部分运行。您的函数通过使用包装脚本或进程内机制(如 JAVA_TOOL_OPTIONS)访问内部扩展。有关更多信息,请参阅修改运行时环境

您可以使用 Lambda 控制台、AWS Command Line Interface (AWS CLI) 或基础设施即代码 (IaC) 服务和工具(如 AWS CloudFormation、AWS 无服务器应用程序模型 (AWS SAM) 和 Terraform)来向函数添加扩展。

以下 Lambda 运行时支持外部扩展:

  • .NET Core 3.1 (C#/PowerShell) (dotnetcore3.1)

  • 自定义运行时 (provided)

  • Amazon Linux 2 (provided.al2) 上的自定义运行时

  • Java 11 (Corretto) (java11)

  • Java 8 (Corretto) (java8.al2)

  • Node.js 12.x (nodejs12.x)

  • Node.js 10.x (nodejs10.x)

  • Python 3.8 (python3.8)

  • Python 3.7 (python3.7)

  • Ruby 2.7 (ruby2.7)

  • Ruby 2.5 (ruby2.5)

您需要按扩展所占用的执行时间(以 100 毫秒为增量)付费。有关扩展的定价的更多信息,请参阅 AWS Lambda 定价有关合作伙伴扩展的定价信息,请参阅这些合作伙伴的网站。安装自己的扩展没有任何费用。

执行环境

Lambda 在执行环境中调用您的函数,该环境提供一个安全和隔离的运行时环境。执行环境管理运行函数所需的资源。执行环境还为函数的运行时和扩展提供生命周期支持。

执行环境的生命周期包括以下阶段:

  • Init:在此阶段,Lambda 使用配置的资源创建或解除冻结执行环境,下载函数和所有层的代码,初始化任何扩展,初始化运行时,然后运行函数的初始化代码(即主处理程序外的代码)。Init 阶段在第一次调用期间发生,或在函数调用之前(如果已启用预置并发)发生。

    Init 阶段分为三个子阶段:Extension initRuntime initFunction init。这些子阶段确保所有扩展和运行时在函数代码运行之前完成其设置任务。

  • Invoke:在此阶段,Lambda 调用函数处理程序。函数运行到完成后,Lambda 准备处理另一个函数调用。

  • Shutdown:如果 Lambda 函数在一段时间内没有接收任何调用,则会触发此阶段。在 Shutdown 阶段,Lambda 终止运行时,提醒扩展以使其干净停止,然后删除环境。Lambda 向每个扩展发送一个 Shutdown 事件,该事件告诉扩展此环境就要关闭。

Init 阶段,Lambda 将包含扩展的层提取到执行环境中的 /opt 目录中。Lambda 在 /opt/extensions/ 目录中查找扩展,将每个文件解释为启动扩展的可执行引导程序,并且并行启动所有扩展。

对性能和资源的影响

函数的扩展的大小将计入部署包大小限制。函数和所有扩展解压后的总大小不得超过解压后的部署程序包大小限制,即 250 MB。

扩展可能会影响函数的性能,因为它们共享函数资源,如 CPU、内存和存储。例如,如果扩展执行计算密集型操作,那么您可能会发现函数的执行时间增加。

每个扩展都必须在 Lambda 调用函数之前完成其初始化。因此,占用大量初始化时间的扩展可能会增加函数调用的延迟。

要测量扩展在函数执行后所花的额外时间,可以使用PostRuntimeExecutionDuration 函数指标。要衡量所使用的内存增加量,可以使用 MaxMemoryUsed 指标。要了解特定扩展的影响,您可以并行运行不同版本的函数。

权限

扩展可以访问与函数相同的资源。由于扩展是在与函数相同的环境中执行的,因此在函数和扩展之间共享权限。

您可以创建一个 AWS CloudFormation 模板,以简化将相同扩展配置 AWS Identity and Access Management (包括 (IAM) 权限)附加到多个函数的任务。

配置扩展

要使用外部扩展,请将扩展作为 Lambda 层添加到函数中。使用层可让您在整个组织或整个 Lambda 开发人员社区中共享扩展。您可以向层添加一个或多个扩展。您最多可以为一个函数注册 10 个扩展。

您可以使用与任何层相同的方法将扩展添加到函数中。有关更多信息,请参阅配置函数以使用层

将扩展添加到您的函数(控制台)

  1. 打开 Lambda 控制台的“函数”页面

  2. 选择函数。

  3. 设计器下,选择

  4. 下,选择添加层

  5. 对于选择层,选择指定 ARN

  6. 对于指定 ARN,输入扩展层的 Amazon 资源名称 (ARN)。

  7. 选择 Add

后续步骤

要了解有关扩展的更多信息,我们建议使用以下资源: