Amazon Web Services(AWS)是亞馬遜公司的云計算平臺,它提供了一整套基礎設施和應用程序服務,可以幫助用戶在云中運行幾乎一切應用程序。本書介紹了AWS云平臺的核心服務,如計算、存儲和網(wǎng)絡等內(nèi)容。讀者還可以從本書中了解在云上實現(xiàn)自動化、保證安全、實現(xiàn)高可用和海量擴展的系統(tǒng)架構(gòu)的最佳實踐。
本書分4個部分,共14章。本書從介紹AWS的基本概念開始,引入具體的應用示例,讓讀者對云計算和AWS平臺有一個整體的了解;然后講解如何搭建包含服務器和網(wǎng)絡的基礎設施;在此基礎上,深入介紹如何在云上存取數(shù)據(jù),讓讀者熟悉存儲數(shù)據(jù)的方法和技術;最后展開討論在AWS上如何設計架構(gòu),了解實現(xiàn)高可用性、高容錯率和高擴展性的最佳實踐。
物理數(shù)據(jù)中心需要很多設備,并且需要投入大量的時間和資源來管理。如果用戶需要數(shù)據(jù)中心,又不希望自己搭建,Amazon Web Services(AWS)可能是一個不錯的解決方案。無論用戶是想分析實時數(shù)據(jù),搭建軟件即服務架構(gòu),還是運行一個電子商務的網(wǎng)站,AWS都可以為其提供可靠的基于云平臺的可擴展服務。
本書為讀者介紹AWS 云平臺的計算、存儲和網(wǎng)絡服務。讀者將從云計算的概覽開始,然后學習如何創(chuàng)建自己的賬戶,學習如何通過調(diào)用AWS API 以編程的方式控制AWS 的每個組件,以實現(xiàn)基礎設施的自動化,學習存儲數(shù)據(jù)的選項和相關技巧,學習如何使用私有網(wǎng)絡隔離自己的系統(tǒng)來增強安全性。最后,本書還會教讀者如何針對高可用性和容錯進行設計。
本書主要內(nèi)容
● 云計算概念和模式的概述。
● 在AWS上部署應用程序。
● 集成亞馬遜的預構(gòu)建服務。
● 管理EC2服務器來降低成本。
本書面向?qū)⒎植际綉眠w移到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)絡內(nèi)運行一個Java EE應用 6
1.2.3 滿足法律和業(yè)務數(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 解決常見問題的服務 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服務 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)建基礎設施 33
2.2 探索基礎設施 39
2.2.1 資源組 40
2.2.2 Web服務器 41
2.2.3 負載均衡器 42
2.2.4 MySQL數(shù)據(jù)庫 44
2.3 成本是多少 45
2.4 刪除基礎設施 46
2.5 小結(jié) 48
第二部分 搭建包含服務器和網(wǎng)絡的虛擬基礎設施
第3章 使用虛擬服務器:
EC2 51
3.1 探索虛擬服務器 51
3.1.1 啟動虛擬服務器 52
3.1.2 連接到虛擬服務器 60
3.1.3 手動安裝和運行軟件 63
3.2 監(jiān)控和調(diào)試虛擬服務器 64
3.2.1 顯示虛擬服務器的日志 64
3.2.2 監(jiān)控虛擬服務器的負載 65
3.3 關閉虛擬服務器 66
3.4 更改虛擬服務器的容量 67
3.5 在另一個數(shù)據(jù)中心開啟虛擬服務器 69
3.6 分配一個公有IP地址 72
3.7 向虛擬服務器添加額外的網(wǎng)絡接口 74
3.8 優(yōu)化虛擬服務器的開銷 77
3.8.1 預留虛擬服務器 78
3.8.2 對未使用的虛擬服務器競價 79
3.9 小結(jié) 82
第4章 編寫基礎架構(gòu):命令行、SDK和CloudFormation 83
4.1 基礎架構(gòu)即代碼 84
4.1.1 自動化和DevOps運作 85
4.1.2 開發(fā)一種基礎架構(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控制虛擬服務器:nodecc 98
4.3.2 nodecc如何創(chuàng)建一臺服務器 99
4.3.3 nodecc是如何列出服務器并顯示服務器的詳細信息 101
4.3.4 nodecc如何終止一臺服務器 102
4.4 使用藍圖來啟動一臺虛擬服務器 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)境中部署應用程序 115
5.2 使用CloudFormation在服務器啟動時運行腳本 116
5.2.1 在服務器啟動時使用用戶數(shù)據(jù)來運行腳本 116
5.2.2 在虛擬服務器上部署OpenSwan作為VPN服務器 116
5.2.3 從零開始,而不是更新已有的服務器 121
5.3 使用Elastic Beanstalk部署一個簡單的網(wǎng)站應用 121
5.3.1 Elastic Beanstalk的組成部分 121
5.3.2 使用Elastic Beanstalk部署一個Node.js應用Etherpad 122
5.4 使用OpsWorks部署多層架構(gòu)應用 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 小結(jié) 139
第6章 保護系統(tǒng)安全: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 控制進出虛擬服務器的網(wǎng)絡流量 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進行代理轉(zhuǎn)發(fā) 159
6.5 在云中創(chuàng)建一個私有網(wǎng)絡:虛擬私有云 160
6.5.1 創(chuàng)建VPC和IGW 162
6.5.2 定義公有堡壘主機子網(wǎng) 162
6.5.3 添加私有Apache網(wǎng)站服務器子網(wǎng) 164
6.5.4 在子網(wǎng)中啟動服務器 165
6.5.5 通過NAT服務器從私有子網(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 設置S3存儲桶 181
7.5.2 安裝使用S3的互聯(lián)網(wǎ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)絡附加存儲 191
8.1.1 創(chuàng)建EBS卷并掛載到服務器 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服務器和卷 204
8.4.3 NFS服務器安裝和配置腳本 206
8.4.4 NFS客戶端 207
8.4.5 通過NFS共享文件 208
8.5 小結(jié) 209
第9章 使用關系數(shù)據(jù)庫服務: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 備份和恢復數(shù)據(jù)庫 220
9.3.1 配置自動快照 220
9.3.2 手動創(chuàng)建快照 221
9.3.3 恢復數(shù)據(jù)庫 222
9.3.4 復制數(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)絡訪問 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ù)庫服務的編程: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 編寫任務管理應用程序 239
10.4 創(chuàng)建表 241
10.4.1 使用分區(qū)鍵的用戶表 242
10.4.2 使用分區(qū)鍵和排序鍵的任務表 243
10.5 添加數(shù)據(jù) 245
10.5.1 添加一個用戶 246
10.5.2 添加一個任務 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恢復失效的服務器 264
11.1.1 建立一個CloudWatch告警 266
11.1.2 基于CloudWatch對虛擬服務器監(jiān)控與恢復 267
11.2 從數(shù)據(jù)中心故障中恢復 270
11.2.1 可用區(qū):每個區(qū)域有多個數(shù)據(jù)中心 271
11.2.2 使用自動擴展確保虛擬服務器一直運行 275
11.2.3 在另一個可用區(qū)中通過自動擴展恢復失效的虛擬服務器 277
11.2.4 陷阱:網(wǎng)絡附加存儲恢復 280
11.2.5 陷阱:網(wǎng)絡接口恢復 283
11.3 分析災難恢復的需求 287
11.4 小結(jié) 288
第 12章 基礎設施解耦:ELB與SQS 289
12.1 利用負載均衡器實現(xiàn)同步解耦 290
12.1.1 使用虛擬服務器設置負載均衡器 291
12.1.2 陷阱:過早地連接到服務器 293
12.1.3 更多使用場景 294
12.2 利用消息隊列實現(xiàn)異步解耦 300
12.2.1 將同步過程轉(zhuǎn)換成異步過程 300
12.2.2 URL2PNG應用的架構(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章 容錯設計 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應用:Imagery 316
13.3.1 冪等圖片狀態(tài)機 318
13.3.2 實現(xiàn)容錯Web服務 320
13.3.3 實現(xiàn)容錯的工作進程來消費SQS消息 326
13.3.4 部署應用 329
13.4 小結(jié) 336
第 14章 向上或向下擴展:自動擴展和CloudWatch 337
14.1 管理動態(tài)服務池 339
14.2 使用監(jiān)控指標和時間計劃觸發(fā)擴展 342
14.2.1 基于時間計劃的擴展 343
14.2.2 基于CloudWatch參數(shù)的擴展 344
14.3 解耦動態(tài)服務器池 347
14.3.1 由負載均衡器同步解耦擴展動態(tài)服務器池 349
14.3.2 隊列異步解耦擴展動態(tài)服務器池 354
14.4 小結(jié) 356