《Serverless架構(gòu):無服務(wù)器單頁應(yīng)用開發(fā)》講授如何利用AWSLambda創(chuàng)建Serverless單頁應(yīng)用。這里,Serverless的意思是應(yīng)用開發(fā)者無須管理服務(wù)器,將應(yīng)用構(gòu)建在服務(wù)之上,而不是運(yùn)行在需要人工配置和維護(hù)的服務(wù)器之上。這種新的開發(fā)方式帶來很多好處,比如節(jié)省成本,可擴(kuò)展性與可靠性高,以及開發(fā)者可以專注于實(shí)現(xiàn)應(yīng)用的業(yè)務(wù)邏輯等。全書共8章,BenRady帶領(lǐng)讀者采用這種新方法從零開始開發(fā)一個(gè)JavaScript解題應(yīng)用,并且對(duì)其進(jìn)行測(cè)試,最終完成部署。
對(duì)于創(chuàng)業(yè)者以及中小企業(yè)的開發(fā)者來說,《Serverless架構(gòu):無服務(wù)器單頁應(yīng)用開發(fā)》講述的Serverless設(shè)計(jì)是一個(gè)值得了解和學(xué)習(xí)的新方法,可以從中獲得啟示,抓住先機(jī)。
Serverless的意思就是開發(fā)應(yīng)用時(shí)可以專注于實(shí)現(xiàn)應(yīng)用的業(yè)務(wù)邏輯,不需要考慮管理服務(wù)器的事情。
采用無服務(wù)器架構(gòu)的方式開發(fā)應(yīng)用,擴(kuò)展性好、可靠性強(qiáng)、成本低。
嘗試新創(chuàng)意、探索可能的新市場(chǎng)或者創(chuàng)建小可行產(chǎn)品的應(yīng)用開發(fā)方式。
創(chuàng)業(yè)者、中小型公司的福音。數(shù)小時(shí)內(nèi)就能搭建一個(gè)初始版本應(yīng)用并在幾秒內(nèi)部署,迅速接受市場(chǎng)檢驗(yàn)。
我做了幾年單頁Web應(yīng)用,一直希望能擺脫應(yīng)用服務(wù)器施加的限制,現(xiàn)在愿望終于實(shí)現(xiàn)了。Amazon(還會(huì)有更多的其他公司)開發(fā)出的技術(shù)讓無服務(wù)器架構(gòu)(serverless,在本書中簡(jiǎn)稱為“無服”)成為可能,消除了很多構(gòu)建和擴(kuò)展Web應(yīng)用的風(fēng)險(xiǎn)和成本。這個(gè)創(chuàng)意是如此令人嘆服,如此具有變革意義,以至于我必須為它寫一本書。
這本書是為那些希望在Web上構(gòu)建一些東西的人而寫的。有的人想搭建一個(gè)應(yīng)用——一個(gè)他們認(rèn)為將會(huì)是下一個(gè)驚世之作的東西。有的人只是剛著手Web開發(fā),從未構(gòu)建過任何類型的應(yīng)用——不管是影響世界的還是其他什么樣的。有的人則是已經(jīng)用Java、RubyonRails或者Node.js構(gòu)建過許多基于Model-View-Controller應(yīng)用的資深Web開發(fā)者。隨著這個(gè)無服技術(shù)的興起,我希望能分享所學(xué)的一切,真心希望有人能夠用它做出一些了不起的東西。
在前言中,你將了解本書的主題以及能用這些技術(shù)來實(shí)現(xiàn)些什么。
指導(dǎo)原則
寫這本書時(shí)我腦子里有幾條指導(dǎo)原則。這些原則的目的是讓本書內(nèi)容具有針對(duì)性、易理解,不說廢話。這里把它們列出來,幫助你了解我是如何寫這本書的以及更好地理解本書的相關(guān)背景。
有些原則可能是有爭(zhēng)議的,其中一些甚至與構(gòu)建Web應(yīng)用的主流思想相左。但是,這些原則將幫助你深入理解這個(gè)主題。與其波瀾不驚,存在爭(zhēng)議會(huì)更好。
使用Web標(biāo)準(zhǔn)和熟悉的工具
在這本書中,你將使用一小部分精選的工具來構(gòu)建一個(gè)單頁Web應(yīng)用。在本書的某些節(jié)點(diǎn)上,你將會(huì)實(shí)現(xiàn)其他工具已有的功能,這些工具是我有意不在應(yīng)用中引入的。你可能會(huì)好奇,既然它們提供了所需的功能,為什么我們不用呢?
閱讀本書實(shí)際上是一個(gè)學(xué)習(xí)的過程。當(dāng)學(xué)習(xí)知識(shí)時(shí),使用熟悉的工具是有幫助的。不然,花在學(xué)習(xí)工具上的時(shí)間比花在學(xué)習(xí)技術(shù)上的還要多。我不希望對(duì)一個(gè)框架或者庫的選擇讓我們偏離本書主題。這本書是關(guān)于無服Web應(yīng)用,而不是關(guān)于框架或者類庫的。為了保持未知性,我們將會(huì)使用那些Web開發(fā)者熟悉的工具(例如jQuery)、Web標(biāo)準(zhǔn)和Web服務(wù),來實(shí)現(xiàn)一個(gè)無服設(shè)計(jì)。
有可能讀完這本書,你將會(huì)接觸到一種客戶端Web框架,比如React或者Angular,來構(gòu)建你自己的Web應(yīng)用。這些工具近些年在Web開發(fā)者社區(qū)獲得了很多關(guān)注,我希望能看到很多使用它們的成功項(xiàng)目。在本書中學(xué)到的所有知識(shí)與你希望使用這些框架做的事情都是兼容的。它們是互為補(bǔ)充而不是相互沖突的關(guān)系。
使用函數(shù)式JavaScript
本書中你將不會(huì)創(chuàng)建JavaScript的任何類。創(chuàng)建類結(jié)構(gòu)來解決問題對(duì)于一些具有富類型和面向?qū)ο箢愋拖到y(tǒng)的語言是合理的,但JavaScript不是這樣的語言。相反,我們將使用更易于理解的函數(shù)式風(fēng)格。
這意味著你將不會(huì)遭遇this關(guān)鍵字的范圍問題。你將會(huì)避免原型和繼承的共同使用。
你不會(huì)使用new關(guān)鍵字和專門設(shè)計(jì)的函數(shù)來創(chuàng)建對(duì)象;相反,你將會(huì)使用一個(gè)字面意義的對(duì)象來創(chuàng)建它們:{}。
你可以自己決定這是否就是你希望采納的風(fēng)格。因?yàn)檫@種方式擁有一些實(shí)際、立竿見影的好處,最后許多軟件設(shè)計(jì)決策實(shí)際上都會(huì)偏向這種風(fēng)格。代碼終究應(yīng)該首先是給人寫的,然后才是計(jì)算機(jī)。只要它可執(zhí)行,對(duì)于計(jì)算機(jī)而言代碼看起來如何無所謂。
避免無用功
做項(xiàng)目時(shí),我的目標(biāo)一直都是:持續(xù)交付有改進(jìn)的結(jié)果,只要這個(gè)改進(jìn)是朝著環(huán)境需要的方向在進(jìn)行。實(shí)現(xiàn)這個(gè)目標(biāo)意味著要避免任何能造成交付率被消磨的事情,比如剃牦牛(yakshaving)。
如果你對(duì)“剃牦牛”這個(gè)詞不熟悉的話,想象一下你想要給朋友買一件毛衣。你走進(jìn)一家商店卻發(fā)現(xiàn)沒有毛衣賣。幸運(yùn)的是,那里的另一位客戶知道街角有一個(gè)很好的裁縫,他可能可以為你做一件。所以你到了裁縫那兒,他有一個(gè)非常好看的毛衣圖案和一臺(tái)能編織這個(gè)圖案的機(jī)器,但毛線供應(yīng)商今天還沒送貨。所以你跑到供應(yīng)商那兒……
然后這個(gè)過程一直繼續(xù),直到你發(fā)現(xiàn)自己在西藏的一片牧場(chǎng)上剃耗牛毛來編毛線。“我怎么來這里了?”你可能會(huì)問自己,“我所需要的只是一件毛衣。”當(dāng)一系列看起來相關(guān)和必要的任務(wù)讓你從真實(shí)目標(biāo)上偏離時(shí),你就是在剃耗牛。幸運(yùn)的是,剃耗牛的解決辦法很簡(jiǎn)單,就是意識(shí)到你自己一直在剃耗牛,然后轉(zhuǎn)而買一頂帽子。
我希望你在閱讀本書時(shí)不要剃耗牛。這就是為什么我用了一個(gè)預(yù)備好的工作空間以及盡可能少的工具的原因。你應(yīng)該把時(shí)間花在學(xué)習(xí)上,而不是安裝軟件、配置和排錯(cuò)上。
通過測(cè)試來加快進(jìn)度
你有沒有曾經(jīng)害怕過修改甚至只是修改一點(diǎn)點(diǎn)代碼?也許你當(dāng)時(shí)不確定應(yīng)該做什么或者為什么應(yīng)該做這個(gè)。“首先,不作惡”對(duì)程序員和醫(yī)生而言均適用。這種情況會(huì)讓你感覺進(jìn)退兩難。
設(shè)想你做這些改動(dòng)時(shí),有一位可信的同事——這類系統(tǒng)的專家——就坐在你身邊。如果你引入任何缺陷到系統(tǒng)中,他就會(huì)攔住你,清楚而明確地告訴你為什么這個(gè)改動(dòng)是個(gè)壞主意。如果你有這樣可信的同事,是否還會(huì)進(jìn)退兩難?
不確定性拖慢了我們的腳本,并且限制了解決方案的范圍。為了快速搭建一個(gè)軟件,你必須有自信。為了獲得這份自信,你可以為自己創(chuàng)造一個(gè)自動(dòng)化專家——它了解系統(tǒng)的所有細(xì)節(jié),知道系統(tǒng)如何運(yùn)轉(zhuǎn)以及為什么這樣運(yùn)轉(zhuǎn)。這位專家和系統(tǒng)相輔相成,隨著它的改變而改變,互相影響。這個(gè)專家就是你編寫一套測(cè)試,它們快到能持續(xù)運(yùn)行,每秒能運(yùn)行成百上千的測(cè)試,而且每次在你對(duì)代碼進(jìn)行修改之后都是如此。
一旦你有了測(cè)試套件,就擁有了新選擇。而當(dāng)你不再害怕修改代碼時(shí),就可以按照自己的設(shè)想來設(shè)計(jì)應(yīng)用,而不是試圖讓它在一開始就要“正確”。這意味著你可以隨著形勢(shì)的變化快速適應(yīng)這個(gè)世界,而不是試圖預(yù)測(cè)你可能需要和不需要什么。你可以基于當(dāng)下的信息而不是靠猜來做決策,應(yīng)用就會(huì)自然而然地變成它應(yīng)該的那個(gè)樣子。
在本書中,你將使用測(cè)試驅(qū)動(dòng)開發(fā)(TDD)技術(shù)來編寫應(yīng)用和它的測(cè)試。了解如何用測(cè)試來構(gòu)建軟件是一項(xiàng)技能,要獲得它的益處,就必須真正地使用它。我在本書中引入TDD的目的不僅是向你展示如何測(cè)試Web應(yīng)用的特定功能,還想證明用它來測(cè)試典型Web應(yīng)用有多簡(jiǎn)單,如果你知道如何實(shí)現(xiàn)的話。
在實(shí)踐TDD的過程中,有一個(gè)三步循環(huán),經(jīng)常描述為紅—綠—重構(gòu)。首先寫一個(gè)測(cè)試,檢查應(yīng)用尚不具備的功能。如果測(cè)試如你預(yù)期的那樣失敗了,就可以相信它是在測(cè)試你希望加到應(yīng)用上的功能。現(xiàn)在這些測(cè)試是紅色的。一旦有一個(gè)失敗的測(cè)試,添加幾條最簡(jiǎn)單的代碼來讓這個(gè)測(cè)試通過,通常幾行代碼即可。現(xiàn)在這些測(cè)試是綠色的。
通過測(cè)試為應(yīng)用添加一些功能后,就該后退一步,讓自己看得更全面一些。是否在實(shí)現(xiàn)中引入了一些重復(fù)代碼?所有的變量和函數(shù)是否都有描述性的準(zhǔn)確名字?是否還有更簡(jiǎn)單的方式?考慮這些事情,然后開始重構(gòu)。重構(gòu)是在不改變功能的情況下修改代碼。你之前編寫的測(cè)試會(huì)告訴你是否改變了功能,所以只能在這些測(cè)試都通過時(shí)重構(gòu),這一點(diǎn)很重要。有了它們作為你的安全防護(hù)網(wǎng),可以在開始下一步測(cè)試之前清理完所有代碼的問題。
TDD用得越多,你的進(jìn)展就會(huì)越快,從中獲得的價(jià)值就越多。通過一遍又一遍地重復(fù)“紅—綠—重構(gòu)”過程,你將學(xué)會(huì)如何漸進(jìn)式地構(gòu)建一個(gè)設(shè)計(jì)合理、測(cè)試充分的應(yīng)用。這樣你不僅對(duì)自己的應(yīng)用有信心,而且對(duì)它進(jìn)行持續(xù)的修改也更容易。
邊做邊學(xué)
本書是一本教程,所以你可以跟著書中的引導(dǎo)邊做邊學(xué)。通過這本書,你將構(gòu)建一個(gè)無服單頁Web應(yīng)用。本書的目的是用具體的方式解釋無服架構(gòu)的原理。本書的成果是一個(gè)可運(yùn)行的應(yīng)用,所以你大可以放心,書中的技術(shù)就像廣告中說的那樣有用。
采用這種方式意味著篇幅有限,我對(duì)有些知識(shí)點(diǎn)不可能講得很深入。因此,我在每章中安排了一節(jié)“下一步”來提供一些主題,如果你希望了解更多,可以查找相關(guān)的資料。
從預(yù)備好的工作空間開始
為了讓你能快速上手,我提供了一個(gè)預(yù)備好的工作空間(preparedworkspace),里面包括了起步需要的所有東西,并且不需要太多時(shí)間來設(shè)置。這就好比你在畫一幅藝術(shù)品,我已經(jīng)為你準(zhǔn)備好顏料、畫架和畫布。你要做的就是創(chuàng)作。
為了能使用這個(gè)預(yù)備好的工作空間,你需要一臺(tái)兼容Bashshell的計(jì)算機(jī)來使用工作空間里面的腳本和工具。可以是OSX、任何*nix版本或者FreeBSD。如果你安裝了Cygwin,用Windows可能也行。你還需要一個(gè)帶開發(fā)者控制臺(tái)的Web瀏覽器。本書的大部分例子中使用的是GoogleChrome,但大多數(shù)情況下Firefox也能提供了類似的功能。
如何閱讀本書
閱讀一本書可以有很多種方式,不僅是從頭到尾的那種。至于如何閱讀本書,取決于你想要獲得什么。下面列出的是讀本書的一些常見理由,以及我對(duì)于如何使用這本書來實(shí)現(xiàn)這些目標(biāo)的建議。
目標(biāo)1:理解無服和傳統(tǒng)單頁應(yīng)用的優(yōu)劣
需要做什么
1.閱讀第1章的前3節(jié)理解兩種方式的優(yōu)劣。
2.略讀第1章剩下的部分和第2~3章。
3.通讀第4~8章,盡可能跟著教程實(shí)現(xiàn)應(yīng)用。
如果你是一個(gè)有經(jīng)驗(yàn)的Web開發(fā)者,搭建過單頁Web應(yīng)用,希望了解更多有關(guān)無服Web應(yīng)用的知識(shí),你可能不需要看前3章的所有內(nèi)容。這些章節(jié)展示了搭建單頁Web應(yīng)用的vanilla.js方式。其意圖是闡述一個(gè)單頁Web應(yīng)用的基礎(chǔ)模塊。我盡量定義哪些部分是必需的,并提供一些可供參考的基礎(chǔ)實(shí)現(xiàn)。如果你沒有給Web應(yīng)用編寫過很多測(cè)試,可以在第2章中實(shí)現(xiàn)一些測(cè)試?yán)觼韺W(xué)習(xí)一些新技能。
讀完第1章的前3節(jié),你會(huì)希望集中精力細(xì)讀第4~8章。我建議你搭建一個(gè)簡(jiǎn)單Web應(yīng)用,或者至少一個(gè)原型,這樣你可以在后面的章節(jié)中自己嘗試這些技術(shù)。通過實(shí)驗(yàn)可以學(xué)到很多。
目標(biāo)2:搭建你的第一個(gè)單頁應(yīng)用
需要做什么
1.在開始前,先讀一讀書中列出的必要的輔助閱讀材料。
2.從頭到尾讀完本書所有的章節(jié),如果有必要,附錄也要看。
如果你是第一次搭建Web應(yīng)用,你會(huì)希望閱讀整本書,從頭到尾讀一遍。另外,你可能也想跟上基礎(chǔ)Web技術(shù)的腳步,包含HTML、CSS和JavaScript,可以查閱下面的免費(fèi)資源。等理解了這些主題,再來深入讀本書。
目標(biāo)3:使用你喜歡的Web框架搭建一個(gè)無服應(yīng)用
需要做什么
1.通讀第1章。
2.用你喜歡的Web框架實(shí)現(xiàn)第2章和第3章的測(cè)試與功能。
3.通讀第4~8章。
正如前面說的那樣,我不希望把這本書的重點(diǎn)放在Web框架上,但還是可以使用它們來搭建無服單頁應(yīng)用。如果你對(duì)單頁應(yīng)用的基本元素很熟悉,并且靠客戶端Web框架來提供這些功能,可以用喜歡的框架輕松重建我們?cè)诘?章和第3章實(shí)現(xiàn)的功能。一旦有了這個(gè)作為基礎(chǔ),應(yīng)該可以遵照本書余下的部分,用這個(gè)框架實(shí)現(xiàn)整個(gè)應(yīng)用。
目標(biāo)4:創(chuàng)建一個(gè)最小可行產(chǎn)品(MinimumViableProduct,MVP)
需要做什么
1.閱讀第1章的前3節(jié),理解無服開發(fā)與傳統(tǒng)開發(fā)方式的優(yōu)劣。
2.閱讀第8章來了解用這種方式構(gòu)建一個(gè)MVP的成本。
3.如果這個(gè)方式看起來行得通,閱讀剩余的所有章節(jié)(如果有需要的話,包括附錄)。
3.使用預(yù)備好的工作空間作為搭建MVP的起點(diǎn)。
當(dāng)啟動(dòng)一個(gè)新產(chǎn)品或者一項(xiàng)新業(yè)務(wù)時(shí),首要的挑戰(zhàn)是搞清楚市場(chǎng)想要什么以及它愿意為什么付錢。許多人稱之為產(chǎn)品/市場(chǎng)匹配(product/marketfit),這是構(gòu)建一個(gè)成功產(chǎn)品或者服務(wù)的關(guān)鍵。
找到產(chǎn)品/市場(chǎng)匹配的一個(gè)有效方式是先做出一個(gè)產(chǎn)品并試著銷售。驗(yàn)證市場(chǎng)的需求和你通過銷售或市場(chǎng)渠道連接這些客戶的能力,這是你應(yīng)該盡快跨過的關(guān)鍵門坎。當(dāng)然,你可能又沒那么多時(shí)間和資金來搭建一個(gè)完整的應(yīng)用,所以一個(gè)替代方案是搭建一個(gè)MVP來驗(yàn)證產(chǎn)品的核心價(jià)值。
無服單頁應(yīng)用是嘗試新主意、探索可能的新市場(chǎng)或者創(chuàng)建MVP的好方式。搭建這類應(yīng)用來替代傳統(tǒng)Web應(yīng)用或者原生應(yīng)用,意味著你可以更快接觸到客戶。你可以在若干小時(shí)內(nèi)搭建一個(gè)初始版本并在幾秒內(nèi)部署。這些應(yīng)用可以立即更新,輕松地被拆分測(cè)試,可以提供詳細(xì)的使用指標(biāo),幫助你理解客戶想要的是什么。
除了運(yùn)行起來不貴、快速構(gòu)建以及幾乎所有用戶都能訪問之外,無服單頁應(yīng)用可以“無限”(正如Amazon宣傳的那樣)擴(kuò)展,這樣如果你的產(chǎn)品在市場(chǎng)上有旺盛的需求,你就可以滿足這樣的需求以及留住用戶。
在線資源
你可以在ProgmaticBookshelf官網(wǎng)找到這本書中的應(yīng)用以及代碼。你還能在上面看到社區(qū)論壇和提交勘誤的表單,報(bào)告問題或者為未來的版本提供建議。
你可以在我的Github.com賬號(hào)(benrady)5下找到預(yù)備好的工作空間。如果你還沒有Github賬號(hào),那就新建一個(gè),并且fork我的代碼庫。想知道更多操作細(xì)節(jié),可以閱讀第1章的內(nèi)容。
BenRady
benrady@gmail.com
第1 章 從簡(jiǎn)單開始 1
無服Web 應(yīng)用 2
-- 無服設(shè)計(jì)的好處 4
-- 無服設(shè)計(jì)的限制 6
使用自己的工作空間 8
-- 本地執(zhí)行 12
-- 創(chuàng)建著陸頁 13
部署到Amazon S3 15
-- 搭建AWS 命令行接口 16
-- 創(chuàng)建一個(gè)帶訪問密鑰的AWS 用戶 17
首次部署 20
-- 下一步 21
第2 章 基于hash 事件的視圖路由 23
設(shè)計(jì)可測(cè)試的路由器 24
-- 運(yùn)行Jasmine 測(cè)試 25
-- 編寫第一個(gè)測(cè)試用例 26
路由函數(shù) 29
-- 創(chuàng)建命名空間 29
-- 添加路由函數(shù) 30
-- 創(chuàng)建視圖容器 32
添加路由 34
添加視圖參數(shù) 37
-- 用spy 測(cè)試調(diào)用 37
-- 處理視圖函數(shù)中的參數(shù) 39
-- 加載應(yīng)用 41
-- 響應(yīng)事件 42
-- 響應(yīng)hash 事件 44
再次部署 46
-- 下一步 46
第3 章 單頁應(yīng)用的必要組件 49
創(chuàng)建視圖 50
定義數(shù)據(jù)模型 53
-- 數(shù)據(jù)綁定 55
-- 優(yōu)化數(shù)據(jù)模型 58
處理用戶輸入 60
-- 有效地使用視覺反饋 64
-- 控制導(dǎo)航 66
創(chuàng)建一個(gè)應(yīng)用外殼 68
-- 提取著陸頁 68
-- 添加工具條 69
使用自定義事件 72
再次部署 75
-- 下一步 75
第4 章 基于Amazon Cognito 的認(rèn)證服務(wù) 77
接入外部身份認(rèn)證服務(wù)商 78
創(chuàng)建身份池 82
-- 身份池配置 83
-- IAM 角色和策略 84
獲取Google 身份. 87
請(qǐng)求AWS 證書 90
-- 刷新令牌 91
-- 基于Deferred 對(duì)象和Promise 的認(rèn)證請(qǐng)求 93
-- 創(chuàng)建一個(gè)身份Deferred 對(duì)象 95
創(chuàng)建個(gè)人主頁視圖 96
再次部署 98
-- 下一步 99
第5 章 使用DynamoDB 存儲(chǔ)數(shù)據(jù) 101
使用DynamoDB 102
-- 理解DynamoDB 的鍵和哈希 102
-- DynamoDB 用作文檔數(shù)據(jù)庫 103
-- 強(qiáng)一致性和最終一致性 105
創(chuàng)建表 106
-- 屬性和鍵值 108
-- 預(yù)設(shè)吞吐量 109
-- 二級(jí)索引與查詢 vs 掃描 110
授權(quán)訪問DynamoDB 111
保存文檔 113
-- 一個(gè)fail-safe 的數(shù)據(jù)訪問函數(shù) 114
-- 創(chuàng)建和保存一個(gè)item 115
讀取文檔 117
數(shù)據(jù)訪問和驗(yàn)證 119
重新部署 122
-- 下一步 122
第6 章 使用Lambda 構(gòu)建微服務(wù) 125
理解Amazon Lambda 126
-- Lambda 環(huán)境 126
-- Lambda 的局限 128
-- 內(nèi)存、時(shí)間和費(fèi)用 129
先部署 130
-- 配置一個(gè)Lambda 函數(shù) 131
-- 創(chuàng)建代碼包 133
-- 通過AWS 控制臺(tái)測(cè)試函數(shù) 134
-- 創(chuàng)建一個(gè)新的Lambda 配置 135
-- 往Lambda 執(zhí)行角色上添加策略 136
編寫Lambda 函數(shù) 138
-- 規(guī)避微服務(wù)架構(gòu)問題 138
-- 添加服務(wù)依賴 140
-- 構(gòu)建可測(cè)試的服務(wù) 141
-- 查詢、分組和分頁 143
調(diào)用Lambda 函數(shù) 145
使用Amazon API 網(wǎng)關(guān) 146
重新部署 148
-- 下一步 148
第7 章 無服應(yīng)用的安全 151
保護(hù)你的AWS 賬號(hào) 152
-- 禁用所有root 訪問密鑰 152
-- 管理用戶配置 152
-- 保護(hù)AWS 證書 153
-- 設(shè)置多重身份認(rèn)證 154
查詢注入攻擊 154
跨站腳本攻擊 156
-- XSS 注入方法 156
-- 使用web worker 沙盒化JavaScript 157
跨站請(qǐng)求偽造 159
-- 不用Javascript 實(shí)現(xiàn)XSRF 160
-- 跨站請(qǐng)求和同源策略 161
線路攻擊和傳輸層安全 162
-- Sidejacking 攻擊 162
-- 高效使用HTTPS 163
拒絕服務(wù)攻擊 165
-- 用CloudFront 保護(hù)S3 165
-- 可擴(kuò)展服務(wù)和用戶身份 166
重新部署 167
-- 下一步 167
第8 章 擴(kuò)容 169
監(jiān)控Web 服務(wù) 169
-- 監(jiān)控容量限制 170
-- 創(chuàng)建付款警告 173
分析S3 的流量 174
-- 記錄S3 請(qǐng)求 174
-- 分析S3 日志 177
-- 響應(yīng)代碼頻率 179
-- 熱門資源 180
-- 每日用量 181
優(yōu)化應(yīng)用,實(shí)現(xiàn)增長(zhǎng) 182
-- 通過緩存降低成本和加載時(shí)間 183
-- 通過帶版本號(hào)的文件名清除緩存 186
云的成本 187
-- 加載成本 188
-- 數(shù)據(jù)成本 188
-- 微服務(wù)成本 189
-- 加起來 190
再次部署 192
-- 下一步 192
附錄A 安裝Node.js 195
安裝Node.js 運(yùn)行時(shí) 195
-- Linux 195
-- OS X 196
-- Windows 196
管理多個(gè)Node.js 版本 197
附錄B 分配一個(gè)域名 199
參考書目 201