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