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功能的应用程序。