Amazon Web Services(AWS)是亞馬遜公司的云計(jì)算平臺,它提供了一整套基礎(chǔ)設(shè)施和應(yīng)用程序服務(wù),可以幫助用戶在云中運(yùn)行幾乎一切應(yīng)用程序。本書介紹了AWS云平臺的核心服務(wù),如計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)等內(nèi)容。讀者還可以從本書中了解在云上實(shí)現(xiàn)自動(dòng)化、保證安全、實(shí)現(xiàn)高可用和海量擴(kuò)展的系統(tǒng)架構(gòu)的最佳實(shí)踐。
本書分4個(gè)部分,共14章。本書從介紹AWS的基本概念開始,引入具體的應(yīng)用示例,讓讀者對云計(jì)算和AWS平臺有一個(gè)整體的了解;然后講解如何搭建包含服務(wù)器和網(wǎng)絡(luò)的基礎(chǔ)設(shè)施;在此基礎(chǔ)上,深入介紹如何在云上存取數(shù)據(jù),讓讀者熟悉存儲(chǔ)數(shù)據(jù)的方法和技術(shù);最后展開討論在AWS上如何設(shè)計(jì)架構(gòu),了解實(shí)現(xiàn)高可用性、高容錯(cuò)率和高擴(kuò)展性的最佳實(shí)踐。
物理數(shù)據(jù)中心需要很多設(shè)備,并且需要投入大量的時(shí)間和資源來管理。如果用戶需要數(shù)據(jù)中心,又不希望自己搭建,Amazon Web Services(AWS)可能是一個(gè)不錯(cuò)的解決方案。無論用戶是想分析實(shí)時(shí)數(shù)據(jù),搭建軟件即服務(wù)架構(gòu),還是運(yùn)行一個(gè)電子商務(wù)的網(wǎng)站,AWS都可以為其提供可靠的基于云平臺的可擴(kuò)展服務(wù)。
本書為讀者介紹AWS 云平臺的計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)服務(wù)。讀者將從云計(jì)算的概覽開始,然后學(xué)習(xí)如何創(chuàng)建自己的賬戶,學(xué)習(xí)如何通過調(diào)用AWS API 以編程的方式控制AWS 的每個(gè)組件,以實(shí)現(xiàn)基礎(chǔ)設(shè)施的自動(dòng)化,學(xué)習(xí)存儲(chǔ)數(shù)據(jù)的選項(xiàng)和相關(guān)技巧,學(xué)習(xí)如何使用私有網(wǎng)絡(luò)隔離自己的系統(tǒng)來增強(qiáng)安全性。最后,本書還會(huì)教讀者如何針對高可用性和容錯(cuò)進(jìn)行設(shè)計(jì)。
本書主要內(nèi)容
● 云計(jì)算概念和模式的概述。
● 在AWS上部署應(yīng)用程序。
● 集成亞馬遜的預(yù)構(gòu)建服務(wù)。
● 管理EC2服務(wù)器來降低成本。
本書面向?qū)⒎植际綉?yīng)用遷移到AWS 平臺的開發(fā)者和DevOps工程師。
安德烈亞斯· 威蒂格(Andreas Wittig)和邁克爾· 威蒂格(Michael Wittig)都是軟件工程師,也是專注于AWS和Web開發(fā)的顧問專家。
第 一部分 AWS云計(jì)算起步
第 1章 什么是Amazon Web Services 3
1.1 什么是云計(jì)算 4
1.2 AWS可以做什么 4
1.2.1 托管一家網(wǎng)店 5
1.2.2 在專有網(wǎng)絡(luò)內(nèi)運(yùn)行一個(gè)Java EE應(yīng)用 6
1.2.3 滿足法律和業(yè)務(wù)數(shù)據(jù)歸檔的需求 7
1.2.4 實(shí)現(xiàn)容錯(cuò)的系統(tǒng)架構(gòu) 8
1.3 如何從使用AWS上獲益 9
1.3.1 創(chuàng)新和快速發(fā)展的平臺 9
1.3.2 解決常見問題的服務(wù) 9
1.3.3 啟用自動(dòng)化 10
1.3.4 靈活的容量(可擴(kuò)展性) 10
1.3.5 為失效而構(gòu)建(可靠性) 11
1.3.6 縮短上市的時(shí)間 11
1.3.7 從規(guī)模經(jīng)濟(jì)中受益 11
1.3.8 全球化 11
1.3.9 專業(yè)的合作伙伴 12
1.4 費(fèi)用是多少 12
1.4.1 免費(fèi)套餐 12
1.4.2 賬單樣例 13
1.4.3 按使用付費(fèi)的機(jī)遇 14
1.5 同類對比 14
1.6 探索AWS服務(wù) 16
1.7 與AWS交互 18
1.7.1 管理控制臺 19
1.7.2 命令行接口 20
1.7.3 SDK 20
1.7.4 藍(lán)圖 21
1.8 創(chuàng)建一個(gè)AWS賬戶 22
1.8.1 注冊 22
1.8.2 登錄 26
1.8.3 創(chuàng)建一個(gè)密鑰對 28
1.8.4 創(chuàng)建計(jì)費(fèi)告警 31
1.9 小結(jié) 31
第 2章 一個(gè)簡單示例:5分鐘搭建WordPress站點(diǎn) 33
2.1 創(chuàng)建基礎(chǔ)設(shè)施 33
2.2 探索基礎(chǔ)設(shè)施 39
2.2.1 資源組 40
2.2.2 Web服務(wù)器 41
2.2.3 負(fù)載均衡器 42
2.2.4 MySQL數(shù)據(jù)庫 44
2.3 成本是多少 45
2.4 刪除基礎(chǔ)設(shè)施 46
2.5 小結(jié) 48
第二部分 搭建包含服務(wù)器和網(wǎng)絡(luò)的虛擬基礎(chǔ)設(shè)施
第3章 使用虛擬服務(wù)器:
EC2 51
3.1 探索虛擬服務(wù)器 51
3.1.1 啟動(dòng)虛擬服務(wù)器 52
3.1.2 連接到虛擬服務(wù)器 60
3.1.3 手動(dòng)安裝和運(yùn)行軟件 63
3.2 監(jiān)控和調(diào)試虛擬服務(wù)器 64
3.2.1 顯示虛擬服務(wù)器的日志 64
3.2.2 監(jiān)控虛擬服務(wù)器的負(fù)載 65
3.3 關(guān)閉虛擬服務(wù)器 66
3.4 更改虛擬服務(wù)器的容量 67
3.5 在另一個(gè)數(shù)據(jù)中心開啟虛擬服務(wù)器 69
3.6 分配一個(gè)公有IP地址 72
3.7 向虛擬服務(wù)器添加額外的網(wǎng)絡(luò)接口 74
3.8 優(yōu)化虛擬服務(wù)器的開銷 77
3.8.1 預(yù)留虛擬服務(wù)器 78
3.8.2 對未使用的虛擬服務(wù)器競價(jià) 79
3.9 小結(jié) 82
第4章 編寫基礎(chǔ)架構(gòu):命令行、SDK和CloudFormation 83
4.1 基礎(chǔ)架構(gòu)即代碼 84
4.1.1 自動(dòng)化和DevOps運(yùn)作 85
4.1.2 開發(fā)一種基礎(chǔ)架構(gòu)語言: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控制虛擬服務(wù)器:nodecc 98
4.3.2 nodecc如何創(chuàng)建一臺服務(wù)器 99
4.3.3 nodecc是如何列出服務(wù)器并顯示服務(wù)器的詳細(xì)信息 101
4.3.4 nodecc如何終止一臺服務(wù)器 102
4.4 使用藍(lán)圖來啟動(dòng)一臺虛擬服務(wù)器 102
4.4.1 CloudFormation模板解析 103
4.4.2 創(chuàng)建第 一個(gè)模板 107
4.5 小結(jié) 113
第5章 自動(dòng)化部署:CloudFormation、Elastic Beanstalk和OpsWorks 114
5.1 在靈活的云環(huán)境中部署應(yīng)用程序 115
5.2 使用CloudFormation在服務(wù)器啟動(dòng)時(shí)運(yùn)行腳本 116
5.2.1 在服務(wù)器啟動(dòng)時(shí)使用用戶數(shù)據(jù)來運(yùn)行腳本 116
5.2.2 在虛擬服務(wù)器上部署OpenSwan作為VPN服務(wù)器 116
5.2.3 從零開始,而不是更新已有的服務(wù)器 121
5.3 使用Elastic Beanstalk部署一個(gè)簡單的網(wǎng)站應(yīng)用 121
5.3.1 Elastic Beanstalk的組成部分 121
5.3.2 使用Elastic Beanstalk部署一個(gè)Node.js應(yīng)用Etherpad 122
5.4 使用OpsWorks部署多層架構(gòu)應(yīng)用 126
5.4.1 OpsWorks的組成部分 127
5.4.2 使用OpsWorks部署一個(gè)IRC聊天應(yīng)用 128
5.5 比較部署工具 137
5.5.1 對部署工具分類 138
5.5.2 比較部署服務(wù) 138
5.6 小結(jié) 139
第6章 保護(hù)系統(tǒng)安全:IAM、安全組和VPC 140
6.1 誰該對安全負(fù)責(zé) 141
6.2 使軟件保持最新 142
6.2.1 檢查安全更新 142
6.2.2 在服務(wù)器啟動(dòng)時(shí)安裝安全更新 143
6.2.3 在服務(wù)器運(yùn)行時(shí)安裝安全更新 144
6.3 保護(hù)AWS賬戶安全 145
6.3.1 保護(hù)AWS賬戶的root用戶安全 146
6.3.2 IAM服務(wù) 146
6.3.3 用于授權(quán)的策略 147
6.3.4 用于身份認(rèn)證的用戶和用于組織用戶的組 149
6.3.5 用于認(rèn)證AWS的角色 150
6.4 控制進(jìn)出虛擬服務(wù)器的網(wǎng)絡(luò)流量 152
6.4.1 使用安全組控制虛擬服務(wù)器的流量 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進(jìn)行代理轉(zhuǎn)發(fā) 159
6.5 在云中創(chuàng)建一個(gè)私有網(wǎng)絡(luò):虛擬私有云 160
6.5.1 創(chuàng)建VPC和IGW 162
6.5.2 定義公有堡壘主機(jī)子網(wǎng) 162
6.5.3 添加私有Apache網(wǎng)站服務(wù)器子網(wǎng) 164
6.5.4 在子網(wǎng)中啟動(dòng)服務(wù)器 165
6.5.5 通過NAT服務(wù)器從私有子網(wǎng)訪問互聯(lián)網(wǎng) 166
6.6 小結(jié) 168
第三部分 在云上保存數(shù)據(jù)
第7章 存儲(chǔ)對象:S3和Glacierr 171
7.1 對象存儲(chǔ)的概念 171
7.2 Amazon S3 172
7.3 備份用戶的數(shù)據(jù) 173
7.4 歸檔對象以優(yōu)化成本 175
7.4.1 創(chuàng)建S3存儲(chǔ)桶配合Glacier使用 175
7.4.2 添加生命周期規(guī)則到存儲(chǔ)桶 176
7.4.3 測試Glacier和生命周期規(guī)則 179
7.5 程序的方式存儲(chǔ)對象 181
7.5.1 設(shè)置S3存儲(chǔ)桶 181
7.5.2 安裝使用S3的互聯(lián)網(wǎng)應(yīng)用 182
7.5.3 檢查使用SDK訪問S3的代碼 182
7.6 使用S3來實(shí)現(xiàn)靜態(tài)網(wǎng)站托管 184
7.6.1 創(chuàng)建存儲(chǔ)桶并上傳一個(gè)靜態(tài)網(wǎng)站 185
7.6.2 配置存儲(chǔ)桶來實(shí)現(xiàn)靜態(tài)網(wǎng)站托管 185
7.6.3 訪問S3上托管的靜態(tài)網(wǎng)站 186
7.7 對象存儲(chǔ)的內(nèi)部機(jī)制 187
7.7.1 確保數(shù)據(jù)一致性 187
7.7.2 選擇合適的鍵 188
7.8 小結(jié) 189
第8章 在硬盤上存儲(chǔ)數(shù)據(jù):EBS和實(shí)例存儲(chǔ) 190
8.1 網(wǎng)絡(luò)附加存儲(chǔ) 191
8.1.1 創(chuàng)建EBS卷并掛載到服務(wù)器 191
8.1.2 使用彈性數(shù)據(jù)塊存儲(chǔ) 192
8.1.3 玩轉(zhuǎn)性能 194
8.1.4 備份數(shù)據(jù) 195
8.2 實(shí)例存儲(chǔ) 197
8.2.1 使用實(shí)例存儲(chǔ) 200
8.2.2 性能測試 200
8.2.3 備份數(shù)據(jù) 201
8.3 比較塊存儲(chǔ)解決方案 201
8.4 使用實(shí)例存儲(chǔ)和EBS卷提供共享文件系統(tǒng) 202
8.4.1 NFS的安全組 203
8.4.2 NFS服務(wù)器和卷 204
8.4.3 NFS服務(wù)器安裝和配置腳本 206
8.4.4 NFS客戶端 207
8.4.5 通過NFS共享文件 208
8.5 小結(jié) 209
第9章 使用關(guān)系數(shù)據(jù)庫服務(wù):RDS 210
9.1 啟動(dòng)一個(gè)MySQL數(shù)據(jù)庫 212
9.1.1 用Amazon RDS數(shù)據(jù)庫啟動(dòng)WordPress平臺 212
9.1.2 探索使用MySQL引擎的RDS數(shù)據(jù)庫實(shí)例 215
9.1.3 Amazon RDS的定價(jià) 217
9.2 將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫 218
9.3 備份和恢復(fù)數(shù)據(jù)庫 220
9.3.1 配置自動(dòng)快照 220
9.3.2 手動(dòng)創(chuàng)建快照 221
9.3.3 恢復(fù)數(shù)據(jù)庫 222
9.3.4 復(fù)制數(shù)據(jù)庫到其他的區(qū)域 223
9.3.5 計(jì)算快照的成本 224
9.4 控制對數(shù)據(jù)庫的訪問 224
9.4.1 控制對RDS數(shù)據(jù)庫的配置的訪問控制 225
9.4.2 控制對RDS數(shù)據(jù)庫的網(wǎng)絡(luò)訪問 226
9.4.3 控制數(shù)據(jù)訪問 226
9.5 可以依賴的高可用的數(shù)據(jù)庫 227
9.6 調(diào)整數(shù)據(jù)庫的性能 229
9.6.1 增加數(shù)據(jù)庫資源 229
9.6.2 使用讀副本來增加讀性能 231
9.7 監(jiān)控?cái)?shù)據(jù)庫 232
9.8 小結(jié) 234
第 10章 面向NoSQL數(shù)據(jù)庫服務(wù)的編程:DynamoDB 235
10.1 操作DynamoDB 236
10.1.1 管理 236
10.1.2 價(jià)格 237
10.1.3 與RDS對比 237
10.2 開發(fā)者需要了解的DynamoDB內(nèi)容 238
10.2.1 表、項(xiàng)目和屬性 238
10.2.2 主鍵 238
10.2.3 與其他NoSQL數(shù)據(jù)庫的對比 239
10.2.4 DynamoDB本地版 239
10.3 編寫任務(wù)管理應(yīng)用程序 239
10.4 創(chuàng)建表 241
10.4.1 使用分區(qū)鍵的用戶表 242
10.4.2 使用分區(qū)鍵和排序鍵的任務(wù)表 243
10.5 添加數(shù)據(jù) 245
10.5.1 添加一個(gè)用戶 246
10.5.2 添加一個(gè)任務(wù) 247
10.6 獲取數(shù)據(jù) 247
10.6.1 提供鍵來獲取數(shù)據(jù) 248
10.6.2 使用鍵和過濾來查詢 249
10.6.3 更靈活地使用二級索引查詢數(shù)據(jù) 251
10.6.4 掃描和過濾表數(shù)據(jù) 253
10.6.5 最終一致地?cái)?shù)據(jù)提取 254
10.7 刪除數(shù)據(jù) 255
10.8 修改數(shù)據(jù) 256
10.9 擴(kuò)展容量 256
10.10 小結(jié) 258
第四部分 在AWS上搭架構(gòu)
第 11章 實(shí)現(xiàn)高可用性:可用區(qū)、自動(dòng)擴(kuò)展以及
CloudWatch 263
11.1 使用CloudWatch恢復(fù)失效的服務(wù)器 264
11.1.1 建立一個(gè)CloudWatch告警 266
11.1.2 基于CloudWatch對虛擬服務(wù)器監(jiān)控與恢復(fù) 267
11.2 從數(shù)據(jù)中心故障中恢復(fù) 270
11.2.1 可用區(qū):每個(gè)區(qū)域有多個(gè)數(shù)據(jù)中心 271
11.2.2 使用自動(dòng)擴(kuò)展確保虛擬服務(wù)器一直運(yùn)行 275
11.2.3 在另一個(gè)可用區(qū)中通過自動(dòng)擴(kuò)展恢復(fù)失效的虛擬服務(wù)器 277
11.2.4 陷阱:網(wǎng)絡(luò)附加存儲(chǔ)恢復(fù) 280
11.2.5 陷阱:網(wǎng)絡(luò)接口恢復(fù) 283
11.3 分析災(zāi)難恢復(fù)的需求 287
11.4 小結(jié) 288
第 12章 基礎(chǔ)設(shè)施解耦:ELB與SQS 289
12.1 利用負(fù)載均衡器實(shí)現(xiàn)同步解耦 290
12.1.1 使用虛擬服務(wù)器設(shè)置負(fù)載均衡器 291
12.1.2 陷阱:過早地連接到服務(wù)器 293
12.1.3 更多使用場景 294
12.2 利用消息隊(duì)列實(shí)現(xiàn)異步解耦 300
12.2.1 將同步過程轉(zhuǎn)換成異步過程 300
12.2.2 URL2PNG應(yīng)用的架構(gòu) 301
12.2.3 創(chuàng)建消息隊(duì)列 302
12.2.4 以程序化的方法處理消息 302
12.2.5 程序化地消費(fèi)消息 303
12.2.6 SQS消息傳遞的局限性 306
12.3 小結(jié) 307
第 13章 容錯(cuò)設(shè)計(jì) 308
13.1 使用冗余EC2實(shí)例提高可用性 310
13.1.1 冗余可以去除單點(diǎn)故障 310
13.1.2 冗余需要解耦 312
13.2 使代碼容錯(cuò)的注意事項(xiàng) 313
13.2.1 讓其崩潰,但也重試 313
13.2.2 冪等重試使得容錯(cuò)成為可能 314
13.3 構(gòu)建容錯(cuò)Web應(yīng)用:Imagery 316
13.3.1 冪等圖片狀態(tài)機(jī) 318
13.3.2 實(shí)現(xiàn)容錯(cuò)Web服務(wù) 320
13.3.3 實(shí)現(xiàn)容錯(cuò)的工作進(jìn)程來消費(fèi)SQS消息 326
13.3.4 部署應(yīng)用 329
13.4 小結(jié) 336
第 14章 向上或向下擴(kuò)展:自動(dòng)擴(kuò)展和CloudWatch 337
14.1 管理動(dòng)態(tài)服務(wù)池 339
14.2 使用監(jiān)控指標(biāo)和時(shí)間計(jì)劃觸發(fā)擴(kuò)展 342
14.2.1 基于時(shí)間計(jì)劃的擴(kuò)展 343
14.2.2 基于CloudWatch參數(shù)的擴(kuò)展 344
14.3 解耦動(dòng)態(tài)服務(wù)器池 347
14.3.1 由負(fù)載均衡器同步解耦擴(kuò)展動(dòng)態(tài)服務(wù)器池 349
14.3.2 隊(duì)列異步解耦擴(kuò)展動(dòng)態(tài)服務(wù)器池 354
14.4 小結(jié) 356