内容简介
本书以实例为驱动,教会读者如何使用事件驱动的方法来开发后端应用程序。从AWSLambda的基础介绍开始,逐渐深入地讲解了从Web或移动端调用Lambda函数的常见例子和模式。本书的第二部分把这些简单的例子组合在一起,构成了一个更大的应用。后,读者将学会如何在AWS平台上构建应用程序,满足高可用性、高安全性、高性能和高扩展性的要求。
作者简介
Danilo Poccia,是 Web Services的技术专员,他是AWS Lambda工具的创建者之一,这种工具通过外部事件驱动的服务可以简化认证并整合AWS资源。
目录
赞誉
中文版序
推荐序
译者序
前言
关于原书封面插图
第一部分 快速入门
第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 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 Cognito身份管理服务概述100
6.2 外部身份提供方103
6.3 集成自定义身份认证104
6.4 处理认证和非认证用户105
6.5 使用 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 使用 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 在 S3中定义对象的命名空间202
11.3 为 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 在 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
前言/序言
最简单的服务器,就是没有服务器。
—Werner Vogel,亚马逊CTO1996年我开始接触客户端-服务器架构,体验过分布式系统的先进和复杂。21世纪初,我与电信和媒体的客户合作过几个大型项目,那时我切身体会到计算、存储和网络的限制会成为阻碍公司创新的瓶颈。
接着在关键性的2006年,以“按需”(utility)模式使用计算资源—就像使用能源、汽油和水那样—开始成为现实。那年AWS发布了它的首个存储服务( S3)和计算服务( EC2)。我对它们都产生了强烈的兴趣和好奇。
自2012年起,我专注于帮助客户在云端实现应用,或者把应用迁移到云端。为了更熟悉手头的新服务、新平台,我决定用 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系统开发者都是至关重要的。
本书的目标读者是那些没有云技术经验,同时希望了解无服务器计算和事件驱动应用前沿技术的开发人员。如果你已经对 EC2和 VPC这类AWS服务有所了解,本书将为你开辟一个新的认知视角,帮助你用服务而非服务器的角度构建应用程序。
代码规范本书的每个专题都附带了丰富的样例。大段代码或夹在文本中的代码都会用等宽字体显示,以区别于正文。类、方法名、对象属性,以及其他代码相关的术语和内容,也都会使用等宽字体。
获取源代码本书中的一些源代码可以从以下网站获得。
致谢我要感谢许多人。这些年来,他们与我并肩工作、交换想法、分享有趣的点子,让我从中获益匪浅。我不喜欢列名单,所以这里没有他们的名单。我相信那些帮助过我的人能从中读出我的谢意。这里需要特别感谢几位仁兄: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,她陪伴我度过了撰写这本书的每一个周末,目睹了背后所有的努力。献给我的父母,他们在我年幼时就开始支持我学习计算机。献给我的兄弟,他们给予了我支持。
关于原书封面插图 about the cover illustration英文原书的封面图片名为“Femme Kamtschadale”(来自勘察加的女人)。此图取材于法国人Jacques Grasset de Saint-Sauveur(1757—1810)于1797年出版的《Costumes de Différents Pays》一书,书中的每幅插图都是人工精心绘制的。
该书向我们展示了两个世纪前世界上各个地区的文化差异。当时的人们分居地球的不同角落,操着不同的语言口音。在陋巷、在乡野,仅通过人们的衣着,就能判断他们的居所和阶级。
后来,人们的衣着改变了,不同地区的文化差异也日渐式微。现在就连不同大洲的居民都难辨彼此,更遑论不同村、不同乡、不同国的人。或许,我们把文化差异拿
AWS Lambda实战:开发事件驱动的无服务器应用程序 电子书 下载 mobi epub pdf txt