Amazon Web Services 雲計算實戰, 2/e

[德] 邁克爾·威蒂格(Michael Wittig) [德]安德烈亞斯·威蒂格(Andreas Wittig)

  • Amazon Web Services 雲計算實戰, 2/e-preview-1
  • Amazon Web Services 雲計算實戰, 2/e-preview-2
Amazon Web Services 雲計算實戰, 2/e-preview-1

買這商品的人也買了...

商品描述

Amazon Web Services(AWS)是Amazon公司的雲計算平臺,它提供了一整套基礎設施和應用服務,可以幫助用戶在雲中運行幾乎一切應用。本書介紹AWS雲平臺的核心服務,如計算、存儲網絡等內容。讀者可以從本書瞭解在雲上實現自動化,保證安全,實現高可用、容錯和海量擴展的系統架構的best實踐。

本書分為4部分,共17章。本書從介紹AWS的基本概念開始,引入具體的應用示例,讓讀者對雲計算和AWS平臺有整體的瞭解;然後講解如何搭建包含虛擬機和網絡的基礎設施;在此基礎上,深入介紹如何在雲上存取數據,讓讀者熟悉存儲數據的方法和技術;最後展開討論在AWS上如何設計架構,讓讀者瞭解實現高可用性、高容錯和高擴展性的best實踐。

本書第2版全面修訂了第1版中的各章內容,並涵蓋AWS的新添加的服務,包括使用AWS Lambda的無服務器基礎設施,與EFS共享數據以及使用Amazon ElastiCache的內存數據存儲等。

作者簡介

迈克尔·威蒂格(Michael Wittig)和安德烈亚斯·威蒂格(Andreas Wittig)是专注于Amazon Web Services(AWS)的软件工程师和DevOps工程师。2013年,这对兄弟将一家德国银行的整个IT基础设施迁移到了AWS上。这在德国银行界算是首例。自2015年以来,他们一直担任顾问,帮助客户在AWS上迁移和运行工作负载。他们专注于基础设施即代码、持续部署、无服务器、Docker和安全等领域,也在Amazon云上构建SaaS产品。两人都是AWS认证的专业级AWS解决方案架构师(AWS Certified Solutions Architect-Professional)以及AWS认证的专业级DevOps工程师(AWS Certified DevOps Engineer-Professional)。此外,他们还喜欢通过本书、博客以及在线和现场培训(如AWS in Motion)与他人分享知识,教授他人如何使用AWS。

目錄大綱

第 一部分 AWS 雲計算起步

第 1 章 什麽是 AWS 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 啟用自動化 9

1.3.4 靈活的容量(可擴展性) 10

1.3.5 為失效而構建(可靠性) 10

1.3.6 縮短上市的時間 10

1.3.7 從規模經濟中受益 11

1.3.8 全球基礎設施 11

1.3.9 專業的合作夥伴 11

1.4 費用是多少 11

1.4.1 免費套餐 12

1.4.2 賬單樣例 12

1.4.3 按使用付費的機遇 13

1.5 同類對比 14

1.6 探索 AWS 服務 14

1.7 與 AWS 交互 17

1.7.1 管理控制台 18

1.7.2 CLI 18

1.7.3 SDK 19

1.7.4 藍圖 20

1.8 創建一個 AWS 賬戶 20

1.8.1 註冊 21

1.8.2 登錄 25

1.8.3 創建一個密鑰對 26

1.9 創建賬單警報跟蹤 AWS 賬單 29

1.10 小結 32

第 2 章 一個簡單示例:5 分鐘搭建WordPress 站點 33

2.1 創建基礎設施 34

2.2 探索基礎設施 40

2.2.1 資源組 40

2.2.2 虛擬機 41

2.2.3 負載均衡器 43

2.2.4 MySQL 數據庫 44

2.2.5 網絡文件系統 46

2.3 成本是多少 47

2.4 刪除基礎設施 48

2.5 小結 49

第二部分 搭建由電腦和網絡組成的虛擬基礎設施

第 3 章 使用虛擬機:EC2 53

3.1 探索虛擬機 53

3.1.1 啟動虛擬機 54

3.1.2 連接到虛擬機 65

3.1.3 手動安裝和運行軟件 68

3.2 監控和調試虛擬機 69

3.2.1 顯示虛擬機的日誌 69

3.2.2 監控虛擬機的負載 70

3.3 關閉虛擬機 71

3.4 更改虛擬機的大小 72

3.5 在另一個數據中心啟動虛擬機 75

3.6 分配一個公有 IP 地址 78

3.7 向虛擬機添加額外的網絡接口 80

3.8 優化虛擬機的開銷 84

3.8.1 預留虛擬機 85

3.8.2 對未用虛擬機出價 87

3.9 小結 91

第 4 章 編寫基礎設施: 命令行、SDK 和 CloudFormation 92

4.1 基礎設施即代碼 94

4.1.1 自動化和 DevOps 遷移 94

4.1.2 開發一種基礎設施語言:JIML 94

4.2 使用 CLI 98

4.2.1 為什麽要自動化 98

4.2.2 安裝 CLI 98

4.2.3 配置 CLI 99

4.2.4 使用 CLI 102

4.3 使用 SDK 編程 106

4.3.1 使用 SDK 控制虛擬機:nodecc 106

4.3.2 nodecc 如何創建一臺虛擬機 107

4.3.3 nodecc 如何列出虛擬機並顯示虛擬機的詳細信息 108

4.3.4 nodecc 如何終止一臺虛擬機 109

4.4 使用藍圖來啟動一臺虛擬機 110

4.4.1 CloudFormation 模板解析 111

4.4.2 創建第 一個模板 114

4.5 小結 120

第 5 章 自動化部署: CloudFormation、 Elastic Beanstalk 和 OpsWorks 121

5.1 在靈活的雲環境中部署應用 122

5.2 比較部署工具 123

5.2.1 對部署工具進行分類 123

5.2.2 比較部署服務 123

5.3 使用 AWS CloudFormation 創建虛擬機並在啟動時運行部署腳本 124

5.3.1 在服務器啟動時用用戶數據來運行腳本 125

5.3.2 將 VPN 服務器 OpenSwan 部署到虛擬機 125

5.3.3 從零開始而不是更新 129

5.4 使用 AWS Elastic Beanstalk 部署簡單的 Web 應用 130

5.4.1 Elastic Beanstalk 組件 130

5.4.2 使用 Elastic Beanstalk 部署一個 Node.js 應用Etherpad 131

5.5 使用 AWS OpsWorks Stacks 部署多層應用 135

5.5.1 AWS OpsWorks Stacks 的組件 136

5.5.2 使用 AWS OpsWorks Stacks 部署 IRC 聊天應用 138

5.6 小結 147

第 6 章 保護系統安全:IAM、 安全組和 VPC 148

6.1 誰該對安全負責 149

6.2 使軟件保持最新 150

6.2.1 檢查安全更新 150

6.2.2 在虛擬機啟動時安裝安全更新 151

6.2.3 在正在運行的虛擬機上安裝安全更新 152

6.3 保護 AWS 賬戶安全 153

6.3.1 保護 AWS 賬戶的 root 用戶安全 154

6.3.2 AWS 身份和訪問管理 155

6.3.3 使用 IAM 策略定義權限 156

6.3.4 用戶用於身份認證,組用於組織用戶 158

6.3.5 使用角色認證AWS資源 159

6.4 控制進出虛擬機的網絡流量 161

6.4.1 使用安全組控制虛擬機的流量 162

6.4.2 允許 ICMP 流量 163

6.4.3 允許 SSH 流量 164

6.4.4 允許來自源 IP 地址的SSH 流量 165

6.4.5 允許來自源安全組的SSH 流量 166

6.5 在雲中創建一個專用網絡:亞馬遜虛擬私有雲 170

6.5.1 創建VPC和互聯網網關 171

6.5.2 定義公有堡壘主機子網 172

6.5.3 添加私有 Apache Web 服務器子網 174

6.5.4 在子網中啟動虛擬機 175

6.5.5 通過 NAT 網關從私有子網訪問互聯網 176

6.6 小結 178

第 7 章 用 Lambda 自動化 操作任務 179

7.1 用 AWS Lambda 運行代碼 180

7.1.1 什麽是無服務器 180

7.1.2 在 AWS Lambda 上運行代碼 180

7.1.3 比較 AWS Lambda 與虛擬機(Amazon EC2) 181

7.2 用 AWS Lambda 構建網站健康狀況檢查 182

7.2.1 創建 Lambda 函數 183

7.2.2 用 CloudWatch 搜索 Lambda 函數的日誌 188

7.2.3 用 CloudWatch 指標和警報監視 Lambda 函數 190

7.2.4 訪問 VPC 中的端點 194

7.3 自動添加包含 EC2 實例所有者的標簽 196

7.3.1 事件驅動:訂閱 CloudWatch 事件 196

7.3.2 在 Python 中實現 Lambda 函數 199

7.3.3 用無服務器應用模型設置Lambda 函數 200

7.3.4 授權 Lambda 函數用具有IAM 角色的其他 AWS 服務 201

7.3.5 用 SAM 部署 Lambda 函數 202

7.4 用 AWS Lambda 還能做什麽 203

7.4.1 AWS Lambda 有哪些限制 203

7.4.2 無服務器定價模式的影響 203

7.4.3 使用場景:Web 應用 204

7.4.4 使用場景:數據處理 205

7.4.5 使用場景:物聯網後端 206

7.5 小結 206

第三部分 在雲中存儲數據

第 8 章 存儲對象:S3 和 Glacier 211

8.1 什麽是對象存儲 212

8.2 Amazon S3 212

8.3 使用 AWS CLI 在 S3 上備份數據 214

8.4 歸檔對象以優化成本 216

8.4.1 創建 S3 存儲桶來配合Glacier 使用 217

8.4.2 添加生命周期規則到存儲桶 218

8.4.3 實驗 Glacier 和生命周期規則 220

8.5 以編程的方式存儲對象 222

8.5.1 設置 S3 存儲桶 224

8.5.2 安裝使用 S3 的Web 應用 224

8.5.3 檢查使用 SDK 訪問 S3 的代碼 224

8.6 使用 S3 來實現靜態網站托管 226

8.6.1 創建存儲桶並上傳一個靜態網站 227

8.6.2 配置存儲桶來實現靜態網站托管 227

8.6.3 訪問 S3 上托管的網站 228

8.7 使用 S3 的最佳實踐 229

8.7.1 確保數據一致性 229

8.7.2 選擇正確的鍵 230

8.8 小結 231

第 9 章 在硬盤上存儲數據: EBS 和實例存儲 232

9.1 彈性塊存儲:通過網絡附加的持久的塊級別存儲 233

9.1.1 創建 EBS 捲並將其附加到EC2 實例 234

9.1.2 使用 EBS 234

9.1.3 調整性能 236

9.1.4 使用 EBS 快照備份數據 238

9.2 實例存儲:臨時塊存儲 240

9.2.1 使用實例存儲 243

9.2.2 測試性能 244

9.2.3 備份數據 244

9.3 小結 245

第 10 章 在機器之間共享數據捲:EFS 246

10.1 創建文件系統 248

10.1.1 用 CloudFormation 描述文件系統 248

10.1.2 定價 249

10.2 創建安裝目標 249

10.3 在 EC2 實例上安裝EFS 共享 251

10.4 在 EC2 實例之間共享文件 254

10.5 調整性能 255

10.5.1 性能模式 255

10.5.2 預期吞吐量 256

10.6 監視文件系統 256

10.6.1 是否應使用最大 I/O 性能模式 257

10.6.2 監控你的允許吞吐量 258

10.6.3 監控你的使用情況 259

10.7 備份數據 259

10.7.1 使用 CloudFormation 描述EBS 捲 260

10.7.2 使用 EBS 捲 260

10.8 小結 262

第 11 章 使用關系數據庫服務: RDS 263

11.1 開始使用 MySQL 數據庫 265

11.1.1 用 RDS 數據庫啟動WordPress 平臺 265

11.1.2 探索帶有 MySQL 引擎的RDS 數據庫實例 268

11.1.3 Amazon RDS 的定價 268

11.2 將數據導入數據庫 268

11.3 備份和還原數據庫 271

11.3.1 配置自動快照 271

11.3.2 手動創建快照 272

11.3.3 還原數據庫 273

11.3.4 復制數據庫到另一個區域 274

11.3.5 計算快照費用 275

11.4 控制對數據庫的訪問 275

11.4.1 控制對 RDS 數據庫配置的訪問 276

11.4.2 控制對 RDS 數據庫的網絡訪問 277

11.4.3 控制對數據的訪問 277

11.5 依賴高可用數據庫 278

11.6 調整數據庫的性能 280

11.6.1 增加數據庫資源 281

11.6.2 使用讀復制來提高讀性能 282

11.7 監控數據庫 284

11.8 小結 286

第 12 章 使用內存緩存數據:Amazon ElastiCache 287

12.1 創建緩存集群 291

12.1.1 最小 CloudFormation 模板 292

12.1.2 測試 Redis 集群 293

12.2 緩存部署選項 294

12.2.1 Memcached 集群 295

12.2.2 Redis 單節點集群 295

12.2.3 Redis 禁用集群模式的集群 296

12.2.4 Redis 啟用集群模式的集群 297

12.3 控制緩存訪問 298

12.3.1 控制訪問配置選項 298

12.3.2 控制網絡訪問 299

12.3.3 控制集群和數據訪問 299

12.4 使用 CloudFormation 安裝示例 Discourse 應用 300

12.4.1 VPC—網絡配置 301

12.4.2 緩存—安全組、子網組、緩存集群 302

12.4.3 數據庫—安全組、子網組、數據庫實例 303

12.4.4 虛擬機—安全組、EC2 實例 304

12.4.5 測試 Discourse 的CloudFormation 模板 306

12.5 監控緩存 307

12.5.1 監控主機相關指標 308

12.5.2 內存是否足夠? 309

12.5.3 Redis 只讀副本是否保持最新 309

12.6 優化緩存性能 309

12.6.1 選擇合適的節點類型 310

12.6.2 選擇正確的部署選項 311

12.6.3 壓縮數據 311

12.7 小結 311

第 13章 面向NoSQL數據庫服務的編程:DynamoDB 312

13.1 操作 DynamoDB 314

13.1.1 管理 314

13.1.2 定價 314

13.1.3 網絡 315

13.1.4 與 RDS 對比 315

13.1.5 與其他 NoSQL 數據庫對比 316

13.2 開發人員需要瞭解的DynamoDB 316

13.2.1 表、項目和屬性 316

13.2.2 主鍵 317

13.2.3 本地 DynamoDB 318

13.3 編寫待辦事項應用 318

13.4 創建表 320

13.4.1 通過分區鍵標識用戶 320

13.4.2 通過分區鍵和排序鍵標識任務 321

13.5 添加數據 323

13.5.1 添加用戶 324

13.5.2 添加任務 325

13.6 檢索數據 325

13.6.1 通過鍵來獲取項目 326

13.6.2 通過鍵和過濾器查詢項目 327

13.6.3 使用全局輔助索引進行更靈活的查詢 329

13.6.4 掃描和過濾表中的所有數據 332

13.6.5 最終一致的數據檢索 333

13.7 刪除數據 333

13.8 修改數據 334

13.9 擴展容量 335

13.9.1 容量單元 336

13.9.2 自動擴展 337

13.10 小結 339

第四部分 在 AWS 上搭架構

第 14 章 實現高可用性: 可用區、自動擴展以及 CloudWatch 343

14.1 用CloudWatch從EC2實例故障中恢復 344

14.1.1 創建 CloudWatch 警報來在狀態檢查失敗時觸發恢復 345

14.1.2 根據CloudWatch警報監控和恢復虛擬機 347

14.2 從數據中心中斷中恢復 350

14.2.1 可用區:一組獨立的數據中心 351

14.2.2 用自動擴展確保 EC2 實例一直運行 354

14.2.3 借助自動擴展將出現故障的虛擬機恢復到另一個可用區 356

14.2.4 隱患:網絡附加存儲恢復 359

14.2.5 隱患:網絡接口恢復 363

14.3 分析災難恢復的必要條件 367

14.4 小結 368

第 15 章 基礎設施解耦: ELB 與 SQS 369

15.1 利用負載均衡器進行同步解耦 370

15.2 利用消息隊列進行異步解耦 375

15.2.1 將同步過程轉換成異步過程 376

15.2.2 URL2PNG 應用的架構 377

15.2.3 創建消息隊列 377

15.2.4 以編程方式生產消息 378

15.2.5 以編程方式消費消息 379

15.2.6 使用 SQS 傳遞消息的局限性 383

15.3 小結 384

第 16 章 容錯設計 385

16.1 使用冗餘 EC2 實例提高可用性 387

16.1.1 冗餘可以消除單點故障 387

16.1.2 冗餘需要解耦 389

16.2 使代碼容錯的註意事項 390

16.2.1 讓其崩潰,而且重試 390

16.2.2 冪等重試使容錯成為可能 391

16.3 構建容錯 Web 應用:Imagery 393

16.3.1 冪等狀態機 396

16.3.2 實現容錯的 Web 服務 397

16.3.3 實現容錯的工作進程來消費 SQS 消息 404

16.3.4 部署應用 407

16.4 小結 413

第 17 章 向上或向下擴展:自動擴展和CloudWatch 414

17.1 管理動態EC2實例池 416

17.2 使用指標或計劃觸發擴展 419

17.2.1 根據計劃進行擴展 420

17.2.2 根據 CloudWatch 指標進行擴展 421

17.3 解耦動態EC2實例池 423

17.3.1 通過負載均衡器同步解耦擴展動態 EC2 實例池 424

17.3.2 通過隊列異步解耦擴展動態EC2 實例池 428

17.4 小結 432

附錄 A 術語及縮寫 433