AWS CTO Werner Vogels 在 AWS re:Invent 2014 大会的第二场主题演讲上公布了两个新服务和一系列新的实例,两个新服务都相当令人瞩目:第一个宣布的新服务是 Amazon EC2 Container Service ,跟 Docker 紧密联合的管理服务,令人兴奋,不过不是本篇报道的重点。
本篇报道主要想向大家介绍一下今天宣布的第二个服务: AWS Lambda 。
什么是 AWS Lambda?
根据 Jeff Barr 在博客上的描述,Lambda 是一个“可简单创建 Lambda 函数、无需管理的计算平台”。不过我们也可以这么理解:Lambda 是一个针对 AWS 计算资源的 IFTTT 脚本创建器和管理器。
举个例子:你有一个照片类应用。照片上传到 S3 之后,需要在 DynamoDB 上记录新照片的元数据。Lambda 的作用就是可以有一个地方放一个触发脚本来执行这个任务,而不用关心这个脚本运行在什么机器或者虚拟机上。
Vogels 在专访中表示,也可以将 Lambda 理解为将 functions(函数)从计算资源层抽象出来的服务。
Lambda 的设计理念
Werner Vogels 在主题演讲上简要叙述了 Lambda 设计思路的由来。
Vogels 首先抛出一个问题:什么是云计算的根本(primitives)?
答案:云计算是一个执行环境。
Vogels 再抛出第二个问题:什么是应用的根本?
答案:函数(functions,即业务逻辑的载体)+ 数据(data,即跟业务相关的输入与输出),以及这两者之间的交互——即事件(events。常见的事件如增加、变更、删除等)。
换言之,对于一个应用来说,除了 functions、data、events 这三个东西是根本之外,其他无论什么代码和框架,无非都是胶水或者 UI 罢了。
既然如此,理想的情况是用最少的时间写胶水,将做多的时间投入到应用的核心当中。
而最常见的胶水代码,就是触发器(trigger):当发生一个事件(event)时,执行某个函数(function),输出新的数据(data)。Vogels 以 Excel 表单为例:在一个表单当中,一个单元格数值的变更,触发总和列对应单元格数值的变更,就是一个事件触发函数将新的变量纳入计算得出新的数值的过程。这个过程是自动的,还可以是并发的,即一处变更同时触发多个函数。
基于这个思路,AWS 做了 Lambda 服务。
Lambda 的用法
以下内容来自于 Jeff Barr 的博文:
Lambda 服务的核心概念是 Lambda function(简称 function,函数),目前仅支持 Node.js。围绕 function 可以定义情景,包括执行环境(语言、内存、超时、IAM 角色)以及这个 function 要触发的另一个 function。function 的代码和有关情景的元数据均存储在 AWS 中,以 ARN (Amazon Resource Name)的方式被外部识别。如需包含第三方库,可以放在 ZIP 文件中上传。
function 上传之后,开发者可以将其指定到指定的 AWS 资源(如某个 S3 bucket,某个 DynamoDB 表,某个 Kinesis 流),然后 Lambda 就会建立该资源跟你的 function 之间的关联。当资源方面发生变动,Lambda 就会去自动张罗资源去执行你的 function。用于运行 function 的资源的创建分配和释放都有 Lambda 自动来做,开发者完全不需要去干预。
每一个 function 默认会指定一个比较短的执行时间上限,不过这个上限最高可以调整到 60 秒。
每一个 function 具有双重的 IAM 角色:一个是触发角色(invocation role),决定 Lambda 执行某个 function 的权限;另一个是执行角色(execution role),决定该 function 操作 AWS 资源的权限。
Lambda 会监控每个 function 的执行情况,并将请求数、延时、可用性、错误率等指标记录在 CloudWatch 里。控制台里可以看到过去 30 日的指标。
使用 Lambda 的两点须知:
- 情景信息设置了该 function 的可用内存,可设置到 128MB 到 1GB 之间的任何数值。Lambda 会这个数值选择相应的 CPU 能力、网络带宽和 IO 带宽。
- 每个 function 的触发可以使用最多 256 个进程或线程,占用本地 512MB 存储空间,1024 个文件描述符,以及 10 个出口网络连接。
- Lambda 对每个 AWS 账户设置了一系列管理限制。预览版期间,每个 function 最多可同时触发另外 25 个 function。
Lambda 服务的定价见官网,由请求数、function 运行期间使用的存储、运行期间使用的内存三部分组成。预览版期间有一部分免费的用量。
总结
Lambda 是让开发者们兴奋的服务,在 Twitter 上激起了大量讨论。Jeff Barr 表示 Lambda 后续还会有很多更新,比如对更多 AWS 资源的支持和对更多语言的支持。
除了 Amazon EC2 Container Service 和 AWS Lambda 之外,本次主题演讲还宣布了高性能 EC2 实例 C4,可挂载的 EBS 卷(SSD)可支持到 16TB 的尺寸。
评论