【51CTO.com快译】 无服务器计算模式正快速发展,这场竞赛的最终胜负又将如何?
AWS re: Invent 2016大会再有不到一周就将于拉斯维加斯召开。我们期待着此次盛会带来更多新鲜内容,特别是AWS阵营中最重要亦***普遍性的服务之一:Lambda。
过去几天以来,AWS方面已经发布了多项有趣的消息,相信在本届大会中还将有大量猛料全面出炉。
下面来看AWS迄今为止已经确认的各项重要内容。
AWS Lambda – 环境变量
大家曾经多少次将敏感信息以硬编码的方式直接添加至Lambda Function代码当中?大家又曾多少次利用错误的“开发”密钥部署了“生产”Lambda Function?
您有多少次仅仅是因为简单的配置参数变动,而不得不重新部署同样的Lambda Function?
我猜很多朋友和我一样,都被迫想办法利用复杂的自动化工具(例如Serveless框架)来解决这些繁琐的难题。
无论如何,现在我们终于可以利用AWS KMS安全存储在AWS Lambda之上原生配置环境变量了。这意味着我们的变量值将受到安全加密,并在需要时由AWS进行检索。
最有趣的是,大家也不再需要频繁变更自己的Lambda Function代码了,因为现在我们可以轻松从每套运行时(例如Node.js中的process.ev以及Python中的os.environ等)中读取标准环境的变量值。
在这里,我要强调这项新功能中的两大重要细节:
1. 存储空间上限为4 KB,每个变量拥有自己独立的4 KB容量。
2. 环境变量在各Function版本中恒定,意味着大家需要创建新的Version才能对其值进行更新,默认为$LATEST。
AWS SAM – 无服务器应用模式
AWS SAM可能是自AWS Lambda发布以来规模***的一次Serverless更新了。Tim Wager曾在今年早些时候于纽约召开的ServerlessConf大会上公布了Flourish项目。
AWS SAM正是Flourish的新名称,其目标在于成为***套面向无服务器应用的厂商中立性参考方案。
在实践中,AWS SAM能够轻松定义由无服务器应用使用的全部资源。这种新模式允许大家利用Amazon CloudFormation为无服务器应用进行特定资源优化。这种能力特别适用于进一步优化负责对Lambda Function、API Gateway API以及DynamoDB Table等进行部署与管理的一切自动化工具及框架。
从技术角度讲,大家最终可仅利用几行文本定义一款无服务器应用。事实上,大家完全能够使用新的AWS::Serverless CloudFormation命名空间。
以下为全新资源类型的汇总列表:
· AWS::Serverless::Function:代表一项AWS Lambda Function,其中包含其IAM角色(或者策略列表)、环境配置、VPC配置以及事件映射等。
· AWS::Serverless::API:代表一组API网关资源与方法集合。需要注意的是,大家不需要手动定义此资源(其将由AWS::Serverless::Function事件映射进行自动引用),除非您希望生成更为准确的Swagger文档。
· AWS::Serverless::SimpleTable:代表位于单一属性主键中的一套DynamoDB表。如果大家需要其它先进DynamoDB功能,亦可使用完整的AWS::DynamoDB::Table资源。
举例来说,大家可以通过以下方式为一套DynamoDB表定义一个简单的只仅API:
1.AWSTemplateFormatVersion: '2010-09-09'
2.Transform: AWS::Serverless-2016-10-31
3.Description: Ready-only access to DynamoDB table.
4.Resources:
5.MyReadOnlyFunction:
6.Type: AWS::Serverless::Function
7.Properties:
8.Handler: index.get
9.Runtime: python27
10.Policies: AmazonDynamoDBReadOnlyAccess
11.Environment:
12.Variables:
13.TABLE_NAME: !Ref ItemsTable
14.Events:
15.ReadItem:
16.Type: Api
17.Properties:
18.Path: /item/{itemId}
19.Method: get
20.ItemsTable:
21.Type: AWS::Serverless::SimpleTable
遗憾的是,目前部分原生Lambda事件源尚不受支持——例如AWS CodeCommit——不过我将时刻关注其***动态以及无服务器应用开发流程的未来变化。如果大家对此抱有兴趣,查看该项目的GitHub库。
API Gateway – 二进制数据支持
我发现很多AWS用户一直在热切期待这项功能的出现。API Gateway目前只支持JSON栽荷与响应,而且多媒体相关API资源的实现仍然非常困难——至少技术难度较高。
Amazon API Gateway现在正式支持二进制数据!
— Amazon Web Services (@awscloud) 2016年11月18日
现在大家可以提交二进制载荷了——例如一幅巨大的PNG图像——而二进制响应会正确将其显示为尺寸经过调整的效果。
要实现这一点,大家只需要定义两个选项:
1. 首先是Integration与IntegrationResponse的contentHandling属性,其可被设定为CONVERT_TO_BINARY或者CONVERT_TO_TEXT。
2. RestApi资源的binaryMediaTypes,其中包含一份您希望作为二进制数据处理的MIME类型列表。
遗憾的是,新的contentHandling属性目前尚未受到AWS Lambda内各API Gateway资源的全面支持——其仍会将请求本体转换为JSON。我期待着这方面的更多后续消息。
另一种有趣的用例则是如何利用API Gateway与Lambda实现gzipped responses,其主要适用于您的JSON响应体积庞大且易于缓存的情况。截至目前,惟一的可行方案是通过额外的CloudFront分发建立API Gateway,或者在您的客户机上实现一项定制化解压功能。
更多无服务器新闻 – 不只是AWS
无服务器生态系统目前正朝着多个文峰发展壮大,且亦有其它多家厂商积极参与进来以影响这一轮无服务器化革命。以下新闻虽然与AWS并无直接关联,亦不会影响到即将召开的AWS re: Invent大会,但却仍然值得关注。
Serverless Framework 1.2——新的里程碑
Serverless Framework自刚刚六个月前问世以来已经发生了巨大变化。当时其版本号仅为0.5,但几个月间其发展势头强劲,且完成一轮数额达300万美元的融资活动。
在10月12日发布了1.0版本之后,开发团队公布了一项双周发布计划,而1.2版本正是这项计划的***产物,其中包括:
· 支持AWS Lambda环境变量。
· 每函数自定义IAM角色。
· 为CloudFormation资源提供更好的命名定制化能力。
· 改进本地执行与错误处理机制。
· 简化打包并可将配置纳入其中。
大家可以在GitHub上找到该项目的全部发展里程碑设置。其下个版本1.3将于11月30日推出,且将带来更多激动人心的功能。毫无疑问,其也将在本届AWS re: Invent大会上为我们带来大量重量级新闻。
举例来说,其已经打造出名为Serverless Dashboard的全新开源项目,其代表着新的用户友好层,立足于Serverless CLI之上并用于强化该框架的用户体验。
以下为其Mac版本原生应用的屏幕内容,大家可以在GitHub上找到这款应用:
Azure Function进入通用阶段
就在上周,微软公司宣布其Azure Function进入通用阶段。
微软于八个月之前刚刚公布Function即服务的预览版本,其支持C#、JavaScript、Python以及PHP。
这套新的无服务器平台将把众多大型企业及小型初创企业吸引至微软生态系统当中。事实上,其立足于Azure App Services创造出了一种新的应用模式,同时还衍生出Azure Bot Service等一系列新型服务。
我期待着未来这套平台上出现更多功能,也盼望它能够全面集成至Serverless Framework当中。
开源 Iron Functions
Iron.io公司公布了其***大型开源项目,即IronFunctions。该项目主要由Go语言编写而成,且将作为一套利用Kubernetes、Mesosphere、CloudFoundry、OpenShift以及Docker等开源技术构建混合/多云无服务器解决方案的新型途径存在。
选择Docker作为打包机制使得IronFunctions获得了语言中立性,不过该团队亦决定支持AWS Lambda打包格式以进一步提升可移植能力。另外,其还宣布将支持其它更多格式类型。
未来还将有什么新消息?
AWS在其re: Invent 2014大会上公布了Lambda,我相信本届大会还将有更多值得关注的新闻出现。另外,Serverless已经成为一种全球性趋势。每一家云服务供应商都打造出了自己的无服务器解决方案——其各有不同的实现方法与优势。与此同时,成百上千本地社区亦集结起来共享无服务器思路、愿望单项目并探讨现有问题。
以下是我个人面向未来几个月列出的无服务器模式许愿单。希望AWS能在下周为我带来惊喜!
· 声明依赖性管理: Node.js有package.json,Python有requirements.txt,Java则有manifest.xml。开发者就是希望通过这样的方式定义并管理自己的代码依赖性。
· 本地单元测试: 我希望直接在云中定义自己的测试套件,并由AWS Lambda处理其它麻烦的工作。虽然在本地运行上千项测试也不是不行,但为什么不借助Lambda强大的并发与速度优势加快用户的开发进度呢?
· 更长的执行时间:由于部分用户每天只需要20分钟运行其代码,为什么他们就不能启动EC2实例或者以递归方式调用Lambda Function?
· 支持更多语言:我能想到的支持范畴应该包括Ruby、PHP、Swift以及Python 3等等。如果AWS希望让开发者的日常生活变得更为轻松,那么原生支持能力绝对至关重要。而且需要强调的是,支持Docker并不是真正的***解决方案。
原文链接:
http://cloudacademy.com/blog/serverless-news-aws-reinvent-2016/
原文标题:Serverless News announced before AWS re:Invent 2016
原文作者:Alex Casalboni
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】