《Serverless架構:無伺服器套用與AWS Lambda》
徹底顛覆Iaas|SaaS|PaaS 釋放雲計算潛力 面向未來雲架構 高彈性|低成本|按需使用資源
【英】Peter Sbarski (彼得薩巴斯基),【澳】Sam Kroonenburg(薩姆克魯內伯格) 著
覃宇 李源 羅麗 譯
ISBN 978-7-121-34268-4
2018年8月出版
定價:108.00元
384頁
16開
基本介紹
- 書名:Serverless架構:無伺服器套用與AWS Lambda
- 作者:【英】Peter Sbarski (彼得薩巴斯基),【澳】Sam Kroonenburg(薩姆克魯內伯格)
- 譯者:覃宇,李源,羅麗
- ISBN:978-7-121-34268-4
- 頁數:384頁
- 定價:108.00元
- 出版社:電子工業出版社
- 出版時間:2018.8
- 裝幀:平裝
- 開本:16開
編輯推薦
向無伺服器雲架構的轉變是大勢所趨。隨著無伺服器計算機技術(如 AWS Lambda)的發布,開發者正在構建大規模的完全無伺服器的平台。在這些新架構中,傳統的後端伺服器被雲函式所取代,這些函式充當著單一用途的分散的服務。通過將這些無伺服器的雲函式以一種鬆散的編排方式組合在⼀起,並採用有效的第三方服務,開發人員可以創建功能強大且易於理解的應⽤程式。
《Serverless架構:無伺服器套用與AWS Lambda》將教你如何構建、保護和管理無伺服器架構,為要求最苛刻的 Web 和移動應⽤提供⽀持。本書中現成的真實案例、代碼片段、圖表和架構描述都可以被輕鬆地應⽤,來幫助你快速完成任務。最終,你將能夠在 AWS 上設計和構建自己的無伺服器應⽤程式。本書內容包括:
√ 無伺服器計算的初始步驟
√ 重要的設計模式和架構
√ 編寫 AWS Lambda 函式並使用 API Gateway
√ 使用像 Auth0 和 Firebase 這樣的關鍵服務來組合無伺服器應用程式
√ 保護、部署和管理無伺服器架構
內容提要
無伺服器是軟體架構世界中的熱門新話題,它充分利用大量的雲平台服務,讓開發者只需關注核心業務邏輯的實現。同時,它按需分配和使用資源的運行方式,在降低基礎設施成本的同時還能獲得強大的彈性。
《Serverless架構:無伺服器套用與AWS Lambda》的作者Peter Sbarski 是最早完全擁抱無伺服器架構的開發者之一,他將自己在套用無伺服器架構中獲得的寶貴經驗總結成本書,呈現給廣大的讀者。更難能可貴的是,全書貫穿了AWS Lambda 實例和大量相關的練習。讀者一邊閱讀,一邊動手完成練習,就可以循序漸進地掌握無伺服器架構的核心技術。無論你是軟體開發新手,還是架構師老兵,《Serverless架構:無伺服器套用與AWS Lambda》都是不可多得的了解無伺服器架構的絕佳讀物。
目錄
序一 XIII
序二 XV
前言 XVII
致謝 XIX
關於本書 XXI
關於作者 XXIII
關於封面 XXIV
第 1 部分..踏上征途 1
1 ..無伺服器初探 3
1.1 來龍去脈 4
1.1.1 面向服務的架構與微服務 5
1.1.2 軟體設計 6
1.2 無伺服器架構原則 9
1.2.1 根據需要使用計算服務執行代碼 9
1.2.2 編寫單一用途的無狀態函式 10
1.2.3 設計基於推送的、事件驅動的管道 10
1.2.4 創建更厚、更強大的前端 11
1.2.5 擁抱第三方服務 12
1.3 從伺服器過渡到服務 12
1.4 無伺服器的利與弊 13
1.4.1 決策驅動因素 13
1.4.2 什麼時候使用無伺服器 14
1.5 本章小結 15
2 架構與模式 17
2.1 使用場景 17
2.1.1 應用程式後端 18
2.1.2 數據處理與操作 18
2.1.3 實時分析 19
2.1.4 遺留 API 代理 19
2.1.5 計畫服務 19
2.1.6 機器人(Bot)和技能(Skill) 20
2.2 架構 20
2.2.1 計算即後端 20
2.2.2 遺留 API 代理 25
2.2.3 混合 26
2.2.4 GraphQL 28
2.2.5 計算即膠水 29
2.2.6 實時處理 31
2.3 模式 32
2.3.1 命令模式 32
2.3.2 訊息傳輸模式 33
2.3.3 優先權佇列模式 35
2.3.4 扇出模式 36
2.3.5 管道和過濾器模式 37
2.4 本章小結 38
3 ..建立無伺服器應用程式 39
3.1 24 小時視頻 40
3.1.1 總體需求 41
3.1.2 Amazon Web Services(AWS) 42
3.1.3 創建第一個 Lambda 函式 44
3.1.4 命名你的 Lambda 46
3.1.5 本地測試 47
3.1.6 部署到 AWS 48
3.1.7 連線 S3 和 Lambda 50
3.1.8 在 AWS 中測試 51
3.1.9 觀察日誌 53
3.2 配置 Simple Notification Service 54
3.2.1 連線 SNS 和 S3 55
3.2.2 從 SNS 接收電子郵件 58
3.2.3 測試 SNS 58
3.3 設定視頻許可權 58
3.3.1 創建第二個函式 58
3.3.2 配置與安全 59
3.3.3 測試第二個函式 60
3.4 生成元數據 61
創建第三個函式和 FFprobe 61
3.5 收尾 64
3.6 練習 66
3.7 本章小結 67
4 ..設定你的雲服務 69
4.1 安全模型和身份管理 70
4.1.1 創建和管理 IAM 用戶 70
4.1.2 創建 IAM 組 73
4.1.3 創建角色 76
4.1.4 資源 77
4.1.5 許可權和策略 77
4.2 日誌與警報 79
4.2.1 設定日誌 80
4.2.2 日誌保留期 81
4.2.3 篩選器、指標和警報 81
4.2.4 搜尋日誌數據 83
4.2.5 S3 和日誌 83
4.2.6 關於警報的更多操作 84
4.2.7 CloudTrail 88
4.3 成本 90
4.3.1 創建賬單提醒 91
4.3.2 監控和最佳化成本 92
4.3.3 使用 Simple Monthly Calculator 93
4.3.4 計算 Lambda 和 API Gateway 的成本 94
4.4 練習 96
4.5 本章小結 97
第 2 部分..深入核心 99
5 ..身份認證和授權 101
5.1 無伺服器環境中的身份認證 101
5.1.1 無伺服器方法 102
5.1.2 Amazon Cognito 104
5.1.3 Auth0 105
5.2 為 24 小時視頻增加身份認證 106
5.2.1 計畫 106
5.2.2 直接調用 Lambda 107
5.2.3 24 小時視頻網站 108
5.2.4 Auth0 配置 110
5.2.5 在網站中加入 Auth0 113
5.2.6 測試 Auth0 的集成 118
5.3 與 AWS 集成 119
5.3.1 用戶信息 Lambda 120
5.3.2 API Gateway 124
5.3.3 映射 126
5.3.4 通過 API Gateway 調用 Lambda 130
5.3.5 自定義授權方 130
5.4 委託令牌 135
5.4.1 真實案例 136
5.4.2 開通委託令牌 136
5.5 練習 137
5.6 本章小結 137
6 ..編排者 Lambda 139
6.1 Lambda 內幕 139
6.1.1 事件模型和源 140
6.1.2 推送和拉取事件模型 141
6.1.3 並發執行 142
6.1.4 容器重用 143
6.1.5 冷 Lambda 和暖 Lambda 143
6.2 編程模型 145
6.2.1 函式處理程式 145
6.2.2 事件對象 145
6.2.3 上下文對象 147
6.2.4 回調函式 147
6.2.5 日誌 148
6.3 版本管理、別名和環境變數 148
6.3.1 版本管理 148
6.3.2 別名 150
6.3.3 環境變數 152
6.4 使用命令行界面(CLI) 154
6.4.1 調用命令 155
6.4.2 創建和部署函式 155
6.5 Lambda 模式 157
6.5.1 異步瀑布 158
6.5.2 序列與並行 163
6.5.3 使用庫 164
6.5.4 把邏輯移到另一個檔案中 167
6.6 測試 Lambda 函式 167
6.6.1 在本地測試 167
6.6.2 編寫測試 168
6.6.3 在 AWS 中測試 171
6.7 練習 173
6.8 本章小結 173
7 ..API.Gateway 175
7.1 作為接口的 API Gateway 176
7.1.1 和 AWS 服務集成 177
7.1.2 快取、限制與日誌 177
7.1.3 階段和版本管理 178
7.1.4 腳本 178
7.2 使用 API Gateway 178
7.2.1 計畫 180
7.2.2 創建資源和方法 181
7.2.3 配置方法執行 185
7.2.4 Lambda 函式 187
7.2.5 更新網站 191
7.3 最佳化網關 194
7.3.1 限制 194
7.3.2 日誌 197
7.3.3 快取 199
7.4 階段和版本管理 202
7.4.1 創建階段變數 202
7.4.2 使用階段變數 203
7.4.3 版本管理 205
7.5 練習 205
7.6 本章小結 206
第 3 部分..拓展架構 207
8 ..存儲 209
8.1 更智慧型的存儲 209
8.1.1 版本控制 210
8.1.2 託管靜態網站 212
8.1.3 存儲類別 214
8.1.4 對象生命周期管理 216
8.1.5 轉移加速 217
8.1.6 事件通知 219
8.2 安全上傳 220
8.2.1 架構 221
8.2.2 上傳策略 Lambda 222
8.2.3 S3 CORS 配置 228
8.2.4 在網站中上傳 228
8.3 限制對檔案的訪問 233
8.3.1 禁止公開訪問 233
8.3.2 生成預簽名 URL 233
8.4 練習 234
8.5 本章小結 235
9 ..資料庫 237
9.1 Firebase 簡介 238
9.1.1 數據結構 238
9.1.2 安全規則 240
9.2 為 24 小時視頻添加 Firebase 241
9.2.1 架構 242
9.2.2 設定 Firebase 243
9.2.3 修改轉碼視頻 Lambda 245
9.2.4 Transcode Video Firebase Update 函式 250
9.2.5 連線 Lambda 251
9.2.6 網站 253
9.2.7 端到端測試 258
9.3 安全訪問檔案 259
9.3.1 簽名 URL Lambda 260
9.3.2 API Gateway 設定 261
9.3.3 再次更新網站 262
9.3.4 提升性能 262
9.3.5 提升 Firebase 安全性 265
9.4 練習 270
9.5 本章小結 270
10 ..最後一英里 271
10.1 部署與框架 271
10.2 邁向更好的微服務 272
10.3 Step Functions 277
10.4 AWS Marketplace 283
10.5 未來之路 285
A ..為無伺服器架構而生的服務 287
B ..安裝和設定 293
C ..身份認證和授權的更多信息 305
D ..再探 Lambda 內幕 311
E ..模型和映射 317
F ..S3 事件訊息結構 335
G ..Serverless.Framework 和 SAM 337
前言
我是從 Sam Kroonenburg 那兒第一次聽說 AWS Lambda 的。那時 Lambda 剛剛發布,但 Sam 對它的前景已經十分看好了。他和我談起了在雲端執行函式、AWS中自動化的巨大潛力,以及基於事件的工作流的開發。一切都如此令人著迷,充滿了無限可能。不用配置和管理基礎設施就能執行我的代碼,這個想法看起來很酷而且馬上就能夢想成真。作為軟體工程師,我一直都想更專注於架構和代碼,而不是基礎設施、運維和系統管理。我用 Amazon Web Services 來實現這一切的機會來了。
幾個月之後,API Gateway 橫空出世,並解決了當時 Lambda 最大的問題。使用標準的 HTTP 請求調用 Lambda 函式成為可能。無須伺服器就創建快速且可擴展的應用程式後端,這個夢想在我們眼前變成了現實。我的第一個無伺服器項目是由Sam Kroonenburg 發起的 A Cloud Guru,現在已經發展成了一個大型的學習管理平台。這個平台是完全無伺服器的,運行成本非常低並可以快速地疊代。我們只需要專注於添加業務價值和新特性,而不需要擔心基礎設施管理和複雜的運維,這使我們的工作更有意思,而且這個平台還可以不可思議地擴展。
在構建 A Cloud Guru 的過程中,我們也意識到無伺服器並不是在 Lambda 中運行代碼這么簡單,它還要用到第三方服務和產品。我們使用了託管身份認證服務和託管資料庫,節省了數周甚至數月的開發時間。我們識別出了這個系統中的一些重要但不必自己構造的部分,比如支付處理和客戶訊息。這些部分十分重要但我們不用重新造輪子。我們找到了完美契合我們無伺服器後端的不錯的第三方服務,並將它們和系統其他部分集成到了一起。
第三個關鍵的話題當然就是選擇正確的設計模式和架構了。我們發現,事件驅動的架構天然地適用於無伺服器應用程式,而我們也致力於讓我們的系統完全由事件驅動。我們還考慮到了安全性、可靠性以及可擴展性,還有如何組合函式和後端服務來達到更好的效果。
自從幫助構建了第一個大規模無伺服器應用程式並回顧了其他無伺服器系統之後,我越來越清晰地意識到 :可擴展的雲函式、可靠的第三方服務,以及無伺服器架構和設計模式的組合就是雲計算演進的未來。未來幾年,我們將看到初創公司和老牌企業都將採用無伺服器架構,這將幫助它們不斷創新並趕超競爭對手。本書是對未來趨勢的展望,也是如何起步的指導手冊。我希望你喜歡本書並和我一起進入探索無伺服器的旅程。
沒有來自我的同事、同行、家人和朋友的鼓勵、反饋和支持,本書是不可能完成的。我很幸運地遇到了身邊這些才華橫溢的人,他們傾聽並提出了寶貴的意見和觀點。
關於本書
無論你是初學者還是專家,無論是剛開始 IT 職業生涯還是有數年的工作經驗,這本書都將帶你進入無伺服器架構的旅程。你會學習關鍵的設計模式,了解使用無伺服器方法的優劣,並使用 AWS Lambda、API Gateway、Elastic Transcoder、S3、Auth0 和 Firebase 構建你自己的視頻分享網站。你還會學習許多 AWS 知識,以及那些值得推薦的用來管理和發布你的無伺服器應用程式的框架。
本書分為三部分。第一部分介了紹基本的無伺服器原理,探討了關鍵的架構和設計模式。你會開始使用 AWS Lambda 構建第一個事件驅動的管道,並學習關鍵的AWS 服務。例如,無所不在的萬能的 Identity and Access Management 服務。
第二部分重點關注了身份認證和授權、AWS Lambda 以及 API Gateway。這部分的所有章節對理解和構建無伺服器應用程式都很重要。讀完這部分並完成示例之後,你將徹底掌握無伺服器應用程式所需的關鍵技術。
第三部分討論了構建真實應用程式所需的其他服務和架構。這部分的關鍵重點是檔案和數據存儲,分別使用 S3 和 Google 的 Firebase 實現。最後一章補充了更多技術和服務的信息,它們可以用來擴展你的無伺服器應用程式。
在這本書的末尾,你會發現七個附錄,它們為你提供了關於各種主題的額外信息。例如,最後一個附錄涵蓋了 Serverless 框架以及 Serverless Application Model(無伺服器應用程式模型,SAM)。你應該仔細閱讀並嘗試這個附錄中的步驟。
AWS 和其他服務(如 Auth0 和 Firebase)的發展非常迅速,所以當你閱讀本書時,如果某些截圖或操作有所不同,請不要驚訝。無伺服器事件驅動架構的基本原理會保持不變,但是一些微末的細節,比如按鈕的位置或是按鈕的標籤,可能會隨著時間不斷變化。本書適用於那些 AWS 和雲計算的新手開發者和解決方案架構師,也適合雲計算開發老兵。我希望你會發現一種新方式,來構建成本更低、擴展性更好和趣味更多的應用程式!