首页>参考读物>计算机科学与技术>软件与程序设计

AWS Lambda实战:开发事件驱动的无服务器应用程序
作者 : [意]达尼洛·波恰(Danilo Poccia) 著
译者 : 喻勇 刘智毅 王毅 译
出版日期 : 2017-09-21
ISBN : 978-7-111-57994-6
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 325
开本 : 16
原书名 : AWS Lambda in Action: Event-driven Serverless Applications
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书以实例为驱动,教会读者如何使用事件驱动的方法来开发后端应用程序。从 AWS Lambda 的基础介绍开始,逐渐深入地讲解了从 Web 或移动端调用 Lambda 函数的常见例子和模式。

图书特色

AWS Lambda工具创建者权威力作,以案例驱动,从零到一实现Serverless架构
国内第一本AWS Lambda实战手册,面向云计算创建分布式系统的最佳指南

Serverless这个概念被推出的那一刻我就感觉到这绝对是软件架构模式的一次颠覆式变化。而随着AWS Lambda的成熟和普及,我们只能感慨又一次低估了技术发展产生的那种迅猛力量。毫不夸张地讲,Serverless架构绝对是因云而生,并已经成为Cloud Native最主要的标志之一。本书不仅仅是一个技术教程、一本产品手册,更是一本面向云计算创建分布式系统的最佳指南。巧得很,本书的作者以及译者都是我工作多年的同事,感谢他们的努力才得以让我们奇文共赏,疑义相析。
—— 费良宏 AWS首席布道师

AWS Lambda是当前最受欢迎的Serverless服务之一,具有启动快速、资源利用率高以及扩展性强等优点,本书通过详实的例子,说明如何使用Lambda来构建Serverless应用的方法,很值得一读。
—— 张海宁 VMware中国研发中心,技术总监

Serverless架构作为Cloud Native应用的一种最佳实践,让创业者得以专注于业务逻辑的创新,极大地拓宽了创业者践行“精益创业”方法论的落地边界。而本书正是创业者从零到一实践Serverless架构的第一向导。
—— 丁立 华兴资本逐鹿X,CTO

AWS Lambda是Serverless新一代计算模式的第一个商业实现,通过结合AWS丰富的云服务,特别是IoT服务,有无限的创新空间。本书讲解深入浅出,为架构师开启了一扇全新的架构设计领域之门。
—— 罗文江 招商银行总行信息技术部架构办,云计算架构师

Serverless架构与其说是技术的变革,不如说是一种思维方式的转变。而本书用通俗易懂的语言介绍Severless架构的基本概念,同时结合AWS Lambda服务的实际应用,帮助我们很快实现这种转变。无论对开发人员、架构师还是决策者,本书都是一本值得一读的好书!
—— 季奔牛 上海思岚科技,云平台事业部总监


内容简介
本书以实例为驱动,教会读者如何使用事件驱动的方法来开发后端应用程序。全书分为四部分。第一部分(第1~3章)介绍了基础技术,比如AWS Lambda和Web API。第二部分(第4~12章)是本书的核心,讲解了事件驱动应用的构建方法,让你可以用事件串联多个函数,构建新的应用。第三部分(第13~15章)主要关注从开发到生产,帮助你优化DevOps流程。第四部分(第16章和第17章)介绍了如何把Lambda函数与AWS平台以外的服务整合起来,用AWS Lambda改进沟通方式,自动完成代码管理。
本书的目标读者是那些没有云技术经验,同时希望了解无服务器计算和事件驱动应用前沿技术的开发人员。如果你已经对Amazon EC2和Amazon VPC这类AWS服务有所了解,本书将为你开辟一个新的认知视角,帮助你用服务而非服务器的角度构建应用程序。

作者简介
达尼洛·波恰(Danilo Poccia) Amazon Web Services技术布道师,主要关注事件驱动编程和无服务器架构,以及移动平台和数据分析的技术和商业影响。Danilo的兴趣点包括 IT、物联网、模拟/建模、人工智能、机器学习和摄影。

译者简介
喻勇 在技术圈驰骋多年,曾担任过微软技术布道师,VMware Cloud Foundry生态建设负责人,并有幸引领了国内最早容器技术的创业浪潮。目前赋闲在家,翻译图书,学习新知。

刘智毅 毕业于复旦大学,获中文系和翻译系双学位,现供职于西山居工作室,从事特效设计和游戏开发。业余兼任技术翻译,致力于图形学、技术美术和行业资讯译介。

王毅 在洛杉矶担任You World CTO,负责搭建“出境享乐一族”的游乐体验的平台。历任 AWS大中华区解决方案架构师主管、阿里云资深技术专家、IBM 高级咨询经理。


图书前言

最简单的服务器,就是没有服务器。
—Werner Vogel,亚马逊CTO

1996年我开始接触客户端-服务器架构,体验过分布式系统的先进和复杂。21世纪初,我与电信和媒体的客户合作过几个大型项目,那时我切身体会到计算、存储和网络的限制会成为阻碍公司创新的瓶颈。
接着在关键性的2006年,以“按需”(utility)模式使用计算资源—就像使用能源、汽油和水那样—开始成为现实。那年AWS发布了它的首个存储服务(Amazon S3)和计算服务(Amazon EC2)。我对它们都产生了强烈的兴趣和好奇。
自2012年起,我专注于帮助客户在云端实现应用,或者把应用迁移到云端。为了更熟悉手头的新服务、新平台,我决定用Amazon S3作为后端存储,写一个共享式文件系统。我用Python编写实现方案,放到GitHub上开源,很快就遇上了一批志同道合的用户和贡献者。
2014年AWS Lambda横空出世时,我意识到自己已经站在变革大潮的前端。数月后一个阴雨绵绵的周末,我想我可以不借助任何实体服务器,编写一个完整的应用。仅需要浏览器上的HTML、CSS和JavaScript文件这类静态内容,配合Lambda函数在后端执行我的逻辑,再加上用事件来支配商业流程,应用就完成了。我写了一个“简单的”认证服务(详见本书第8~10章),再次放到GitHub上共享。反响之热烈出乎我的意料,显然,我抓住了开发者的痛点。
经验分享之谈最后就成了本书。我希望本书能帮助你接受无服务器计算的新趋势,开发出无与伦比的新应用,检验新技术、新数据。我随时洗耳恭听你的故事,帮助同道中人实现理想将是我无上的荣光。
关于本书
本书分为四部分。第一部分(第1~3章)介绍了基础技术,比如AWS Lambda和Web API。第二部分(第4~12章)是本书的核心,讲解了事件驱动应用的构建方法,让你可以用事件串联多个函数,构建新的应用。第三部分(第13~15章)主要关注从开发到生产,帮助你优化DevOps流程。第四部分(第16章和第17章)介绍了如何把Lambda函数与AWS平台以外的服务整合起来,用AWS Lambda改进沟通方式,自动完成代码管理。
本书自始至终的逻辑是递进的,建议按照顺序阅读。
如果你已经涉猎过AWS Lambda的基础内容,可以跳过第一部分,直接从第二部分开始,学习构建更为复杂的事件驱动应用。
第三部分和第四部分可以作为参考内容,帮助你实现新的想法,或者对照我所建议的做法,巩固对知识的掌握。
云计算的发展日新月异,因此我只能关注一些基本的概念,如分布式系统和事件驱动设计。在我看来,在这个分布式的世界里,这些内容对所有IT系统开发者都是至关重要的。
本书的目标读者是那些没有云技术经验,同时希望了解无服务器计算和事件驱动应用前沿技术的开发人员。如果你已经对Amazon EC2和Amazon VPC这类AWS服务有所了解,本书将为你开辟一个新的认知视角,帮助你用服务而非服务器的角度构建应用程序。
代码规范
本书的每个专题都附带了丰富的样例。大段代码或夹在文本中的代码都会用等宽字体显示,以区别于正文。类、方法名、对象属性,以及其他代码相关的术语和内容,也都会使用等宽字体。
获取源代码
本书中的一些源代码可以从以下网站获得:http://www.manning.com/aws-lambda-in-action和https://github.com/danilop/AWS_Lambda_in_Action。
致谢
我要感谢许多人。这些年来,他们与我并肩工作、交换想法、分享有趣的点子,让我从中获益匪浅。我不喜欢列名单,所以这里没有他们的名单。我相信那些帮助过我的人能从中读出我的谢意。这里需要特别感谢几位仁兄:Toni Arritola,他总能厘清我偶尔混乱的思路,用简明易懂的语言说出我的想法,让本书内容条理清晰;Brent Stains,他给了我许多极有价值的提示和技术视角;Mike Stephens,是他最先提出了让我写这本书的想法。
此外还要感谢不吝宝贵时间,为本书的改进建言献策的评论者们:Alan Moffet、Ben Leibert、Cam Crews、Christopher Haupt、Dan Kacenjar、Henning Kristensen、Joan Fuster、Justin Calleja、Michael Frey、Steve Rogers、Tom Jensen、Luis Carlos Sanchez Gonzalez(技术审校)。
谨以此书献给我的妻子Paola,她陪伴我度过了撰写这本书的每一个周末,目睹了背后所有的努力。献给我的父母,他们在我年幼时就开始支持我学习计算机。献给我的兄弟,他们给予了我支持。

上架指导

云计算

封底文字

费良宏,AWS首席布道师
Serverless这个概念被推出的那一刻我就感觉到这绝对是软件架构模式上的一次颠覆式的变化。而随着AWS Lambda的成熟和普及,我们只能感慨又一次低估了技术发展产生的那种迅猛的力量。毫不夸张地讲,Serverless架构绝对是因云而生,并已经成为Cloud Native最主要的标志之一。本书不仅仅是一个技术教程、一本产品手册,更是一本面向云计算创建分布式系统的最佳指南。巧得很,本书的作者以及译者都是我工作多年的同事,感谢他们的努力才得以让我们奇文共赏,疑义相析。

张海宁,VMware中国研发中心,技术总监
AWS Lambda是当前最受欢迎的Serverless服务之一,具有启动快速、资源利用率高以及扩展性强等优点,本书通过详实的例子,说明如何使用Lambda来构建Serverless应用的方法,很值得一读。

丁立,Boris华兴资本逐鹿X,CTO
Serverless架构作为Cloud Native应用的一种最佳实践,让创业者得以专注于业务逻辑的创新,极大地拓宽了创业者践行“精益创业”方法论的落地边界。而本书正是创业者从零到一实践Serverless架构的第一向导。

罗文江,招商银行总行信息技术部架构办,云计算架构师
AWS Lambda是Serverless新一代计算模式的第一个商业实现,通过结合AWS丰富的云服务,特别是IoT服务,有无限的创新空间。本书讲解深入浅出,为架构师开启了一扇全新的架构设计领域之门。

季奔牛,上海思岚科技,云平台事业部总监
Serverless架构与其说是技术的变革,不如说是一种思维方式的转变。而本书用通俗易懂的语言介绍Severless架构的基本概念,同时结合AWS Lambda服务的实际应用,帮助我们很快实现这种转变。无论对开发人员、架构师还是决策者,本书都是一本值得一读的好书!

译者序

运行在云平台之上的软件应该采取何种架构和交付方式?这一直是整个行业思考的问题。虚拟机是否过于“笨重”?容器常被质疑“新瓶装旧酒”。Amazon AWS在2014年率先发布了基于函数的无服务器计算平台AWS Lambda。这令人眼前一亮:它把云计算的抽象层面提升到了应用代码层,通过事件驱动机制实现AWS底层各类资源和服务之间的自动化协作。
Cloud Native是一个热门词汇,云计算时代的开发者需要思考如何更直接、更高效地利用云平台的整体能力,同时应对日益复杂的业务逻辑和技术架构。基于函数的无服务器计算无疑为这些问题提供了一个可行的解决之道:程序员聚焦在业务逻辑,把服务交互、事件驱动、底层资源管理这些基础设施层面的工作统统交给云平台来处理。
AWS Lambda发布仅仅三年,据笔者了解,Lambda在美国初创公司甚至成熟企业中已经有了非常广泛的应用。围绕着Lambda和函数式无服务器计算技术也涌现了一批高速成长的创业企业。这一切都证明,一个“无服务器生态”正在快速形成。据了解,AWS Lambda服务也会在不久的将来在中国区市场发布。这一切都是值得技术爱好者和职业开发者关注的热点。
Danilo Poccia是AWS的专业布道师,他撰写的本书是AWS Lambda和事件驱动无服务器应用程序开发领域极好的入门教材。作者对于AWS平台、Web应用开发和底层安全机制有非常深入地研究和实践,全书由若干应用开发实例贯穿前后,深入浅出,包含了大量的代码和最佳实践指导。
本书中文版由喻勇完成第1~6章和第8、15章的翻译,刘智毅完成第7章和第9~14章的翻译,第16、17章的翻译工作由王毅完成。喻勇同时承担了全书后期统稿和整体校对工作。本书虽然篇幅不长,但是包含了大量细节和代码,同时技术领域的跨度也较大,这些都对翻译工作带来了不小的挑战。三位译者虽然竭尽全力但是也难免有疏漏之处。幸运的是,在翻译过程中,我们得到了身边好友的帮助,他们花费大量业余时间,担任校对工作,仔细阅读了译稿,并指出大量术语和技术错误,我们在此表示特别感谢!
本书的校对分工和团队成员是:丁立(第1章),薛江波(第2章),曹辉(第3章),季奔牛(第4章),罗文江(第5章),阿正(Dean)(第6章),任小火(第7章),刘果(第8章),张海宁(第9章),明立波(第10章),归泳昆(第11章)。除了对应章节的校对工作,他们还认真阅读了全书,并提出了宝贵的建议。
在全书付梓之前,为了保证质量,丁立、曹辉、季奔牛以及思岚科技的CTO黄珏珅等好友号召他们所在公司技术团队大范围试读,在印刷之前又发现和修改了许多错误,在此向这几位好友所服务的两家公司—华兴资本逐鹿X团队(丁立担任CTO)和上海思岚科技(黄珏珅、曹辉和牛哥)表示感谢。这两家公司在移动大数据应用和机器人自主定位导航领域都处于国内领先地位,也已经开始使用无服务器技术进行开发。
我们也在此特别感谢机械工业出版社华章分社的温莉芳老师和和静老师,感谢出版社在国内尚无AWS Lambda服务的阶段就决定引进本书的“冒险尝试”,也感谢出版社对译者工作的支持和帮助!
译者介绍
喻勇
在技术圈驰骋多年,曾担任过微软技术布道师,VMware Cloud Foundry生态建设负责人,并有幸引领了国内容器技术的创业浪潮。目前赋闲在家,翻译图书,学习新知。
刘智毅
毕业于复旦大学,获中文系和翻译系双学位,现供职于西山居工作室,从事特效设计和游戏开发。业余兼任技术翻译,致力于图形学、技术美术和行业资讯译介。
王毅
在洛杉矶担任You World CTO,负责搭建“出境享乐一族”的游乐体验的平台。历任AWS大中华区解决方案架构师主管、阿里云资深技术专家、IBM高级咨询经理。

推荐序

再过几年,我们将看到如下局面:单靠一个创始人,这个能够使用无服务器技术的工程师,就能撑起一个十亿美元级别的创业公司。无服务器技术把如今的IT乱世带入了一个有迹可循的新世界—开发者无须等待任何人来审批一个新项目了。他们在服务器、架构、数据存储或配置工具上再无后顾之忧,可以在几分钟内构建一个新应用。从商业角度来看,无服务器是革命性的,因为在投产之前,开发者都不必支付任何费用,只有当客户开始使用服务了,开发者才需要付费。这事实上已经属于按需分配的经济模式了。
本书极好地普及了无服务器技术,也极好地深挖了AWS Lambda。
我初见作者Danilo Poccia,是在伦敦举行的亚马逊大会上。当时他负责一个工业分析的技术短会,我立刻就被他务实的方法论和对无服务器的动人热情吸引住了。作为一名布道师,Danilo有足够的经验把无服务器技术分析清楚,这一点在本书中体现得淋漓尽致。
本书清楚又详尽,内容和编排都是经过深思熟虑的。书中包含大量的小任务和函数,同时剔除了艰深复杂的跟配置服务器环境相关的内容,因此既适合初学者,也适合对无服务器技术基本概念(比如事件驱动编程)有所了解的读者。
书中提供的代码样本同样构架严谨,它们以JavaScript和Python的形式共享在GitHub上。Danilo从认证服务开始,一路讲到实战部署,由浅入深地讲解了无服务器应用的构建思路。他解释了无服务器为什么应该写成单一函数,以便部署到AWS Lambda中,由于无服务器是事件驱动的,他又进一步解释了如何整合第三方服务,从而实现函数即服务。
AWS已经成为云技术的工业标准,而无服务器将对AWS的使用方式产生巨大的影响。在接下来的几年里,本书将成为软件开发的必读经典。

James Governor
RedMonk联合创始人

图书目录

赞誉
中文版序
推荐序
译者序
前言
关于原书封面插图
第一部分 快速入门
第1章 在云中运行函数2
1.1 AWS Lambda简介5
1.2 以函数作为应用程序的后端10
1.3 应对一切的单一后端11
1.4 事件驱动的应用程序13
1.5 从客户端调用函数17
总结20
第2章 属于你的第一个Lambda函数21
2.1 创建一个新的函数21
2.2 编写函数24
2.3 其他设置26
2.4 测试函数28
2.5 从Lambda API调用函数30
总结32
练习32
第3章 把函数作为Web API34
3.1 Amazon API Gateway简介34
3.2 创建API36
3.3 创建集成38
3.4 测试集成40
3.5 改变响应信息41
3.6 把资源路径作为参数46
3.7 使用API Gateway的上下文对象49
总结52
练习52
第二部分 构建事件驱动的应用程序
第4章 管理安全56
4.1 用户、组和角色57
4.2 理解策略60
4.3 实践策略63
4.4 使用策略变量68
4.5 赋予角色70
总结72
练习72
第5章 使用独立的函数74
5.1 在函数中打包库和模块74
5.2 让函数订阅事件76
5.2.1 创建后端资源77
5.2.2 把函数打包78
5.2.3 配置权限82
5.2.4 创建函数84
5.2.5 测试函数86
5.3 在函数中使用二进制库88
5.3.1 准备环境88
5.3.2 实现函数89
5.3.3 测试函数93
5.4 调度函数的执行94
总结98
练习98
第6章 用户身份管理100
6.1 Amazon Cognito身份管理服务概述100
6.2 外部身份提供方103
6.3 集成自定义身份认证104
6.4 处理认证和非认证用户105
6.5 使用Amazon Cognito的策略变量106
总结110
练习110
第7章 从客户端调用函数113
7.1 用JavaScript调用函数113
7.1.1 创建ID池114
7.1.2 为Lambda函数开放权限117
7.1.3 创建Web页面119
7.2 从移动应用中调用函数123
7.3 从浏览器调用函数127
总结131
练习131
第8章 设计基于Lambda的认证服务134
8.1 交互模式135
8.2 事件驱动架构137
8.3 使用Amazon Cognito服务141
8.4 保存用户配置文件142
8.5 向用户配置文件添加更多数据143
8.6 加密密码143
总结144
练习144
第9章 实现基于Lambda的认证服务146
9.1 管理集中式配置147
9.2 对初始化和部署实现自动化149
9.3 共享代码150
9.4 创建应用的首页151
9.5 注册新用户152
9.6 验证用户邮件158
总结163
练习163
第10章 为认证服务添加更多功能168
10.1 处理密码遗忘168
10.2 处理密码重置175
10.3 处理用户登录180
10.4 为认证用户获取AWS令牌184
10.5 处理密码修改186
总结192
练习192
第11章 构建一个媒体共享应用195
11.1 事件驱动架构195
11.1.1 简化实现196
11.1.2 合并函数199
11.1.3 改进事件驱动架构201
11.2 在Amazon S3中定义对象的命名空间202
11.3 为Amazon DynamoDB设计数据模型204
11.4 客户端应用205
11.5 响应内容更新216
11.6 更新内容索引220
总结223
练习225
第12章 为什么选择事件驱动226
12.1 事件驱动架构总览227
12.2 从前端起步228
12.3 关于后端229
12.4 响应式编程232
12.5 通向微服务之路235
12.6 平台的扩展性237
12.7 可用性和适应性238
12.8 预估费用239
总结241
练习242
第三部分 从开发环境到生产部署
第13章 改进开发和测试244
13.1 本地开发244
13.1.1 用Node.js做本地开发245
13.1.2 用Python做本地开发246
13.1.3 社区工具247
13.2 日志与调试247
13.3 使用函数版本249
13.4 使用别名来管理不同环境250
13.5 开发工具和框架251
13.5.1 Chalice Python微框架252
13.5.2 Apex无服务器架构254
13.5.3 Serverless框架256
13.6 简单的无服务器测试258
总结260
练习260
第14章 自动化部署263
14.1 在Amazon S3上存储代码263
14.2 事件驱动的无服务器持续部署266
14.3 用AWS CloudFormation部署268
14.4 多区域部署274
总结276
练习276
第15章 自动化的基础设施管理279
15.1 对告警做出响应279
15.2 对事件做出响应282
15.3 近实时处理日志282
15.4 设定循环的活动283
15.5 跨区域的架构和数据同步284
总结287
练习287
第四部分 使用外部服务
第16章 调用外部服务290
16.1 管理密码和安全凭证290
16.2 使用IFTTT Maker通道294
16.3 向Slack团队发送消息296
16.4 自动管理GitHub代码库298
总结299
练习299
第17章 从其他服务获取事件301
17.1 谁在调用301
17.2 Webhook模式302
17.3 处理来自Slack的事件304
17.4 处理来自GitHub的事件305
17.5 处理来自Twilio的事件306
17.6 使用MongoDB作为触发器306
17.7 日志监控的模式307
总结308
练习308

教学资源推荐
作者: [美] 埃里克·伽玛(Erich Gamma) 理查德·赫尔姆(Richard Helm) 拉尔夫·约翰逊(Ralph Johnson) 约翰·威利斯迪斯(John Vlissides) 著
作者: [美]梁勇(Y.Daniel Liang) 著
作者: [美]贝赫鲁兹·A. 佛罗赞(Behrouz A.Forouzan) 理查德·F. 吉尔伯格(Richard F. Gilberg) 著
作者: 化志章 揭安全 钟林辉 编著
参考读物推荐
作者: Andrew Koenig,Barbara E. Moo
作者: 黄传禄 常建功 陈浩 编著
作者: 王寒 屈光辉 周雪彬 著