AWS re:Invent 2018 发布了很多新功能和服务,包括Lambda Layers,用于集中管理跨功能共享的代码和数据,以及 Lambda Runtime API,将 AWS Lambda 从 JavaScript 扩展到其他编程语言。
在 Lambda Layers 之前,需要打包和部署功能所使用的共享代码。而有了 Lambda Layers 之后,开发人员将公共组件放在 zip 文件中,并将其作为 Lambda Layer 资源上传。
Lambda Layers 通常是可预测的。例如,可以对层进行版本控制,以便更好地管理更新,并且每个版本都是不可变的。在配置函数时,它最多可以引用五个层,其中一个有可能是运行时。调用层的顺序是相关的,因为每个层都可以覆盖上一层的功能。AWS 技术布道师 Danilo Poccia 解释说:
第一层可以是运行时,第二层可以添加所需库的特定版本。
Lambda Layers 允许开发人员强制分离依赖项和自定义业务逻辑之间的关注点,让功能代码更加集中,从而加快部署,因为依赖项可能可以被重用。
AWS 团队提供了一些示例层,包括非常流行的 Python 库 NumPy 和 SciPy,帮助加快开发人员在数据处理和机器学习应用程序方面的工作进展。第三方也提供了 Lambda Layers,用于应用程序监控、安全和管理方面。
除了 Lambda Layers 之外,还有另一个更加重要的发布,即 Lambda 代码现在可以使用非 JavaScript 运行时。Runtime API 层为其他编程语言的代码和 Lambda 环境或其他 JavaScript 环境(比如来自NodeSource的N|Solid Node.js Lambda Runtime环境)之间提供了通信能力。
运行时之间的通信使用基于 HTTP 的接口来获取新调用的事件有效载荷,从函数中返回响应。
根据公告,目前有 C++、Ruby 和 Rust 运行时环境可用。AWS 正在与其他合作伙伴合作开发其他运行时环境,包括 Erlang(Alert Logic)、Elixir(Alert Logic)、Cobol(Blu Age)、Node.js(NodeSource N|Solid)和 PHP(Stackery)。未来的其他语言应该使用 Lambda Runtime API。
社区对 Lambda Runtime 的支持一直都很积极。谷歌开发人员 Kelsey Hightower 解释了他的 Lambda Runtime 使用经历:
在构建我的第一个自定义 Lambda 运行时之后,可以说,Lambda Runtime API 改写了游戏规则。Lambda Runtime API 和 Lambda Layers 之间的组合,让我不再认为添加对容器的支持会为 Lambda 带来任何额外的好处。与无服务器工作负载的容器相比,Lambda Runtime API 提供了一个主要好处:一个定义良好的运行时 API,可帮助我们更好地完成工作。
用户可以通过 AWS 控制台或AWS CLI使用 Lambda Layers 和 Runtime API。AWS无服务器应用程序模型(SAM)和SAM CLI也可用于测试、部署和管理使用了这些新的 Lambda 功能的应用程序。
查看英文原文:AWS Lambda Layers and Runtime API: beyond JavaScript
评论 2 条评论