编辑推荐
物理数据中心需要很多设备,并且需要投入大量的时间和资源来管理。如果用户需要数据中心,又不希望自己搭建,Amazon Web Services(AWS)可能是一个不错的解决方案。无论用户是想分析实时数据,搭建软件即服务架构,还是运行一个电子商务的网站,AWS都可以为其提供可靠的基于云平台的可扩展服务。本书为读者介绍AWS 云平台的计算、存储和网络服务。读者将从云计算的概览开始,然后学习如何创建自己的账户,学习如何通过调用AWS API 以编程的方式控制AWS 的每个组件,以实现基础设施的自动化,学习存储数据的选项和相关技巧,学习如何使用私有网络隔离自己的系统来增强安全性。很后,本书还会教读者如何针对高可用性和容错进行设计。本书主要内容● 云计算概念和模式的概述。● 在AWS上部署应用程序。● 集成亚马逊的预构建服务。● 管理EC2服务器来降低成本。本书面向将分布式应用迁移到AWS 平台的开发者和DevOps工程师。
内容简介
Amazon Web Services(AWS)是亚马逊公司的云计算平台,它提供了一整套基础设施和应用程序服务,可以帮助用户在云中运行几乎一切应用程序。本书介绍了AWS云平台的核心服务,如计算、存储和网络等内容。读者还可以从本书中了解在云上实现自动化、保证安全、实现高可用和海量扩展的系统架构的很好实践。本书分4个部分,共14章。本书从介绍AWS的基本概念开始,引入具体的应用示例,让读者对云计算和AWS平台有一个整体的了解;然后讲解如何搭建包含服务器和网络的基础设施;在此基础上,深入介绍如何在云上存取数据,让读者熟悉存储数据的方法和技术;很后展开讨论在AWS上如何设计架构,了解实现高可用性、高容错率和高扩展性的很好实践。
作者简介
安德烈亚斯· 威蒂格(Andreas Wittig)和迈克尔· 威蒂格(Michael Wittig)都是软件工程师,也是专注于AWS和Web开发的顾问专家。
目录
- 第 一部分 AWS云计算起步
- 第 1章 什么是Amazon Web Services 3
- 1.1 什么是云计算 4
- 1.2 AWS可以做什么 4
- 1.2.1 托管一家网店 5
- 1.2.2 在专有网络内运行一个Java EE应用 6
- 1.2.3 满足法律和业务数据归档的需求 7
- 1.2.4 实现容错的系统架构 8
- 1.3 如何从使用AWS上获益 9
- 1.3.1 创新和快速发展的平台 9
- 1.3.2 解决常见问题的服务 9
- 1.3.3 启用自动化 10
- 1.3.4 灵活的容量(可扩展性) 10
- 1.3.5 为失效而构建(可靠性) 11
- 1.3.6 缩短上市的时间 11
- 1.3.7 从规模经济中受益 11
- 1.3.8 全球化 11
- 1.3.9 专业的合作伙伴 12
- 1.4 费用是多少 12
- 1.4.1 免费套餐 12
- 1.4.2 账单样例 13
- 1.4.3 按使用付费的机遇 14
- 1.5 同类对比 14
- 1.6 探索AWS服务 16
- 1.7 与AWS交互 18
- 1.7.1 管理控制台 19
- 1.7.2 命令行接口 20
- 1.7.3 SDK 20
- 1.7.4 蓝图 21
- 1.8 创建一个AWS账户 22
- 1.8.1 注册 22
- 1.8.2 登录 26
- 1.8.3 创建一个密钥对 28
- 1.8.4 创建计费告警 31
- 1.9 小结 31
- 第 2章 一个简单示例:5分钟搭建WordPress站点 33
- 2.1 创建基础设施 33
- 2.2 探索基础设施 39
- 2.2.1 资源组 40
- 2.2.2 Web服务器 41
- 2.2.3 负载均衡器 42
- 2.2.4 MySQL数据库 44
- 2.3 成本是多少 45
- 2.4 删除基础设施 46
- 2.5 小结 48
- *二部分 搭建包含服务器和网络的虚拟基础设施
- 第3章 使用虚拟服务器:
- EC2 51
- 3.1 探索虚拟服务器 51
- 3.1.1 启动虚拟服务器 52
- 3.1.2 连接到虚拟服务器 60
- 3.1.3 手动安装和运行软件 63
- 3.2 监控和调试虚拟服务器 64
- 3.2.1 显示虚拟服务器的日志 64
- 3.2.2 监控虚拟服务器的负载 65
- 3.3 关闭虚拟服务器 66
- 3.4 更改虚拟服务器的容量 67
- 3.5 在另一个数据中心开启虚拟服务器 69
- 3.6 分配一个公有IP地址 72
- 3.7 向虚拟服务器添加额外的网络接口 74
- 3.8 优化虚拟服务器的开销 77
- 3.8.1 预留虚拟服务器 78
- 3.8.2 对未使用的虚拟服务器竞价 79
- 3.9 小结 82
- 第4章 编写基础架构:命令行、SDK和CloudFormation 83
- 4.1 基础架构即代码 84
- 4.1.1 自动化和DevOps运作 85
- 4.1.2 开发一种基础架构语言:JIML 85
- 4.2 使用命令行接口 88
- 4.2.1 安装CLI 88
- 4.2.2 配置CLI 89
- 4.2.3 使用CLI 94
- 4.3 使用SDK编程 98
- 4.3.1 使用SDK控制虚拟服务器:nodecc 98
- 4.3.2 nodecc如何创建一台服务器 99
- 4.3.3 nodecc是如何列出服务器并显示服务器的详细信息 101
- 4.3.4 nodecc如何终止一台服务器 102
- 4.4 使用蓝图来启动一台虚拟服务器 102
- 4.4.1 CloudFormation模板解析 103
- 4.4.2 创建第 一个模板 107
- 4.5 小结 113
- 第5章 自动化部署:CloudFormation、Elastic Beanstalk和OpsWorks 114
- 5.1 在灵活的云环境中部署应用程序 115
- 5.2 使用CloudFormation在服务器启动时运行脚本 116
- 5.2.1 在服务器启动时使用用户数据来运行脚本 116
- 5.2.2 在虚拟服务器上部署OpenSwan作为VPN服务器 116
- 5.2.3 从零开始,而不是更新已有的服务器 121
- 5.3 使用Elastic Beanstalk部署一个简单的网站应用 121
- 5.3.1 Elastic Beanstalk的组成部分 121
- 5.3.2 使用Elastic Beanstalk部署一个Node.js应用Etherpad 122
- 5.4 使用OpsWorks部署多层架构应用 126
- 5.4.1 OpsWorks的组成部分 127
- 5.4.2 使用OpsWorks部署一个IRC聊天应用 128
- 5.5 比较部署工具 137
- 5.5.1 对部署工具分类 138
- 5.5.2 比较部署服务 138
- 5.6 小结 139
- 第6章 保护系统安全:IAM、安全组和VPC 140
- 6.1 谁该对安全负责 141
- 6.2 使软件保持*新 142
- 6.2.1 检查安全更新 142
- 6.2.2 在服务器启动时安装安全更新 143
- 6.2.3 在服务器运行时安装安全更新 144
- 6.3 保护AWS账户安全 145
- 6.3.1 保护AWS账户的root用户安全 146
- 6.3.2 IAM服务 146
- 6.3.3 用于授权的策略 147
- 6.3.4 用于身份认证的用户和用于组织用户的组 149
- 6.3.5 用于认证AWS的角色 150
- 6.4 控制进出虚拟服务器的网络流量 152
- 6.4.1 使用安全组控制虚拟服务器的流量 153
- 6.4.2 允许ICMP流量 154
- 6.4.3 允许SSH流量 155
- 6.4.4 允许来自源IP地址的SSH流量 156
- 6.4.5 允许来自源安全组的SSH流量 157
- 6.4.6 用PuTTY进行代理转发 159
- 6.5 在云中创建一个私有网络:虚拟私有云 160
- 6.5.1 创建VPC和IGW 162
- 6.5.2 定义公有堡垒主机子网 162
- 6.5.3 添加私有Apache网站服务器子网 164
- 6.5.4 在子网中启动服务器 165
- 6.5.5 通过NAT服务器从私有子网访问互联网 166
- 6.6 小结 168
- 第三部分 在云上保存数据
- 第7章 存储对象:S3和Glacierr 171
- 7.1 对象存储的概念 171
- 7.2 Amazon S3 172
- 7.3 备份用户的数据 173
- 7.4 归档对象以优化成本 175
- 7.4.1 创建S3存储桶配合Glacier使用 175
- 7.4.2 添加生命周期规则到存储桶 176
- 7.4.3 测试Glacier和生命周期规则 179
- 7.5 程序的方式存储对象 181
- 7.5.1 设置S3存储桶 181
- 7.5.2 安装使用S3的互联网应用 182
- 7.5.3 检查使用SDK访问S3的代码 182
- 7.6 使用S3来实现静态网站托管 184
- 7.6.1 创建存储桶并上传一个静态网站 185
- 7.6.2 配置存储桶来实现静态网站托管 185
- 7.6.3 访问S3上托管的静态网站 186
- 7.7 对象存储的内部机制 187
- 7.7.1 确保数据一致性 187
- 7.7.2 选择合适的键 188
- 7.8 小结 189
- 第8章 在硬盘上存储数据:EBS和实例存储 190
- 8.1 网络附加存储 191
- 8.1.1 创建EBS卷并挂载到服务器 191
- 8.1.2 使用弹性数据块存储 192
- 8.1.3 玩转性能 194
- 8.1.4 备份数据 195
- 8.2 实例存储 197
- 8.2.1 使用实例存储 200
- 8.2.2 性能测试 200
- 8.2.3 备份数据 201
- 8.3 比较块存储解决方案 201
- 8.4 使用实例存储和EBS卷提供共享文件系统 202
- 8.4.1 NFS的安全组 203
- 8.4.2 NFS服务器和卷 204
- 8.4.3 NFS服务器安装和配置脚本 206
- 8.4.4 NFS客户端 207
- 8.4.5 通过NFS共享文件 208
- 8.5 小结 209
- 第9章 使用关系数据库服务:RDS 210
- 9.1 启动一个MySQL数据库 212
- 9.1.1 用Amazon RDS数据库启动WordPress平台 212
- 9.1.2 探索使用MySQL引擎的RDS数据库实例 215
- 9.1.3 Amazon RDS的定价 217
- 9.2 将数据导入数据库 218
- 9.3 备份和恢复数据库 220
- 9.3.1 配置自动快照 220
- 9.3.2 手动创建快照 221
- 9.3.3 恢复数据库 222
- 9.3.4 复制数据库到其他的区域 223
- 9.3.5 计算快照的成本 224
- 9.4 控制对数据库的访问 224
- 9.4.1 控制对RDS数据库的配置的访问控制 225
- 9.4.2 控制对RDS数据库的网络访问 226
- 9.4.3 控制数据访问 226
- 9.5 可以依赖的高可用的数据库 227
- 9.6 调整数据库的性能 229
- 9.6.1 增加数据库资源 229
- 9.6.2 使用读副本来增加读性能 231
- 9.7 监控数据库 232
- 9.8 小结 234
- 第 10章 面向NoSQL数据库服务的编程:DynamoDB 235
- 10.1 操作DynamoDB 236
- 10.1.1 管理 236
- 10.1.2 价格 237
- 10.1.3 与RDS对比 237
- 10.2 *发者需要了解的DynamoDB内容 238
- 10.2.1 表、项目和属性 238
- 10.2.2 主键 238
- 10.2.3 与其他NoSQL数据库的对比 239
- 10.2.4 DynamoDB本地版 239
- 10.3 编写任务管理应用程序 239
- 10.4 创建表 241
- 10.4.1 使用分区键的用户表 242
- 10.4.2 使用分区键和排序键的任务表 243
- 10.5 添加数据 245
- 10.5.1 添加一个用户 246
- 10.5.2 添加一个任务 247
- 10.6 获取数据 247
- 10.6.1 提供键来获取数据 248
- 10.6.2 使用键和过滤来查询 249
- 10.6.3 更灵活地使用二级索引查询数据 251
- 10.6.4 扫描和过滤表数据 253
- 10.6.5 *终一致地数据提取 254
- 10.7 删除数据 255
- 10.8 修改数据 256
- 10.9 扩展容量 256
- 10.10 小结 258
- 第四部分 在AWS上搭架构
- 第 11章 实现高可用性:可用区、自动扩展以及
- CloudWatch 263
- 11.1 使用CloudWatch恢复失效的服务器 264
- 11.1.1 建立一个CloudWatch告警 266
- 11.1.2 基于CloudWatch对虚拟服务器监控与恢复 267
- 11.2 从数据中心故障中恢复 270
- 11.2.1 可用区:每个区域有多个数据中心 271
- 11.2.2 使用自动扩展确保虚拟服务器一直运行 275
- 11.2.3 在另一个可用区中通过自动扩展恢复失效的虚拟服务器 277
- 11.2.4 陷阱:网络附加存储恢复 280
- 11.2.5 陷阱:网络接口恢复 283
- 11.3 分析灾难恢复的需求 287
- 11.4 小结 288
- 第 12章 基础设施解耦:ELB与SQS 289
- 12.1 利用负载均衡器实现同步解耦 290
- 12.1.1 使用虚拟服务器设置负载均衡器 291
- 12.1.2 陷阱:过早地连接到服务器 293
- 12.1.3 更多使用场景 294
- 12.2 利用消息队列实现异步解耦 300
- 12.2.1 将同步过程转换成异步过程 300
- 12.2.2 URL2PNG应用的架构 301
- 12.2.3 创建消息队列 302
- 12.2.4 以程序化的方法处理消息 302
- 12.2.5 程序化地消费消息 303
- 12.2.6 SQS消息传递的局限性 306
- 12.3 小结 307
- 第 13章 容错设计 308
- 13.1 使用冗余EC2实例提高可用性 310
- 13.1.1 冗余可以去除单点故障 310
- 13.1.2 冗余需要解耦 312
- 13.2 使代码容错的注意事项 313
- 13.2.1 让其崩溃,但也重试 313
- 13.2.2 幂等重试使得容错成为可能 314
- 13.3 构建容错Web应用:Imagery 316
- 13.3.1 幂等图片状态机 318
- 13.3.2 实现容错Web服务 320
- 13.3.3 实现容错的工作进程来消费SQS消息 326
- 13.3.4 部署应用 329
- 13.4 小结 336
- 第 14章 向上或向下扩展:自动扩展和CloudWatch 337
- 14.1 管理动态服务池 339
- 14.2 使用监控指标和时间计划触发扩展 342
- 14.2.1 基于时间计划的扩展 343
- 14.2.2 基于CloudWatch参数的扩展 344
- 14.3 解耦动态服务器池 347
- 14.3.1 由负载均衡器同步解耦扩展动态服务器池 349
- 14.3.2 队列异步解耦扩展动态服务器池 354
- 14.4 小结 356