內容簡介
Amazon Web Services(AWS)是亞馬遜公司的雲計算平台,它提供了一整套基礎設施和應用程式服務,可以幫助用戶在雲中運行幾乎一切應用程式。本書介紹了AWS雲平台的核心服務,如計算、存儲和網路等內容。讀者還可以從本書中了解在雲上實現自動化、保證安全、實現高可用和海量擴展的系統架構的實踐。
本書分4個部分,共14章。本書從介紹AWS的基本概念開始,引入具體的套用示例,讓讀者對雲計算和AWS平台有一個整體的了解;然後講解如何搭建包含伺服器和網路的基礎設施;在此基礎上,深入介紹如何在雲上存取數據,讓讀者熟悉存儲數據的方法和技術;最後展開討論在AWS上如何設計架構,了解實現高可用性、高容錯率和高擴展性的實踐。
圖書目錄
第 一部分 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