Serverless架构:无服务器应用与AWS Lambda
内容介绍
无服务器是软件架构世界中的热门新话题,它充分利用大量的云平台服务,让开发者只需关注核心业务逻辑的实现。同时,它按需分配和使用资源的运行方式,在降低基础设施成本的同时还能获得强大的弹性。本书的作者 Peter Sbarski 是完全拥抱无服务器架构的早期开发者之一,他将自己在应用无服务器架构中获得的宝贵经验总结成本书,呈现给广大的读者。更难能可贵的是,全书贯穿了 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 和 S355
- 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 用户
- 第 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