专栏名称: 亚马逊云科技
亚马逊AWS的公众号,第一时间获取关于AWS国内外服务的资讯。AWS中国(北京)区域由光环新网运营。
51好读  ›  专栏  ›  亚马逊云科技

大咖专栏 | 深入Serverless—让Lambda 和 API Gateway支持二进制数据

亚马逊云科技  · 公众号  ·  · 2017-06-01 18:27

正文

请到「今天看啥」查看全文



大咖专栏

大咖专栏主要刊登亚马逊AWS诸位大咖亲自撰写的Blog,内容涉猎广泛,话题讨论前沿,且与实战紧密相连。我们非常欢迎小伙伴们在评论区留言,与大咖互动交流!


今天为大家撰文的大咖,是我们的AWS解决方案架构师—— 薛峰 老师

薛峰

AWS解决方案架构师

薛峰负责AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入AWS之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。

1. 概述

Serverless即无服务器架构正在迅速崛起,AWS Lambda 和AWS API Gateway作为Serverless 架构主要的服务,正受到广泛关注,也有越来越多用户使用它们,享受其带来的便利。

传统上来说,Lambda 和API Gateway主要用以实现RESTful接口,其响应输出结果是JSON数据,而实际业务场景还有需要输出二进制数据流的情况,比如输出图片内容。 本文以触发式图片处理服务为例,深入挖掘Lambda 和 API Gateway的最新功能,让它们支持二进制数据,展示无服务器架构更全面的服务能力。


先看一个经典架构的案例

响应式主动图片处理服务


Lambda配合 S3 文件上传事件触发在后台进行图片处理,比如生成缩略图,然后再上传到 S3,这是Lambda用于事件触发的一个经典场景。


http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

在实际生产环境中

这套架构还有一些局限,比如:


· 后台运行的图片处理可能无法保证及时完成,用户上传完原图后需要立即查看缩略图时还没有生成。


· 很多图片都是刚上传后使用频繁,一段时间以后就使用很少了,但是缩略图还不能删,因为也可能有少量使用,比如查看历史订单时。


· 客户端设备类型繁多,一次性生成所有尺寸的缩略图,会消耗较多Lambda运算时间和 S3 存储。


· 如果增加了新的尺寸类型,旧图片要再生成新的缩略图就比较麻烦了。

我们使用用户触发的架构来实现实时图片处理服务,即当用户请求某个缩略图时实时生成该尺寸的缩略图,然后通过 CloudFront缓存在CDN上。这其实还是事件触发执行Lambda,只是由文件上传的事件主动触发,变成了用户访问的被动触发。但是只有原图存储在S3,任何尺寸的缩图都不生成文件不存储到S3。要实现此架构方案,核心技术点就是让Lambda和API Gateway可以响应输出二进制的图片数据流。

总体架构图如下:

主要技术点:

·    涉及服务都是AWS完全托管的,自动扩容,无需运维,尤其是 Lambda,按运算时间付费,省去EC2 部署的繁琐。


·    原图存在 S3 上,只开放给 Lambda 的读取权限,禁止其它人访问原图,保护原图数据安全。


·    Lambda 实时生成缩略图,尽管Lambda目前还不支持直接输出二进制数据,我们可以设置让它输出base64编码后的文本,并且不再使用JSON结构。配合API Gateway可以把base64编码后的文本再转换回二进制数据,最终就可以实现输出二进制数据流了。


·    用 API Gateway 实现图片访问的URL。我们常见的API Gateway用来做RESTful 的API接口,接口的 URL形式通常是 /resource?parameter=value,其实还可以配置成不用GET参数,而把URL中的路  径部分作参数映射成后端的参数。


·    回源 API Gateway,缓存时间可以用户自定义,建议为24小时。直接支持 HTTPS,支持享用AWS全球边缘节点。


·    CloudFront 上还可使用 Route 53 配置域名,支持用户自己的域名。

相比前述的主动生成,

被动触发生成有以下便利或优势:


·    缩略图都不存储在S3上,节省存储空间和成本。

·    方便给旧图增加新尺寸的缩略图。

在接下来的内容里,我们会介绍:


2. 如何部署与配置Lambda和API Gateway

2.1 使用IAM设置权限

2.2 使用S3 配置原图存储

2.3 创建Lambda函数

2.4 配置API Gateway

2.4.1 配置API

2.4.2 部署API

2.5 配置CloudFront分发

2.6  Route 53

3. 效果预测

4. 监控

4.1 Lambda 监控

4.2 API Gateway 监控

4.3 CloudFront日志

5. 小结


请感兴趣的小伙伴点击“ 阅读原文

或扫描/长按识别下方的二维码

阅读完整版文章








请到「今天看啥」查看全文