![云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件 單元4 我的記賬本_第1頁](http://file4.renrendoc.com/view11/M02/0D/21/wKhkGWXgGgqADLP6AABypT7aE7w756.jpg)
![云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件 單元4 我的記賬本_第2頁](http://file4.renrendoc.com/view11/M02/0D/21/wKhkGWXgGgqADLP6AABypT7aE7w7562.jpg)
![云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件 單元4 我的記賬本_第3頁](http://file4.renrendoc.com/view11/M02/0D/21/wKhkGWXgGgqADLP6AABypT7aE7w7563.jpg)
![云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件 單元4 我的記賬本_第4頁](http://file4.renrendoc.com/view11/M02/0D/21/wKhkGWXgGgqADLP6AABypT7aE7w7564.jpg)
![云應(yīng)用開發(fā)實(shí)戰(zhàn) 課件 單元4 我的記賬本_第5頁](http://file4.renrendoc.com/view11/M02/0D/21/wKhkGWXgGgqADLP6AABypT7aE7w7565.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
云應(yīng)用開發(fā)實(shí)戰(zhàn)單元4我的記賬本Lambda基礎(chǔ)連接讀寫數(shù)據(jù)庫創(chuàng)建用戶及賬本數(shù)據(jù)表綜合實(shí)訓(xùn)-我的賬本知識(shí)目標(biāo):掌握AmazonAPIGateway托管服務(wù)知識(shí)掌握RESTfulAPI知識(shí)掌握AmazonLambda的概念及優(yōu)勢(shì)掌握AmazonLambda的開發(fā)知識(shí)掌握AmazonDynamoDB的知識(shí)掌握文字轉(zhuǎn)語音的基本知識(shí)能力目標(biāo):能使用AmazonAPIGateway建立托管服務(wù)能使用RESTfulAPI處理網(wǎng)絡(luò)請(qǐng)求能編寫Lambda函數(shù)能夠通過Lambda構(gòu)建無服務(wù)應(yīng)用程序能夠?qū)ynamoDB進(jìn)行增刪改查操作能夠基于DynamoDB構(gòu)建應(yīng)用程序能創(chuàng)建有AmazonPolly權(quán)限的AWS賬號(hào)1項(xiàng)目4.1Lambda函數(shù)基礎(chǔ)創(chuàng)建Lambda函數(shù)無需預(yù)置或管理服務(wù)器的Web后端項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.1創(chuàng)建Lambda函數(shù)
AWSLambda是一種計(jì)算服務(wù),可讓運(yùn)行代碼而無需配置或管理服務(wù)器。AWSLambda以函數(shù)形式存在,僅在代碼運(yùn)行時(shí)計(jì)費(fèi),代碼未運(yùn)行時(shí)不產(chǎn)生費(fèi)用。AWSLambda在高可用性計(jì)算基礎(chǔ)架構(gòu)上運(yùn)行代碼,并負(fù)責(zé)計(jì)算資源的所有管理工作,包括服務(wù)器和操作系統(tǒng)維護(hù),容量供應(yīng)和自動(dòng)擴(kuò)展,代碼監(jiān)視和日志記錄,無需用戶任何手動(dòng)干預(yù)。需要使用AWSLambda服務(wù)需要首先在AWSLambdaconsole(AWSLambda控制臺(tái))中創(chuàng)建一個(gè)Lambda函數(shù)。在本任務(wù)中,將使用AWSLambda控制臺(tái)創(chuàng)建Lambda函數(shù)。接下來,使用示例事件數(shù)據(jù)手動(dòng)測(cè)試Lambda函數(shù)。AWSLambda執(zhí)行Lambda函數(shù)并返回結(jié)果。一、任務(wù)描述項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.1創(chuàng)建Lambda函數(shù)1.函數(shù)Lambda函數(shù)是一種資源,可以調(diào)用該資源在其中運(yùn)行代碼。函數(shù)需要定義處理事件的代碼,以及具有在事件和函數(shù)代碼之間傳遞請(qǐng)求和響應(yīng)的運(yùn)行時(shí)。用戶提供了代碼,然后可以使用亞馬遜云科技提供的運(yùn)行時(shí)或創(chuàng)建自己的運(yùn)行時(shí)。2.運(yùn)行時(shí)Lambda運(yùn)行時(shí)允許使用不同語言的函數(shù)在相同的基本執(zhí)行環(huán)境中運(yùn)行。用戶可以將函數(shù)配置為使用與用戶的編程語言匹配的運(yùn)行時(shí)。用戶可以使用Lambda提供的運(yùn)行時(shí),也可以構(gòu)建自己的運(yùn)行時(shí)。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.1創(chuàng)建Lambda函數(shù)3.事件Lambda中的事件通常是JSON格式的文檔,其中包含Lambda函數(shù)要處理的數(shù)據(jù)。Lambda運(yùn)行時(shí)將事件轉(zhuǎn)換為對(duì)象,并將其傳遞給用戶的功能代碼。調(diào)用函數(shù)時(shí),需要確定事件的結(jié)構(gòu)和內(nèi)容。3.觸發(fā)器Lambda的觸發(fā)器是調(diào)用Lambda函數(shù)的入口。這包括可配置為調(diào)用功能的亞馬遜云科技服務(wù),所開發(fā)的應(yīng)用程序以及事件源映射。事件源映射是Lambda中的一種資源,它從流或隊(duì)列中讀取項(xiàng)目并執(zhí)行函數(shù)代碼。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.1創(chuàng)建Lambda函數(shù)1.登錄AWSLambda控制臺(tái)登錄到AWS控制臺(tái),找到AWSLambda服務(wù),進(jìn)入到AWSLambda控制臺(tái),點(diǎn)擊右上角創(chuàng)建函數(shù)。三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)2.創(chuàng)建Lambda函數(shù)選擇“從頭開始創(chuàng)作”。4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)2.創(chuàng)建Lambda函數(shù)基本信息中函數(shù)名稱填入名稱,例如myFirstFunc。運(yùn)行時(shí)選擇Python3.7即可使用Python進(jìn)行Lambda函數(shù)的編寫。4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)由于本任務(wù)只進(jìn)行基礎(chǔ)功能測(cè)試,所以權(quán)限部分選擇“創(chuàng)建具有基本Lambda權(quán)限的新角色”。項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)2.創(chuàng)建Lambda函數(shù)點(diǎn)擊“創(chuàng)建函數(shù)”,進(jìn)入函數(shù)創(chuàng)建頁面。4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)3.編寫、測(cè)試Lambda函數(shù)importjson
deflambda_handler(event,context):#TODOimplementmes=""try:#TODO:writecode...mes=event['mes']return"獲得消息"+mesexceptExceptionase:print(e)return{'statusCode':400,'body':('獲取消息失敗')}4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)該段代碼以Python實(shí)現(xiàn)了一個(gè)函數(shù),函數(shù)名為“l(fā)ambda_handler”,這一個(gè)函數(shù)即為L(zhǎng)ambda處理事件的函數(shù)。本任務(wù)中l(wèi)ambda_handler函數(shù)功能為解析event,獲取event中的'mes'字段的內(nèi)容。event的類型可以理解為Python的字典(dict)。3.編寫、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施3.編寫、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)該接下來對(duì)該Lambda函數(shù)進(jìn)行測(cè)試,下拉欄中點(diǎn)擊“配置測(cè)試事件”。項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)點(diǎn)擊“創(chuàng)建新測(cè)試事件”,事件模板選擇“hello-world”,事件名稱為“Lambdatest”。3.編寫、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)事件的內(nèi)容為json格式,這里我們把“key1”的鍵改為“mes”,值改為“HelloLambda!”,點(diǎn)擊創(chuàng)建。3.編寫、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)在下拉欄選擇“Lambdatest”,點(diǎn)擊測(cè)試。得到下列結(jié)果即運(yùn)行成功:3.編寫、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無需預(yù)置或管理服務(wù)器的Web后端本任務(wù)將使用AmazonAPIGateway結(jié)合AWSLambda開發(fā)出一個(gè)簡(jiǎn)單的ServerlessWeb后端應(yīng)用。在這個(gè)應(yīng)用中AmazonAPIGateway接受HTTP請(qǐng)求后作為觸發(fā)器對(duì)Lambda函數(shù)進(jìn)行調(diào)用,Lambda返回值通過AmazonAPIGateway傳送至web客戶端。一、任務(wù)描述項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無需預(yù)置或管理服務(wù)器的Web后端1.AmazonAPIGatewayAmazonAPIGateway是一項(xiàng)亞馬遜云科技服務(wù),使用戶能夠以任意規(guī)模創(chuàng)建,發(fā)布,維護(hù),監(jiān)控和保護(hù)自己的REST和WebSocketAPI。用戶可以創(chuàng)建健壯,安全和可擴(kuò)展的API,這些API可以訪問亞馬遜云科技或其他Web服務(wù)以及存儲(chǔ)在亞馬遜云科技中的數(shù)據(jù)。您可以創(chuàng)建在自己的客戶端應(yīng)用程序(應(yīng)用程序)中使用的API?;蛘?,您可以將API供第三方應(yīng)用程序開發(fā)人員使用。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無需預(yù)置或管理服務(wù)器的Web后端2.Serverless計(jì)算Serverless計(jì)算是一種云計(jì)算執(zhí)行模型,其中云計(jì)算平臺(tái)提供了程序運(yùn)行的環(huán)境,并動(dòng)態(tài)管理機(jī)器資源的分配。定價(jià)基于應(yīng)用程序?qū)嶋H消耗的資源量,而不是預(yù)先購買的容量單位。Serverless計(jì)算可以簡(jiǎn)化將代碼部署到生產(chǎn)中的過程。擴(kuò)展,容量規(guī)劃和維護(hù)操作可能對(duì)開發(fā)人員或操作員隱藏。Serverless代碼可以與以傳統(tǒng)樣式(如微服務(wù))部署的代碼結(jié)合使用?;蛘?,可以將應(yīng)用程序編寫為完全Serverless的,并且完全不使用預(yù)配置的服務(wù)器。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無需預(yù)置或管理服務(wù)器的Web后端1.創(chuàng)建APIGateway登錄APIGateway控制臺(tái),點(diǎn)擊創(chuàng)建API。三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)選擇構(gòu)建RESTAPI。4.1.2無需預(yù)置或管理服務(wù)器的Web后端1.創(chuàng)建APIGateway三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)本任務(wù)選擇“REST”,選擇“新建API”。API的名詞設(shè)置為“MyFirstAPI”,終端節(jié)點(diǎn)類型為“區(qū)域性”,點(diǎn)擊“創(chuàng)建API”。4.1.2無需預(yù)置或管理服務(wù)器的Web后端1.創(chuàng)建APIGateway三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)2.創(chuàng)建Lambda函數(shù)創(chuàng)建名為“SimpleHTML”的Lambda函數(shù),相關(guān)屬性配置如下:4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)函數(shù)主要功能為返回一個(gè)HTML文檔,文字內(nèi)容為“HelloAPIGateWay!”,代碼如:importjson
deflambda_handler(event,context):#TODOimplementreturn{'statusCode':200,"headers":{'Content-Type':'text/html'},'body':'<p>HelloAPIGateWay!</p>'}2.創(chuàng)建Lambda函數(shù)4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)3.配置APIGateway點(diǎn)擊“操作”,“創(chuàng)建方法”。4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)選擇“GET”,即創(chuàng)建GET方法。該方法集成類型選擇為L(zhǎng)ambda函數(shù),Lambda函數(shù)名為剛創(chuàng)建的“SimpleHTML”。此時(shí)即建立了該APIGateway到Lambda函數(shù)的映射。3.配置APIGateway4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)回到Lambda控制臺(tái),可以看到APIGateway被作為一個(gè)觸發(fā)器被添加到“SimpleHTML”中。3.配置APIGateway4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.測(cè)試APIGateway在APIGateway控制臺(tái)點(diǎn)擊GET方法,即可看到APIGateway的GET方法執(zhí)行流程。4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)點(diǎn)擊測(cè)試,即可運(yùn)行APIGateway模擬測(cè)試,得到以下相應(yīng)正文則測(cè)試通過。4.測(cè)試APIGateway4.1.2無需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施2項(xiàng)目4.2Lambda函數(shù)基礎(chǔ)創(chuàng)建數(shù)據(jù)庫及項(xiàng)目Lambda連接DynamoDB項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)4.2.1創(chuàng)建Lambda函數(shù)1.進(jìn)入DynamoDB控制臺(tái)創(chuàng)建表頁面登錄AWS控制臺(tái),選擇DynamoDB服務(wù),進(jìn)入DynamoDB控制臺(tái)。一、任務(wù)描述4.2.1創(chuàng)建Lambda函數(shù)1.AmazonDynamoDBAmazonDynamoDB是一種完全托管的NoSQL數(shù)據(jù)庫服務(wù),提供快速且可預(yù)測(cè)的性能,同時(shí)還能夠?qū)崿F(xiàn)無縫擴(kuò)展。使用DynamoDB,用戶可以免除操作和擴(kuò)展分布式數(shù)據(jù)庫的管理工作負(fù)擔(dān),因而無需擔(dān)心硬件預(yù)置、設(shè)置和配置、復(fù)制、軟件修補(bǔ)或集群擴(kuò)展等問題。DynamoDB還提供靜態(tài)加密,這消除了在保護(hù)敏感數(shù)據(jù)時(shí)涉及的操作負(fù)擔(dān)和復(fù)雜性。使用DynamoDB,用戶可以創(chuàng)建數(shù)據(jù)庫表來存儲(chǔ)和檢索任意量級(jí)的數(shù)據(jù),并提供任意級(jí)別的請(qǐng)求流量。用戶可以擴(kuò)展或縮減您的表的吞吐容量,而不會(huì)導(dǎo)致停機(jī)或性能下降。此外,用戶還可以使用亞馬遜云科技管理控制臺(tái)來監(jiān)控資源使用情況和各種性能指標(biāo)。DynamoDB提供了按需備份功能。它允許您創(chuàng)建表的完整備份以進(jìn)行長(zhǎng)期保留和存檔,從而滿足監(jiān)管合規(guī)性需求。二、知識(shí)要點(diǎn)項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)4.2.1創(chuàng)建Lambda函數(shù)1.
主鍵主鍵可包含一個(gè)屬性(分區(qū)鍵)或兩個(gè)屬性(分區(qū)鍵和排序鍵)。您需要提供每個(gè)屬性的屬性名稱、數(shù)據(jù)類型和角色:HASH(針對(duì)分區(qū)鍵)和RANGE(針對(duì)排序鍵)。DynamoDB支持兩種不同類型的主鍵:分區(qū)鍵—一個(gè)簡(jiǎn)單的主鍵,由一個(gè)稱為分區(qū)鍵的屬性組成。DynamoDB使用分區(qū)鍵的值作為內(nèi)部哈希函數(shù)的輸入。哈希函數(shù)的輸出確定將在其中存儲(chǔ)項(xiàng)目的分區(qū)(DynamoDB內(nèi)部的物理存儲(chǔ))。二、知識(shí)要點(diǎn)項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)1.進(jìn)入DynamoDB控制臺(tái)創(chuàng)建表頁面點(diǎn)擊“創(chuàng)建表”,進(jìn)入創(chuàng)建表頁面。按以下所示輸入表詳細(xì)信息:對(duì)于表名稱,輸入U(xiǎn)ser。對(duì)于項(xiàng)目鍵,輸入ID,類型改為數(shù)字。選擇Addsortkey(添加排序鍵)。輸入Name作為排序鍵。選擇“創(chuàng)建”以創(chuàng)建表。4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)2.創(chuàng)建項(xiàng)目完成表創(chuàng)建后,自動(dòng)跳轉(zhuǎn)到以下頁面:4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊“項(xiàng)目”,可以看到當(dāng)前表中沒有任何項(xiàng)目。4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施2.創(chuàng)建項(xiàng)目項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊“創(chuàng)建項(xiàng)目”。選擇Name旁邊的加號(hào)(+)。選擇附加,然后選擇String類型。將該字段命名為Sex。重復(fù)此過程以創(chuàng)建Number類型的Age。項(xiàng)選擇以下值:對(duì)于ID,輸入0作為值。對(duì)于Name,輸入Jhon。對(duì)于Sex,輸入男。對(duì)于Age,輸入20。選擇“保存”。4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施2.創(chuàng)建項(xiàng)目項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)在項(xiàng)目頁面可以看到項(xiàng)目被成功添加。4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施2.創(chuàng)建項(xiàng)目項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)4.2.2Lambda連接DynamoDB本任務(wù)將創(chuàng)建Lambda函數(shù)連接上一任務(wù)創(chuàng)建的DynamoDB表,創(chuàng)建新的項(xiàng)目并讀取表中所有信息。項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)一、任務(wù)描述4.2.2Lambda連接DynamoDB利用Python的boto3庫可以方便地對(duì)DynamoDB進(jìn)行增刪改查操作,本任務(wù)即使用put_item及scan方法對(duì)Music表進(jìn)行項(xiàng)目插入及項(xiàng)目信息讀取項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)二、知識(shí)要點(diǎn)
1.lambda函數(shù)寫入DynamoDB
進(jìn)入Lambda函數(shù)創(chuàng)建頁面,函數(shù)名稱填入“InsertDynamoDB”。項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施由于此Lambda函數(shù)需要讀取DynamoDB,我們需要新建一個(gè)執(zhí)行角色,給該角色賦予讀取DynamoDB的權(quán)限。點(diǎn)擊進(jìn)入IAM控制臺(tái)。常見使用案例選擇Lambda。
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊“下一步:權(quán)限”。權(quán)限這里我們選擇“AmazonDynamoDBFullAccess”,該權(quán)限包括對(duì)DynamoDB操作的所有權(quán)限,如果僅賦予讀取權(quán)限,可選擇“AmazonDynamoDBReadOnlyAccess”。最后創(chuàng)建角色名稱為“DynamoDBFullAccess_Role”。
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)在Lambda創(chuàng)建頁面選擇執(zhí)行角色為“DynamoDBFullAccess_Role”,點(diǎn)擊“創(chuàng)建函數(shù)”。
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)該Lambda函數(shù)代碼如下:importjsonimportboto3
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('User')print(type(event))
try:
user.put_item(Item=event)
return{'statusCode':200,'body':json.dumps('SuccesfullyinsertedItem!')}exceptExceptionase:print(e)return{'statusCode':400,'body':json.dumps('ErrorsavingtheItem')}
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)創(chuàng)建一個(gè)測(cè)試事件“test”,包含一個(gè)需要插入至User表中的項(xiàng)目信息:
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊測(cè)試,即可測(cè)試插入Music表的操作是否成功,成功則返回狀態(tài)碼為200:查看Music表的內(nèi)容,可以看到新的項(xiàng)目被成功插入了。
1.lambda函數(shù)寫入DynamoDB
4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)進(jìn)入Lambda函數(shù)創(chuàng)建頁面,函數(shù)名稱填入“ReadDynamoDB”。在Lambda創(chuàng)建頁面選擇執(zhí)行角色為“DynamoDBFullAccess_Role”,點(diǎn)擊“創(chuàng)建函數(shù)”。2.lambda函數(shù)讀取DynamoDB4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)函數(shù)代碼如下:importjsonimportboto3
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('User')
try:
contents=user.scan()
return{'statusCode':200,'body':contents}exceptExceptionase:print(e)return{'statusCode':400,'body':json.dumps('ErrorReadItems')}2.lambda函數(shù)讀取DynamoDB4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)創(chuàng)建一個(gè)測(cè)試事件“test”,內(nèi)容可以任意指定。2.lambda函數(shù)讀取DynamoDB4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊測(cè)試,即可測(cè)試讀取Music表的操作是否成功,成功則返回狀態(tài)碼為200:2.lambda函數(shù)讀取DynamoDB4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)3項(xiàng)目4.3創(chuàng)建用戶及賬本數(shù)據(jù)表用戶注冊(cè)與登錄插入及查詢記賬本項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.3.1用戶注冊(cè)與登錄本任務(wù)將使用S3托管靜態(tài)HTML文件,用戶訪問HTML文件,由HTML文件中JavaScript代碼發(fā)起XMLHttpRequest對(duì)象請(qǐng)求至APIGateway,APIGateway調(diào)用相應(yīng)Lambda函數(shù)完成對(duì)DynamoDB的讀寫,最后結(jié)果由APIGateway回傳至客戶端。一、任務(wù)描述項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.3.1用戶注冊(cè)與登錄1.XMLHttpRequest對(duì)象所有現(xiàn)代瀏覽器都支持XMLHttpRequest對(duì)象。XMLHttpRequest對(duì)象用于同幕后服務(wù)器交換數(shù)據(jù)。這意味著可以更新網(wǎng)頁的部分,而不需要重新加載整個(gè)頁面。在本任務(wù)中XMLHttpRequest發(fā)送請(qǐng)求至APIGateway,并使用其onreadystatechange方法處理相關(guān)的響應(yīng)。2.跨域訪問(CORS)跨域資源共享(CORS)是一種機(jī)制,它使用額外的HTTP頭來告訴瀏覽器讓運(yùn)行在一個(gè)origin(domain)上的Web應(yīng)用被準(zhǔn)許訪問來自不同源服務(wù)器上的指定的資源。當(dāng)一個(gè)資源從與該資源本身所在的服務(wù)器不同的域、協(xié)議或端口請(qǐng)求一個(gè)資源時(shí),資源會(huì)發(fā)起一個(gè)跨域HTTP請(qǐng)求。二、知識(shí)要點(diǎn)創(chuàng)建名為“InsertUser”的Lambda函數(shù),其作用為注冊(cè)用戶時(shí)往User表中插入用戶數(shù)據(jù),角色為“DynamoDBFullAccess_Role”。需要注意的是,客戶端必須通過Json格式發(fā)送“Name”,“Sex”,“Password”三個(gè)字段的信息,ID字段則由代碼在當(dāng)上最大ID值的基礎(chǔ)上自動(dòng)生成。除此之外,DynamoDB允許插入創(chuàng)建表時(shí)定義之外的字段,所以event["Others"]里面包含了用戶自定義的其他信息。代碼如下:4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表importjsonimportboto3
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('User')#TODOimplementID_Max=0
try:contents=user.scan()iflen(contents["Items"])>0:foriincontents["Items"]:print(i["ID"])ifi["ID"]>ID_Max:ID_Max=i["ID"]event["ID"]=ID_Max+1if"Name"notineventor"Sex"notineventor"Password"notinevent:raiseException("Invaliddata!")if"Others"inevent:l=event["Others"].split(",")foriinl:
l2=i.split(":")event[l2[0]]=l2[1]delevent["Others"]
print(event)
user.put_item(Item=event)
return{'statusCode':200,'id':ID_Max+1,'body':"Signinsuccessfully!"}exceptExceptionase:print(e)return{'statusCode':400,'body':str(e)}4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表創(chuàng)建名為“Login”的Lambda函數(shù),其作用為驗(yàn)證用戶登錄信息。該函數(shù)因?yàn)椴恍枰獙懭隓ynamoDB,所以我們創(chuàng)建一個(gè)角色,賦予其對(duì)DynamoDB表只讀權(quán)限“DynamoDBReadOnlyAccess_Role”。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表“Login”的Lambda函數(shù)代碼如下:importjsonimportboto3
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('User')
try:ID=0login_info={}contents=user.scan()iflen(contents["Items"])>0:foriincontents["Items"]:ifevent["ID"]==i["ID"]andevent["Name"]==i["Name"]andevent["Password"]==i["Password"]:ID=i["ID"]return{'statusCode':200,'body':"Loginsuccessfully!","id":ID}
return{'statusCode':200,'body':"Loginfailed!"}exceptExceptionase:print(e)return{'statusCode':400,'body':str(e)}4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表創(chuàng)建RESTAPI,名稱為MyAPI。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表創(chuàng)建login及signin兩個(gè)子資源,需要啟用APIGatewayCORS。對(duì)兩個(gè)子資源都新建POST方法,兩個(gè)方法對(duì)應(yīng)的Lambda函數(shù)分別為“Login”和“InstertUser”。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表需要注意的是,POST方法建立后,還需要再次對(duì)login及signin兩個(gè)子資源啟用CORS才能使用。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表選擇部署API,階段名稱為test。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施3.部署API項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表記錄兩個(gè)POST方法的“調(diào)用URL”,后面編寫前端代碼時(shí)需要填入。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施3.部署API項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表編寫3個(gè)文件“index.html”、“l(fā)ogin.html”、“signin.html”,“l(fā)ogin.html”、“signin.html”中的"XXXXX"需要填入上一步驟記錄的兩個(gè)POST方法的“調(diào)用URL”。index.html:4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁編寫及上傳項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Welcome</title></head><body><buttononclick="window.location.href='/signin.html'">注冊(cè)</button><buttononclick="window.location.href='/login.html'">登錄</button></body></html>4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁編寫及上傳項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>login</title><style>.a{width:300px;height:30px;}#b{width:400px;text-align:right;}</style></head><divid="b"><formid="frm1"action="/test"method="get">ID:<inputtype="text"class="a"name="ID"><br>用戶名:<inputtype="text"class="a"name="user_name"><br>密碼:<inputtype="text"class="a"name="password"><br><br><inputtype="button"value="提交"onclick="login()"></form></div><pid="demo"></p><script>functionlogin(){varxhttp=newXMLHttpRequest();varx=document.getElementById("frm1");if(x.elements[0].value=="admin"&&x.elements[1].value=="admin"){window.location.href='/manage.html';}xhttp.onreadystatechange=function(){if(this.readyState==4&&this.status==200){varobj=JSON.parse(this.responseText);if(obj.body=="Loginsuccessfully!"){alert("Loginsuccessfully!")window.location.href="/cashbook.html"+"?ID="+obj.id;}else{document.getElementById("demo").innerHTML=obj.body;document.cookie=obj.body;}}};myObj={Name:x.elements[1].value,Password:x.elements[2].value,id:Number(x.elements[0].value)};xhttp.open("POST","https://yejne3yi1h.execute-api.ap-southeast-1.amazonaws.com/test/login"(這里需要換成/login的調(diào)用API),true);xhttp.send(JSON.stringify(myObj));}</script></body></html>4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁編寫及上傳項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表signin.html:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><style>.a{width:300px;height:30px;}#b{width:420px;text-align:right;}</style></head><body><p>請(qǐng)輸入注冊(cè)信息</p><divid="b"><formid="frm1"action="/test"method="get">用戶名:<inputtype="text"class="a"name="user_name"><br>性別:<inputtype="text"class="a"name="sex"><br>密碼:<inputtype="text"class="a"name="password"><br>其他信息:<inputtype="text"class="a"name="others"><br><p>其他信息的鍵和值用“:”分開,鍵值對(duì)用“,”分開</p><inputtype="button"value="提交"onclick="signin()"></form></div><pid="demo"></p><script>functionsignin(){varxhttp=newXMLHttpRequest();varx=document.getElementById("frm1");xhttp.onreadystatechange=function(){if(this.readyState==4&&this.status==200){varobj=JSON.parse(this.responseText);if(obj.body=="Signinsuccessfully!"){alert("Signinsuccessfully!YourIDis"+String(obj.id))window.location.href="/cashbook.html"+"?ID="+obj.id;}else{document.getElementById("demo").innerHTML=obj.body;document.cookie=obj.body;}}};myObj={Name:x.elements[0].value,Sex:x.elements[1].value,Password:x.elements[2].value,Others:x.elements[3].value};xhttp.open("POST","https://yejne3yi1h.execute-api.ap-southeast-1.amazonaws.com/test/signin"(這里要換成/signin的調(diào)用API),true);xhttp.send(JSON.stringify(myObj));}</script></body></html>4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁編寫及上傳項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施5.上傳三個(gè)網(wǎng)頁文件到S創(chuàng)建一個(gè)S3存儲(chǔ)桶,上傳3個(gè)文件“index.html”、“l(fā)ogin.html”、“signin.html”至S3。存儲(chǔ)桶及3個(gè)文件均需要開啟公開訪問權(quán)限。項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表上傳S3完成后,可以得到每個(gè)文件的“對(duì)象URL”。4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表訪問index.html的“對(duì)象URL”,即可看到index.html。我們首先選擇“注冊(cè)”,注冊(cè)一個(gè)用戶。填入如下信息:4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表返回上一頁,點(diǎn)擊“登錄”,填入登錄信息:4.3.1用戶注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.3.2插入及查詢記賬本本任務(wù)實(shí)現(xiàn)原理與上面任務(wù)類似,也是使用S3托管靜態(tài)HTML文件,用戶訪問HTML文件,由HTML文件中Javascript代碼發(fā)起XMLHttpRequest對(duì)象請(qǐng)求把記賬本信息傳送至APIGateway,APIGateway調(diào)用相應(yīng)Lambda函數(shù)完成對(duì)DynamoDB的讀寫,最后結(jié)果由APIGateway回傳至客戶端。一、任務(wù)描述項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.3.2插入及查詢記賬本本任務(wù)的知識(shí)要點(diǎn)和上一個(gè)任務(wù)相同,不再贅述二、知識(shí)要點(diǎn)項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表User表的表名稱和項(xiàng)目鍵、排序鍵分別為“CashBook”,“ID”,“User_ID”。4.3.2插入及查詢記賬本三、任務(wù)實(shí)施1.創(chuàng)建CashBook表項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表2.創(chuàng)建Lambda函數(shù)創(chuàng)建名為“InsertCashBook”的Lambda函數(shù),其作用為注冊(cè)用戶時(shí)往CashBook表中插入用戶記賬本數(shù)據(jù),角色為“DynamoDBFullAccess_Role”。“Item”、“Unit-price”、“Quantity”、“User_ID”為必須字段,“Others”為用戶自定義字段,代碼如下:4.3.2插入及查詢記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表importjsonimportboto3
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('CashBook')#TODOimplementID_Max=0
try:contents=user.scan()iflen(contents["Items"])>0:foriincontents["Items"]:print(i["ID"])ifi["ID"]>ID_Max:ID_Max=i["ID"]event["ID"]=ID_Max+1else:event["ID"]=0if"Item"notineventor"Unit-price"notineventor"Quantity"notineventor"User_ID"notinevent:raiseException("Invaliddata!")if"Others"inevent:l=event["Others"].split(",")foriinl:
l2=i.split(":")event[l2[0]]=l2[1]delevent["Others"]
print(event)
user.put_item(Item=event)
return{'statusCode':200,'id':ID_Max+1,'body':"Insertitemsuccessfully!"}2exceptExceptionase:print(e)return{'statusCode':400,'body':str(e)}2.創(chuàng)建Lambda函數(shù)4.3.2插入及查詢記賬本三、任務(wù)實(shí)施創(chuàng)建名為“InsertCashBook”的Lambda函數(shù),其作用為注冊(cè)用戶時(shí)往CashBook表中插入用戶記賬本數(shù)據(jù),角色為“DynamoDBFullAccess_Role”?!癐tem”、“Unit-price”、“Quantity”、“User_ID”為必須字段,“Others”為用戶自定義字段,代碼如下項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表創(chuàng)建名為“QueryCashBook”的Lambda函數(shù),其作用為查詢?cè)撚脩羲杏涃~本信息,該函數(shù)因?yàn)椴恍枰獙懭隓ynamoDB,所以我們創(chuàng)建一個(gè)對(duì)DynamoDB只讀權(quán)限角色名為“DynamoDBReadOnlyAccess_Role”。importjsonimportboto3fromboto3.dynamodb.conditionsimportKey,Attr
deflambda_handler(event,context):
dynamodb=boto3.resource('dynamodb')
user=dynamodb.Table('CashBook')
try:ID=0login_info={}contents=user.scan(FilterExpression=Attr("User_ID").eq(event["id"]))
return{'statusCode':200,'body':contents["Items"]}exceptExceptionase:print(e)return{'statusCode':400,'body':str(e)}2.創(chuàng)建Lambda函數(shù)4.3.2插入及查詢記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表3.添加API子資源、方法并部署在“MyAPI”APIGateway中添加“/insertcashbook”及“/querycashbook”兩個(gè)子資源,添加POST方法,對(duì)應(yīng)Lambda方法分別為“InsertCashBook”及“QueryCashBook”,開啟CORS訪問。刪除前一任務(wù)的“test”階段,重新部署API,階段名稱仍然為“test”。記錄“/insertcashbook”及“/querycashbook”的“調(diào)用URL”。4.3.2插入及查詢記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶及賬本數(shù)據(jù)表4.前端網(wǎng)頁編寫及上傳<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><pid="demo"></p><buttononclick="insert()">插入記賬本</button><buttononclick="query()">查詢記賬本</button><pid="data"></p></body><script>id=getQueryVariable("ID")document.getElementById("demo").innerHTML="Welcome,yourIDis:"+id;functiongetQueryVariable(variable){varquery=window.location.search.substring(1);varvars=query.split("&");for(vari=0;i<vars.length;i++){varpair=vars[i].split("=");if(pair[0]==variable){returnpair[1];}}return(false);}functioninsert(){window.location.href='/insertcashbook.html?ID='+id;};functionquery(){varxhttp=newXMLHttpRequest();varx=document.getElementById("frm1");lets=newSet();vardata=""
xhttp.onreadystatechange=function(){if(this.readyState==4&&this.status==200){varobj=JSON.parse(this.responseText);if(obj.statusCode==200){for(iinobj.body){for(jinObject.keys(obj.body[i])){s.add(Object.keys(obj.body[i])[j]);}}s.delete("ID");s.delete("User_ID")for(iofs){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度電子產(chǎn)品進(jìn)口代理與知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度裝配式建筑部品部件采購合同匯編
- 2025年度建筑工程漿砌石分包合同模板
- 2025年度空調(diào)行業(yè)人才培訓(xùn)與就業(yè)合同
- 2025年度國際貨物貿(mào)易風(fēng)險(xiǎn)管理服務(wù)合同模板
- 生物識(shí)別技術(shù)對(duì)移動(dòng)終端的升級(jí)作用
- 2025年度生物肥料采購與專業(yè)物流配送合同
- 2025年度化工產(chǎn)品運(yùn)輸合同(含司機(jī)培訓(xùn))
- 2025年度體育賽事運(yùn)營合同(含擔(dān)保及賽事安全保障)
- 電商平臺(tái)的數(shù)據(jù)分析與運(yùn)營優(yōu)化
- 知名企業(yè)建筑工程抹灰工程標(biāo)準(zhǔn)規(guī)范圖示手冊(cè)
- 重大事故隱患排查治理
- 2025保安部年度工作計(jì)劃
- 寵物貓護(hù)理教學(xué)
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫
- 圖書借閱登記表
- 中華人民共和國能源法
- 人居環(huán)境綜合治理項(xiàng)目項(xiàng)目背景及必要性分析
- 招標(biāo)采購基礎(chǔ)知識(shí)培訓(xùn)
- 2024年法律職業(yè)資格考試(試卷二)客觀題試題及解答參考
評(píng)論
0/150
提交評(píng)論