《Serverless架构:无伺服器套用与AWS Lambda》
彻底颠覆Iaas|SaaS|PaaS 释放云计算潜力 面向未来云架构 高弹性|低成本|按需使用资源
【英】Peter Sbarski (彼得萨巴斯基),【澳】Sam Kroonenburg(萨姆克鲁内伯格) 着
覃宇 李源 罗丽 译
ISBN 978-7-121-34268-4
2018年8月出版
定价:108.00元
384页
16开
基本介绍
- 书名:Serverless架构:无伺服器套用与AWS Lambda
- 作者:【英】Peter Sbarski (彼得萨巴斯基),【澳】Sam Kroonenburg(萨姆克鲁内伯格)
- 译者:覃宇,李源,罗丽
- ISBN:978-7-121-34268-4
- 页数:384页
- 定价:108.00元
- 出版社:电子工业出版社
- 出版时间:2018.8
- 装帧:平装
- 开本:16开
编辑推荐
向无伺服器云架构的转变是大势所趋。随着无伺服器计算机技术(如 AWS Lambda)的发布,开发者正在构建大规模的完全无伺服器的平台。在这些新架构中,传统的后端伺服器被云函式所取代,这些函式充当着单一用途的分散的服务。通过将这些无伺服器的云函式以一种鬆散的编排方式组合在⼀起,并採用有效的第三方服务,开发人员可以创建功能强大且易于理解的应⽤程式。
《Serverless架构:无伺服器套用与AWS Lambda》将教你如何构建、保护和管理无伺服器架构,为要求最苛刻的 Web 和移动应⽤提供⽀持。本书中现成的真实案例、代码片段、图表和架构描述都可以被轻鬆地应⽤,来帮助你快速完成任务。最终,你将能够在 AWS 上设计和构建自己的无伺服器应⽤程式。本书内容包括:
√ 无伺服器计算的初始步骤
√ 重要的设计模式和架构
√ 编写 AWS Lambda 函式并使用 API Gateway
√ 使用像 Auth0 和 Firebase 这样的关键服务来组合无伺服器应用程式
√ 保护、部署和管理无伺服器架构
内容提要
无伺服器是软体架构世界中的热门新话题,它充分利用大量的云平台服务,让开发者只需关注核心业务逻辑的实现。同时,它按需分配和使用资源的运行方式,在降低基础设施成本的同时还能获得强大的弹性。
《Serverless架构:无伺服器套用与AWS Lambda》的作者Peter Sbarski 是最早完全拥抱无伺服器架构的开发者之一,他将自己在套用无伺服器架构中获得的宝贵经验总结成本书,呈现给广大的读者。更难能可贵的是,全书贯穿了AWS Lambda 实例和大量相关的练习。读者一边阅读,一边动手完成练习,就可以循序渐进地掌握无伺服器架构的核心技术。无论你是软体开发新手,还是架构师老兵,《Serverless架构:无伺服器套用与AWS Lambda》都是不可多得的了解无伺服器架构的绝佳读物。
目录
序一 XIII
序二 XV
前言 XVII
致谢 XIX
关于本书 XXI
关于作者 XXIII
关于封面 XXIV
第 1 部分..踏上征途 1
1 ..无伺服器初探 3
1.1 来龙去脉 4
1.1.1 面向服务的架构与微服务 5
1.1.2 软体设计 6
1.2 无伺服器架构原则 9
1.2.1 根据需要使用计算服务执行代码 9
1.2.2 编写单一用途的无状态函式 10
1.2.3 设计基于推送的、事件驱动的管道 10
1.2.4 创建更厚、更强大的前端 11
1.2.5 拥抱第三方服务 12
1.3 从伺服器过渡到服务 12
1.4 无伺服器的利与弊 13
1.4.1 决策驱动因素 13
1.4.2 什幺时候使用无伺服器 14
1.5 本章小结 15
2 架构与模式 17
2.1 使用场景 17
2.1.1 应用程式后端 18
2.1.2 数据处理与操作 18
2.1.3 实时分析 19
2.1.4 遗留 API 代理 19
2.1.5 计画服务 19
2.1.6 机器人(Bot)和技能(Skill) 20
2.2 架构 20
2.2.1 计算即后端 20
2.2.2 遗留 API 代理 25
2.2.3 混合 26
2.2.4 GraphQL 28
2.2.5 计算即胶水 29
2.2.6 实时处理 31
2.3 模式 32
2.3.1 命令模式 32
2.3.2 讯息传输模式 33
2.3.3 优先权伫列模式 35
2.3.4 扇出模式 36
2.3.5 管道和过滤器模式 37
2.4 本章小结 38
3 ..建立无伺服器应用程式 39
3.1 24 小时视频 40
3.1.1 总体需求 41
3.1.2 Amazon Web Services(AWS) 42
3.1.3 创建第一个 Lambda 函式 44
3.1.4 命名你的 Lambda 46
3.1.5 本地测试 47
3.1.6 部署到 AWS 48
3.1.7 连线 S3 和 Lambda 50
3.1.8 在 AWS 中测试 51
3.1.9 观察日誌 53
3.2 配置 Simple Notification Service 54
3.2.1 连线 SNS 和 S3 55
3.2.2 从 SNS 接收电子邮件 58
3.2.3 测试 SNS 58
3.3 设定视频许可权 58
3.3.1 创建第二个函式 58
3.3.2 配置与安全 59
3.3.3 测试第二个函式 60
3.4 生成元数据 61
创建第三个函式和 FFprobe 61
3.5 收尾 64
3.6 练习 66
3.7 本章小结 67
4 ..设定你的云服务 69
4.1 安全模型和身份管理 70
4.1.1 创建和管理 IAM 用户 70
4.1.2 创建 IAM 组 73
4.1.3 创建角色 76
4.1.4 资源 77
4.1.5 许可权和策略 77
4.2 日誌与警报 79
4.2.1 设定日誌 80
4.2.2 日誌保留期 81
4.2.3 筛选器、指标和警报 81
4.2.4 搜寻日誌数据 83
4.2.5 S3 和日誌 83
4.2.6 关于警报的更多操作 84
4.2.7 CloudTrail 88
4.3 成本 90
4.3.1 创建账单提醒 91
4.3.2 监控和最佳化成本 92
4.3.3 使用 Simple Monthly Calculator 93
4.3.4 计算 Lambda 和 API Gateway 的成本 94
4.4 练习 96
4.5 本章小结 97
第 2 部分..深入核心 99
5 ..身份认证和授权 101
5.1 无伺服器环境中的身份认证 101
5.1.1 无伺服器方法 102
5.1.2 Amazon Cognito 104
5.1.3 Auth0 105
5.2 为 24 小时视频增加身份认证 106
5.2.1 计画 106
5.2.2 直接调用 Lambda 107
5.2.3 24 小时视频网站 108
5.2.4 Auth0 配置 110
5.2.5 在网站中加入 Auth0 113
5.2.6 测试 Auth0 的集成 118
5.3 与 AWS 集成 119
5.3.1 用户信息 Lambda 120
5.3.2 API Gateway 124
5.3.3 映射 126
5.3.4 通过 API Gateway 调用 Lambda 130
5.3.5 自定义授权方 130
5.4 委託令牌 135
5.4.1 真实案例 136
5.4.2 开通委託令牌 136
5.5 练习 137
5.6 本章小结 137
6 ..编排者 Lambda 139
6.1 Lambda 内幕 139
6.1.1 事件模型和源 140
6.1.2 推送和拉取事件模型 141
6.1.3 并发执行 142
6.1.4 容器重用 143
6.1.5 冷 Lambda 和暖 Lambda 143
6.2 编程模型 145
6.2.1 函式处理程式 145
6.2.2 事件对象 145
6.2.3 上下文对象 147
6.2.4 回调函式 147
6.2.5 日誌 148
6.3 版本管理、别名和环境变数 148
6.3.1 版本管理 148
6.3.2 别名 150
6.3.3 环境变数 152
6.4 使用命令行界面(CLI) 154
6.4.1 调用命令 155
6.4.2 创建和部署函式 155
6.5 Lambda 模式 157
6.5.1 异步瀑布 158
6.5.2 序列与并行 163
6.5.3 使用库 164
6.5.4 把逻辑移到另一个档案中 167
6.6 测试 Lambda 函式 167
6.6.1 在本地测试 167
6.6.2 编写测试 168
6.6.3 在 AWS 中测试 171
6.7 练习 173
6.8 本章小结 173
7 ..API.Gateway 175
7.1 作为接口的 API Gateway 176
7.1.1 和 AWS 服务集成 177
7.1.2 快取、限制与日誌 177
7.1.3 阶段和版本管理 178
7.1.4 脚本 178
7.2 使用 API Gateway 178
7.2.1 计画 180
7.2.2 创建资源和方法 181
7.2.3 配置方法执行 185
7.2.4 Lambda 函式 187
7.2.5 更新网站 191
7.3 最佳化网关 194
7.3.1 限制 194
7.3.2 日誌 197
7.3.3 快取 199
7.4 阶段和版本管理 202
7.4.1 创建阶段变数 202
7.4.2 使用阶段变数 203
7.4.3 版本管理 205
7.5 练习 205
7.6 本章小结 206
第 3 部分..拓展架构 207
8 ..存储 209
8.1 更智慧型的存储 209
8.1.1 版本控制 210
8.1.2 託管静态网站 212
8.1.3 存储类别 214
8.1.4 对象生命周期管理 216
8.1.5 转移加速 217
8.1.6 事件通知 219
8.2 安全上传 220
8.2.1 架构 221
8.2.2 上传策略 Lambda 222
8.2.3 S3 CORS 配置 228
8.2.4 在网站中上传 228
8.3 限制对档案的访问 233
8.3.1 禁止公开访问 233
8.3.2 生成预签名 URL 233
8.4 练习 234
8.5 本章小结 235
9 ..资料库 237
9.1 Firebase 简介 238
9.1.1 数据结构 238
9.1.2 安全规则 240
9.2 为 24 小时视频添加 Firebase 241
9.2.1 架构 242
9.2.2 设定 Firebase 243
9.2.3 修改转码视频 Lambda 245
9.2.4 Transcode Video Firebase Update 函式 250
9.2.5 连线 Lambda 251
9.2.6 网站 253
9.2.7 端到端测试 258
9.3 安全访问档案 259
9.3.1 签名 URL Lambda 260
9.3.2 API Gateway 设定 261
9.3.3 再次更新网站 262
9.3.4 提升性能 262
9.3.5 提升 Firebase 安全性 265
9.4 练习 270
9.5 本章小结 270
10 ..最后一英里 271
10.1 部署与框架 271
10.2 迈向更好的微服务 272
10.3 Step Functions 277
10.4 AWS Marketplace 283
10.5 未来之路 285
A ..为无伺服器架构而生的服务 287
B ..安装和设定 293
C ..身份认证和授权的更多信息 305
D ..再探 Lambda 内幕 311
E ..模型和映射 317
F ..S3 事件讯息结构 335
G ..Serverless.Framework 和 SAM 337
前言
我是从 Sam Kroonenburg 那儿第一次听说 AWS Lambda 的。那时 Lambda 刚刚发布,但 Sam 对它的前景已经十分看好了。他和我谈起了在云端执行函式、AWS中自动化的巨大潜力,以及基于事件的工作流的开发。一切都如此令人着迷,充满了无限可能。不用配置和管理基础设施就能执行我的代码,这个想法看起来很酷而且马上就能梦想成真。作为软体工程师,我一直都想更专注于架构和代码,而不是基础设施、运维和系统管理。我用 Amazon Web Services 来实现这一切的机会来了。
几个月之后,API Gateway 横空出世,并解决了当时 Lambda 最大的问题。使用标準的 HTTP 请求调用 Lambda 函式成为可能。无须伺服器就创建快速且可扩展的应用程式后端,这个梦想在我们眼前变成了现实。我的第一个无伺服器项目是由Sam Kroonenburg 发起的 A Cloud Guru,现在已经发展成了一个大型的学习管理平台。这个平台是完全无伺服器的,运行成本非常低并可以快速地叠代。我们只需要专注于添加业务价值和新特性,而不需要担心基础设施管理和複杂的运维,这使我们的工作更有意思,而且这个平台还可以不可思议地扩展。
在构建 A Cloud Guru 的过程中,我们也意识到无伺服器并不是在 Lambda 中运行代码这幺简单,它还要用到第三方服务和产品。我们使用了託管身份认证服务和託管资料库,节省了数周甚至数月的开发时间。我们识别出了这个系统中的一些重要但不必自己构造的部分,比如支付处理和客户讯息。这些部分十分重要但我们不用重新造轮子。我们找到了完美契合我们无伺服器后端的不错的第三方服务,并将它们和系统其他部分集成到了一起。
第三个关键的话题当然就是选择正确的设计模式和架构了。我们发现,事件驱动的架构天然地适用于无伺服器应用程式,而我们也致力于让我们的系统完全由事件驱动。我们还考虑到了安全性、可靠性以及可扩展性,还有如何组合函式和后端服务来达到更好的效果。
自从帮助构建了第一个大规模无伺服器应用程式并回顾了其他无伺服器系统之后,我越来越清晰地意识到 :可扩展的云函式、可靠的第三方服务,以及无伺服器架构和设计模式的组合就是云计算演进的未来。未来几年,我们将看到初创公司和老牌企业都将採用无伺服器架构,这将帮助它们不断创新并赶超竞争对手。本书是对未来趋势的展望,也是如何起步的指导手册。我希望你喜欢本书并和我一起进入探索无伺服器的旅程。
没有来自我的同事、同行、家人和朋友的鼓励、反馈和支持,本书是不可能完成的。我很幸运地遇到了身边这些才华横溢的人,他们倾听并提出了宝贵的意见和观点。
关于本书
无论你是初学者还是专家,无论是刚开始 IT 职业生涯还是有数年的工作经验,这本书都将带你进入无伺服器架构的旅程。你会学习关键的设计模式,了解使用无伺服器方法的优劣,并使用 AWS Lambda、API Gateway、Elastic Transcoder、S3、Auth0 和 Firebase 构建你自己的视频分享网站。你还会学习许多 AWS 知识,以及那些值得推荐的用来管理和发布你的无伺服器应用程式的框架。
本书分为三部分。第一部分介了绍基本的无伺服器原理,探讨了关键的架构和设计模式。你会开始使用 AWS Lambda 构建第一个事件驱动的管道,并学习关键的AWS 服务。例如,无所不在的万能的 Identity and Access Management 服务。
第二部分重点关注了身份认证和授权、AWS Lambda 以及 API Gateway。这部分的所有章节对理解和构建无伺服器应用程式都很重要。读完这部分并完成示例之后,你将彻底掌握无伺服器应用程式所需的关键技术。
第三部分讨论了构建真实应用程式所需的其他服务和架构。这部分的关键重点是档案和数据存储,分别使用 S3 和 Google 的 Firebase 实现。最后一章补充了更多技术和服务的信息,它们可以用来扩展你的无伺服器应用程式。
在这本书的末尾,你会发现七个附录,它们为你提供了关于各种主题的额外信息。例如,最后一个附录涵盖了 Serverless 框架以及 Serverless Application Model(无伺服器应用程式模型,SAM)。你应该仔细阅读并尝试这个附录中的步骤。
AWS 和其他服务(如 Auth0 和 Firebase)的发展非常迅速,所以当你阅读本书时,如果某些截图或操作有所不同,请不要惊讶。无伺服器事件驱动架构的基本原理会保持不变,但是一些微末的细节,比如按钮的位置或是按钮的标籤,可能会随着时间不断变化。本书适用于那些 AWS 和云计算的新手开发者和解决方案架构师,也适合云计算开发老兵。我希望你会发现一种新方式,来构建成本更低、扩展性更好和趣味更多的应用程式!