云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 課件 單元4、5 我的記賬本、我的云盤(pán)_第1頁(yè)
云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 課件 單元4、5 我的記賬本、我的云盤(pán)_第2頁(yè)
云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 課件 單元4、5 我的記賬本、我的云盤(pán)_第3頁(yè)
云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 課件 單元4、5 我的記賬本、我的云盤(pán)_第4頁(yè)
云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 課件 單元4、5 我的記賬本、我的云盤(pán)_第5頁(yè)
已閱讀5頁(yè),還剩161頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)單元4我的記賬本Lambda基礎(chǔ)連接讀寫(xiě)數(shù)據(jù)庫(kù)創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表綜合實(shí)訓(xùn)-我的賬本知識(shí)目標(biāo):掌握AmazonAPIGateway托管服務(wù)知識(shí)掌握RESTfulAPI知識(shí)掌握AmazonLambda的概念及優(yōu)勢(shì)掌握AmazonLambda的開(kāi)發(fā)知識(shí)掌握AmazonDynamoDB的知識(shí)掌握文字轉(zhuǎn)語(yǔ)音的基本知識(shí)能力目標(biāo):能使用AmazonAPIGateway建立托管服務(wù)能使用RESTfulAPI處理網(wǎng)絡(luò)請(qǐng)求能編寫(xiě)Lambda函數(shù)能夠通過(guò)Lambda構(gòu)建無(wú)服務(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ù)無(wú)需預(yù)置或管理服務(wù)器的Web后端項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.1創(chuàng)建Lambda函數(shù)

AWSLambda是一種計(jì)算服務(wù),可讓運(yùn)行代碼而無(wú)需配置或管理服務(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)視和日志記錄,無(wú)需用戶(hù)任何手動(dòng)干預(yù)。需要使用AWSLambda服務(wù)需要首先在AWSLambdaconsole(AWSLambda控制臺(tái))中創(chuàng)建一個(gè)Lambda函數(shù)。在本任務(wù)中,將使用AWSLambda控制臺(tái)創(chuàng)建Lambda函數(shù)。接下來(lái),使用示例事件數(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í)。用戶(hù)提供了代碼,然后可以使用亞馬遜云科技提供的運(yùn)行時(shí)或創(chuàng)建自己的運(yùn)行時(shí)。2.運(yùn)行時(shí)Lambda運(yùn)行時(shí)允許使用不同語(yǔ)言的函數(shù)在相同的基本執(zhí)行環(huán)境中運(yùn)行。用戶(hù)可以將函數(shù)配置為使用與用戶(hù)的編程語(yǔ)言匹配的運(yùn)行時(shí)。用戶(hù)可以使用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ì)象,并將其傳遞給用戶(hù)的功能代碼。調(diào)用函數(shù)時(shí),需要確定事件的結(jié)構(gòu)和內(nèi)容。3.觸發(fā)器Lambda的觸發(fā)器是調(diào)用Lambda函數(shù)的入口。這包括可配置為調(diào)用功能的亞馬遜云科技服務(wù),所開(kāi)發(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ù)選擇“從頭開(kāi)始創(chuàng)作”。4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)2.創(chuàng)建Lambda函數(shù)基本信息中函數(shù)名稱(chēng)填入名稱(chēng),例如myFirstFunc。運(yùn)行時(shí)選擇Python3.7即可使用Python進(jìn)行Lambda函數(shù)的編寫(xiě)。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)建頁(yè)面。4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)3.編寫(xiě)、測(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的類(lèi)型可以理解為Python的字典(dict)。3.編寫(xiě)、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施3.編寫(xiě)、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)該接下來(lái)對(duì)該Lambda函數(shù)進(jìn)行測(cè)試,下拉欄中點(diǎn)擊“配置測(cè)試事件”。項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)點(diǎn)擊“創(chuàng)建新測(cè)試事件”,事件模板選擇“hello-world”,事件名稱(chēng)為“Lambdatest”。3.編寫(xiě)、測(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.編寫(xiě)、測(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.編寫(xiě)、測(cè)試Lambda函數(shù)4.1.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無(wú)需預(yù)置或管理服務(wù)器的Web后端本任務(wù)將使用AmazonAPIGateway結(jié)合AWSLambda開(kāi)發(fā)出一個(gè)簡(jiǎn)單的ServerlessWeb后端應(yīng)用。在這個(gè)應(yīng)用中AmazonAPIGateway接受HTTP請(qǐng)求后作為觸發(fā)器對(duì)Lambda函數(shù)進(jìn)行調(diào)用,Lambda返回值通過(guò)AmazonAPIGateway傳送至web客戶(hù)端。一、任務(wù)描述項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無(wú)需預(yù)置或管理服務(wù)器的Web后端1.AmazonAPIGatewayAmazonAPIGateway是一項(xiàng)亞馬遜云科技服務(wù),使用戶(hù)能夠以任意規(guī)模創(chuàng)建,發(fā)布,維護(hù),監(jiān)控和保護(hù)自己的REST和WebSocketAPI。用戶(hù)可以創(chuàng)建健壯,安全和可擴(kuò)展的API,這些API可以訪(fǎng)問(wèn)亞馬遜云科技或其他Web服務(wù)以及存儲(chǔ)在亞馬遜云科技中的數(shù)據(jù)。您可以創(chuàng)建在自己的客戶(hù)端應(yīng)用程序(應(yīng)用程序)中使用的API?;蛘?,您可以將API供第三方應(yīng)用程序開(kāi)發(fā)人員使用。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無(wú)需預(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ù)先購(gòu)買(mǎi)的容量單位。Serverless計(jì)算可以簡(jiǎn)化將代碼部署到生產(chǎn)中的過(guò)程。擴(kuò)展,容量規(guī)劃和維護(hù)操作可能對(duì)開(kāi)發(fā)人員或操作員隱藏。Serverless代碼可以與以傳統(tǒng)樣式(如微服務(wù))部署的代碼結(jié)合使用?;蛘?,可以將應(yīng)用程序編寫(xiě)為完全Serverless的,并且完全不使用預(yù)配置的服務(wù)器。二、知識(shí)要點(diǎn)項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)4.1.2無(wú)需預(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無(wú)需預(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)類(lèi)型為“區(qū)域性”,點(diǎn)擊“創(chuàng)建API”。4.1.2無(wú)需預(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無(wú)需預(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無(wú)需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)3.配置APIGateway點(diǎn)擊“操作”,“創(chuàng)建方法”。4.1.2無(wú)需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)選擇“GET”,即創(chuàng)建GET方法。該方法集成類(lèi)型選擇為L(zhǎng)ambda函數(shù),Lambda函數(shù)名為剛創(chuàng)建的“SimpleHTML”。此時(shí)即建立了該APIGateway到Lambda函數(shù)的映射。3.配置APIGateway4.1.2無(wú)需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)回到Lambda控制臺(tái),可以看到APIGateway被作為一個(gè)觸發(fā)器被添加到“SimpleHTML”中。3.配置APIGateway4.1.2無(wú)需預(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無(wú)需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施項(xiàng)目4.1—Lambda函數(shù)基礎(chǔ)點(diǎn)擊測(cè)試,即可運(yùn)行APIGateway模擬測(cè)試,得到以下相應(yīng)正文則測(cè)試通過(guò)。4.測(cè)試APIGateway4.1.2無(wú)需預(yù)置或管理服務(wù)器的Web后端三、任務(wù)實(shí)施2項(xiàng)目4.2Lambda函數(shù)基礎(chǔ)創(chuàng)建數(shù)據(jù)庫(kù)及項(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)建表頁(yè)面登錄AWS控制臺(tái),選擇DynamoDB服務(wù),進(jìn)入DynamoDB控制臺(tái)。一、任務(wù)描述4.2.1創(chuàng)建Lambda函數(shù)1.AmazonDynamoDBAmazonDynamoDB是一種完全托管的NoSQL數(shù)據(jù)庫(kù)服務(wù),提供快速且可預(yù)測(cè)的性能,同時(shí)還能夠?qū)崿F(xiàn)無(wú)縫擴(kuò)展。使用DynamoDB,用戶(hù)可以免除操作和擴(kuò)展分布式數(shù)據(jù)庫(kù)的管理工作負(fù)擔(dān),因而無(wú)需擔(dān)心硬件預(yù)置、設(shè)置和配置、復(fù)制、軟件修補(bǔ)或集群擴(kuò)展等問(wèn)題。DynamoDB還提供靜態(tài)加密,這消除了在保護(hù)敏感數(shù)據(jù)時(shí)涉及的操作負(fù)擔(dān)和復(fù)雜性。使用DynamoDB,用戶(hù)可以創(chuàng)建數(shù)據(jù)庫(kù)表來(lái)存儲(chǔ)和檢索任意量級(jí)的數(shù)據(jù),并提供任意級(jí)別的請(qǐng)求流量。用戶(hù)可以擴(kuò)展或縮減您的表的吞吐容量,而不會(huì)導(dǎo)致停機(jī)或性能下降。此外,用戶(hù)還可以使用亞馬遜云科技管理控制臺(tái)來(lái)監(jiān)控資源使用情況和各種性能指標(biāo)。DynamoDB提供了按需備份功能。它允許您創(chuàng)建表的完整備份以進(jìn)行長(zhǎng)期保留和存檔,從而滿(mǎn)足監(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è)屬性的屬性名稱(chēng)、數(shù)據(jù)類(lèi)型和角色:HASH(針對(duì)分區(qū)鍵)和RANGE(針對(duì)排序鍵)。DynamoDB支持兩種不同類(lèi)型的主鍵:分區(qū)鍵—一個(gè)簡(jiǎn)單的主鍵,由一個(gè)稱(chēng)為分區(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)建表頁(yè)面點(diǎn)擊“創(chuàng)建表”,進(jìn)入創(chuàng)建表頁(yè)面。按以下所示輸入表詳細(xì)信息:對(duì)于表名稱(chēng),輸入U(xiǎn)ser。對(duì)于項(xiàng)目鍵,輸入ID,類(lèi)型改為數(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)到以下頁(yè)面:4.2.1創(chuàng)建Lambda函數(shù)三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)點(diǎn)擊“項(xiàng)目”,可以看到當(dāng)前表中沒(méi)有任何項(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類(lèi)型。將該字段命名為Sex。重復(fù)此過(guò)程以創(chuàng)建Number類(lèi)型的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)目頁(yè)面可以看到項(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庫(kù)可以方便地對(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ù)寫(xiě)入DynamoDB

進(jìn)入Lambda函數(shù)創(chuàng)建頁(yè)面,函數(shù)名稱(chēng)填入“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)。常見(jiàn)使用案例選擇Lambda。

1.lambda函數(shù)寫(xiě)入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)建角色名稱(chēng)為“DynamoDBFullAccess_Role”。

1.lambda函數(shù)寫(xiě)入DynamoDB

4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)在Lambda創(chuàng)建頁(yè)面選擇執(zhí)行角色為“DynamoDBFullAccess_Role”,點(diǎn)擊“創(chuàng)建函數(shù)”。

1.lambda函數(shù)寫(xiě)入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ù)寫(xiě)入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ù)寫(xiě)入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ù)寫(xiě)入DynamoDB

4.2.2Lambda連接DynamoDB三、任務(wù)實(shí)施項(xiàng)目4.2-Lambda函數(shù)基礎(chǔ)進(jìn)入Lambda函數(shù)創(chuàng)建頁(yè)面,函數(shù)名稱(chēng)填入“ReadDynamoDB”。在Lambda創(chuàng)建頁(yè)面選擇執(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)建用戶(hù)及賬本數(shù)據(jù)表用戶(hù)注冊(cè)與登錄插入及查詢(xún)記賬本項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.3.1用戶(hù)注冊(cè)與登錄本任務(wù)將使用S3托管靜態(tài)HTML文件,用戶(hù)訪(fǎng)問(wèn)HTML文件,由HTML文件中JavaScript代碼發(fā)起XMLHttpRequest對(duì)象請(qǐng)求至APIGateway,APIGateway調(diào)用相應(yīng)Lambda函數(shù)完成對(duì)DynamoDB的讀寫(xiě),最后結(jié)果由APIGateway回傳至客戶(hù)端。一、任務(wù)描述項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.3.1用戶(hù)注冊(cè)與登錄1.XMLHttpRequest對(duì)象所有現(xiàn)代瀏覽器都支持XMLHttpRequest對(duì)象。XMLHttpRequest對(duì)象用于同幕后服務(wù)器交換數(shù)據(jù)。這意味著可以更新網(wǎng)頁(yè)的部分,而不需要重新加載整個(gè)頁(yè)面。在本任務(wù)中XMLHttpRequest發(fā)送請(qǐng)求至APIGateway,并使用其onreadystatechange方法處理相關(guān)的響應(yīng)。2.跨域訪(fǎng)問(wèn)(CORS)跨域資源共享(CORS)是一種機(jī)制,它使用額外的HTTP頭來(lái)告訴瀏覽器讓運(yùn)行在一個(gè)origin(domain)上的Web應(yīng)用被準(zhǔn)許訪(fǎng)問(wèn)來(lái)自不同源服務(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è)用戶(hù)時(shí)往User表中插入用戶(hù)數(shù)據(jù),角色為“DynamoDBFullAccess_Role”。需要注意的是,客戶(hù)端必須通過(guò)Json格式發(fā)送“Name”,“Sex”,“Password”三個(gè)字段的信息,ID字段則由代碼在當(dāng)上最大ID值的基礎(chǔ)上自動(dòng)生成。除此之外,DynamoDB允許插入創(chuàng)建表時(shí)定義之外的字段,所以event["Others"]里面包含了用戶(hù)自定義的其他信息。代碼如下:4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表創(chuàng)建名為“Login”的Lambda函數(shù),其作用為驗(yàn)證用戶(hù)登錄信息。該函數(shù)因?yàn)椴恍枰獙?xiě)入DynamoDB,所以我們創(chuàng)建一個(gè)角色,賦予其對(duì)DynamoDB表只讀權(quán)限“DynamoDBReadOnlyAccess_Role”。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施1.創(chuàng)建Lambda函數(shù)項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表創(chuàng)建RESTAPI,名稱(chēng)為MyAPI。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表創(chuàng)建login及signin兩個(gè)子資源,需要啟用APIGatewayCORS。對(duì)兩個(gè)子資源都新建POST方法,兩個(gè)方法對(duì)應(yīng)的Lambda函數(shù)分別為“Login”和“InstertUser”。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表需要注意的是,POST方法建立后,還需要再次對(duì)login及signin兩個(gè)子資源啟用CORS才能使用。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施2.創(chuàng)建APIGateway項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表選擇部署API,階段名稱(chēng)為test。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施3.部署API項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表記錄兩個(gè)POST方法的“調(diào)用URL”,后面編寫(xiě)前端代碼時(shí)需要填入。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施3.部署API項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表編寫(xiě)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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁(yè)編寫(xiě)及上傳項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁(yè)編寫(xiě)及上傳項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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>用戶(hù)名:<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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁(yè)編寫(xiě)及上傳項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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">用戶(hù)名:<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>其他信息的鍵和值用“:”分開(kāi),鍵值對(duì)用“,”分開(kāi)</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用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施4.前端網(wǎng)頁(yè)編寫(xiě)及上傳項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施5.上傳三個(gè)網(wǎng)頁(yè)文件到S創(chuàng)建一個(gè)S3存儲(chǔ)桶,上傳3個(gè)文件“index.html”、“l(fā)ogin.html”、“signin.html”至S3。存儲(chǔ)桶及3個(gè)文件均需要開(kāi)啟公開(kāi)訪(fǎng)問(wèn)權(quán)限。項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表上傳S3完成后,可以得到每個(gè)文件的“對(duì)象URL”。4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表訪(fǎng)問(wèn)index.html的“對(duì)象URL”,即可看到index.html。我們首先選擇“注冊(cè)”,注冊(cè)一個(gè)用戶(hù)。填入如下信息:4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表返回上一頁(yè),點(diǎn)擊“登錄”,填入登錄信息:4.3.1用戶(hù)注冊(cè)與登錄三、任務(wù)實(shí)施6.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.3.2插入及查詢(xún)記賬本本任務(wù)實(shí)現(xiàn)原理與上面任務(wù)類(lèi)似,也是使用S3托管靜態(tài)HTML文件,用戶(hù)訪(fǎng)問(wèn)HTML文件,由HTML文件中Javascript代碼發(fā)起XMLHttpRequest對(duì)象請(qǐng)求把記賬本信息傳送至APIGateway,APIGateway調(diào)用相應(yīng)Lambda函數(shù)完成對(duì)DynamoDB的讀寫(xiě),最后結(jié)果由APIGateway回傳至客戶(hù)端。一、任務(wù)描述項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.3.2插入及查詢(xún)記賬本本任務(wù)的知識(shí)要點(diǎn)和上一個(gè)任務(wù)相同,不再贅述二、知識(shí)要點(diǎn)項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表User表的表名稱(chēng)和項(xiàng)目鍵、排序鍵分別為“CashBook”,“ID”,“User_ID”。4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施1.創(chuàng)建CashBook表項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表2.創(chuàng)建Lambda函數(shù)創(chuàng)建名為“InsertCashBook”的Lambda函數(shù),其作用為注冊(cè)用戶(hù)時(shí)往CashBook表中插入用戶(hù)記賬本數(shù)據(jù),角色為“DynamoDBFullAccess_Role”?!癐tem”、“Unit-price”、“Quantity”、“User_ID”為必須字段,“Others”為用戶(hù)自定義字段,代碼如下:4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(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插入及查詢(xún)記賬本三、任務(wù)實(shí)施創(chuàng)建名為“InsertCashBook”的Lambda函數(shù),其作用為注冊(cè)用戶(hù)時(shí)往CashBook表中插入用戶(hù)記賬本數(shù)據(jù),角色為“DynamoDBFullAccess_Role”?!癐tem”、“Unit-price”、“Quantity”、“User_ID”為必須字段,“Others”為用戶(hù)自定義字段,代碼如下項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表創(chuàng)建名為“QueryCashBook”的Lambda函數(shù),其作用為查詢(xún)?cè)撚脩?hù)所有記賬本信息,該函數(shù)因?yàn)椴恍枰獙?xiě)入DynamoDB,所以我們創(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插入及查詢(xún)記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表3.添加API子資源、方法并部署在“MyAPI”APIGateway中添加“/insertcashbook”及“/querycashbook”兩個(gè)子資源,添加POST方法,對(duì)應(yīng)Lambda方法分別為“InsertCashBook”及“QueryCashBook”,開(kāi)啟CORS訪(fǎng)問(wèn)。刪除前一任務(wù)的“test”階段,重新部署API,階段名稱(chēng)仍然為“test”。記錄“/insertcashbook”及“/querycashbook”的“調(diào)用URL”。4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4.前端網(wǎng)頁(yè)編寫(xiě)及上傳<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><pid="demo"></p><buttononclick="insert()">插入記賬本</button><buttononclick="query()">查詢(xún)記賬本</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){data+=String(i)+" |"}data+="</br>"for(jinobj.body){for(iofs){if(iinobj.body[j]){data+=String(obj.body[j][i])+" |"}else{data+=" |"}}data+="</br>"}document.getElementById("data").innerHTML=data;}else{document.getElementById("demo").innerHTML=obj.body;document.cookie=obj.body;}}}myObj={id:Number(id)};xhttp.open("POST","XXXXX",true);xhttp.send(JSON.stringify(myObj));};</script></html>本任務(wù)需要編寫(xiě)兩個(gè)前端網(wǎng)頁(yè)“cashbook.html”及“insertcashbook.html”,兩個(gè)文件中的"XXXXX"需要分別用“/querycashbook”及“/insertcashbook”的“調(diào)用URL”代替`。cashbook.html代碼如下:4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表5.測(cè)試在任務(wù)4.3.1完成登錄后會(huì)自動(dòng)跳轉(zhuǎn)至cashbook.html:點(diǎn)擊“查詢(xún)記賬本”,可以看到當(dāng)前該用戶(hù)的賬本信息(可能為空):4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表此時(shí)我們點(diǎn)擊“插入記賬本”,插入一項(xiàng)記賬信息,點(diǎn)擊提交,其中其他信息為:“Type:Game,Shop:Steam,Rank:A”,點(diǎn)擊提交,提示插入item成功:4.3.2插入及查詢(xún)記賬本三、任務(wù)實(shí)施5.測(cè)試項(xiàng)目4.3-創(chuàng)建用戶(hù)及賬本數(shù)據(jù)表4項(xiàng)目4.4綜合實(shí)訓(xùn)---我的記賬本項(xiàng)目4—綜合實(shí)訓(xùn)---我的記賬本本項(xiàng)目利用了亞馬遜云計(jì)算AWS的服務(wù)實(shí)現(xiàn)一個(gè)我的記賬本的ServerlessWeb應(yīng)用。ServerlessWeb架構(gòu)主要特點(diǎn)為無(wú)需配置任何服務(wù)器,所有托管代碼不使用的情況下不產(chǎn)生任何費(fèi)用,網(wǎng)站網(wǎng)絡(luò)吞吐及處理能力理論上可以實(shí)現(xiàn)零到正無(wú)窮的自動(dòng)彈性伸縮,是一種先進(jìn)的云計(jì)算框架,實(shí)際用途廣泛。本項(xiàng)目采用DynamoDB作為數(shù)據(jù)庫(kù),DynamoDB也具有彈性伸縮的特性,表創(chuàng)建完成后字段可以任意擴(kuò)展本W(wǎng)eb應(yīng)用的功能主要包括:用戶(hù)的注冊(cè)和登錄記賬本信息插入及查詢(xún)用戶(hù)信息的查詢(xún)、更新、刪除、導(dǎo)出項(xiàng)目4—綜合實(shí)訓(xùn)---我的記賬本本項(xiàng)目綜合使用S3、APIGateway、Lambda、DynamoDB技術(shù)實(shí)現(xiàn)了ServerlessWeb應(yīng)用,編程語(yǔ)言包括HTML、Javascript、Python。要點(diǎn)為掌握ServerlessWeb架構(gòu)的開(kāi)發(fā)。本項(xiàng)目Serverless基本架構(gòu)為:所有的html文件均托管在同一個(gè)S3存儲(chǔ)桶中,權(quán)限為可公開(kāi)訪(fǎng)問(wèn),用戶(hù)可以直接通過(guò)互聯(lián)網(wǎng)對(duì)html資源進(jìn)行訪(fǎng)問(wèn)。用戶(hù)在html資源上做出操作后,客戶(hù)端通過(guò)JavaScript送DORS請(qǐng)求至各自相應(yīng)的APIGateway資源,APIGateway資源調(diào)用Lambda函數(shù)。Lambda函數(shù)對(duì)DynamoDB進(jìn)行相應(yīng)讀寫(xiě)操作,并把結(jié)果通過(guò)APIGateway返回客戶(hù)端。項(xiàng)目4—綜合實(shí)訓(xùn)---我的記賬本項(xiàng)目實(shí)施1.創(chuàng)建2個(gè)DynamoDB表格:User、CashBook。2.

創(chuàng)建角色:創(chuàng)建“DynamoDBFullAccess_Role”3.創(chuàng)建7個(gè)Lambda函數(shù):Login、QueryCashBook、QueryUser、InsertCashBook、DeleteUser、UpdateUser、InsertUser。4.創(chuàng)建名為“MyAPI”的APIGateway,在“MyAPI”APIGateway中添加7個(gè)子資源。5.編寫(xiě)6個(gè)HTML文件:“cashbook.html”、“index.html”、“insertcashbook.html”、“l(fā)ogin.html”、“manage.html”、“signin.html”,并上傳至S3同一個(gè)桶中,訪(fǎng)問(wèn)權(quán)限設(shè)為公開(kāi)。6.至此本任務(wù)的編寫(xiě)及部署全部完成,可以進(jìn)行測(cè)試:訪(fǎng)問(wèn)index.html的URL即可進(jìn)入網(wǎng)站,測(cè)試所有功能。謝謝觀看

云應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)單元5我的云盤(pán)項(xiàng)目5.1使用AmazonS3云盤(pán)存儲(chǔ)桶項(xiàng)目5.2設(shè)計(jì)圖形化界面客戶(hù)端項(xiàng)目5.3設(shè)計(jì)云盤(pán)用戶(hù)管理程序項(xiàng)目5.4設(shè)計(jì)云盤(pán)文件管理程序項(xiàng)目5.5綜合實(shí)訓(xùn)---我的云盤(pán)知識(shí)目標(biāo):掌握AmazonS3文件存儲(chǔ)與存儲(chǔ)桶知識(shí)掌握PythonSDK與AmazonS3服務(wù)知識(shí)掌握AmazonRDSMySql數(shù)據(jù)庫(kù)存儲(chǔ)知識(shí)掌握AmazonEC2虛擬機(jī)知識(shí)掌握AmazonSTS臨時(shí)令牌的知識(shí)掌握Amazon服務(wù)權(quán)限動(dòng)態(tài)分配知識(shí)掌握Pythontkinter圖形化界面的知識(shí)能力目標(biāo):能使用AmazonS3控制臺(tái)創(chuàng)建存儲(chǔ)桶與文件夾能使用AmazonS3控制臺(tái)進(jìn)行文件上傳與下載能使用AmazonRDS創(chuàng)建MySql數(shù)據(jù)庫(kù)實(shí)例能使用PythonSDK編程創(chuàng)建S3云盤(pán)能使用Python編程查看、上傳、下載、刪除S3文件能使用Flask創(chuàng)建用戶(hù)管理的代理服務(wù)器能使用代理服務(wù)器實(shí)現(xiàn)用戶(hù)注冊(cè)與認(rèn)證能使用代理服務(wù)器從AmazonSTS服務(wù)申請(qǐng)臨時(shí)令牌能使用臨時(shí)令牌編程查看、上傳、下載、刪除S3文件能使用tkinker進(jìn)行圖形化界面設(shè)計(jì)項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶一、任務(wù)描述在有了一個(gè)能操作AmazonS3的賬號(hào)后,就能登錄到AWS控制臺(tái)進(jìn)行S3的存儲(chǔ)操作,S3按存儲(chǔ)桶來(lái)劃分存儲(chǔ)空間,因此需要?jiǎng)?chuàng)建一個(gè)云盤(pán)存儲(chǔ)桶。二、知識(shí)要點(diǎn)存儲(chǔ)桶(Bucket)存儲(chǔ)桶是AmazonS3中用于存儲(chǔ)對(duì)象的容器,每個(gè)對(duì)象都存在各自的存中。存儲(chǔ)桶可以組織最高等級(jí)的AmazonS3命名空間、識(shí)別負(fù)責(zé)存儲(chǔ)和數(shù)據(jù)傳輸費(fèi)用的賬戶(hù)、在訪(fǎng)問(wèn)控制中發(fā)揮作用以及用作使用率報(bào)告的匯總單位。例如我們的云盤(pán)就使用一個(gè)存儲(chǔ)桶,存儲(chǔ)所有用戶(hù)的文件。5.1.1亞馬遜云科技控制臺(tái)創(chuàng)建云盤(pán)

2.對(duì)象(Object)AmazonS3中存儲(chǔ)的實(shí)體,可以簡(jiǎn)單理解為存儲(chǔ)的文件(實(shí)際上還包含文件的其它元數(shù)據(jù),例如Content-Type等)。

3.鍵(Key)

存儲(chǔ)桶中對(duì)象的唯一標(biāo)識(shí)符,可以簡(jiǎn)單理解為存儲(chǔ)的文件名項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶4.區(qū)域(Region)Amazon根據(jù)全球不同國(guó)家,劃分了很多區(qū)域,每個(gè)區(qū)域的存儲(chǔ)桶是互不干擾的。AWS目前有三個(gè)分區(qū):aws(標(biāo)準(zhǔn)區(qū)域)、aws-cn(中國(guó)區(qū)域)和aws-us-gov(AWSGovCIoud[美國(guó)]區(qū)域)。寧夏區(qū)和北京區(qū)同屬于中國(guó)區(qū)域。在同一個(gè)分區(qū)中,存儲(chǔ)桶名必須唯一,也就是同一個(gè)存儲(chǔ)桶名在北京區(qū)已經(jīng)存在,是無(wú)法再在寧夏區(qū)創(chuàng)建成功的。每個(gè)區(qū)都有一個(gè)代碼,AWS在中國(guó)北京區(qū)的代碼是“cn-north-l'',在寧夏區(qū)的是“cn-northwest-l"。項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶三、任務(wù)實(shí)施5.1.1亞馬遜云科技控制臺(tái)創(chuàng)建云盤(pán)1.創(chuàng)建有AmazonS3控制權(quán)的賬號(hào)管理員登錄進(jìn)入AWSConsole控制臺(tái)頁(yè)面,并選擇IAM服務(wù),創(chuàng)建一個(gè)賬號(hào)有AmazonS3FullAccess權(quán)限的賬號(hào),'cloud.disk.user”,如圖5-1-1所示。圖5-1-1創(chuàng)建賬號(hào)項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶第一行是Key的類(lèi)型,它們使用逗號(hào)分開(kāi),第二行就是對(duì)應(yīng)的值,我們可以通過(guò)讀這個(gè)CSV文件得到各個(gè)值。然后下載這個(gè)賬號(hào)的accessKeys.csv文件,它有兩行,格式如下:三、任務(wù)實(shí)施

5.1.1亞馬遜云科技控制臺(tái)創(chuàng)建云盤(pán)1.創(chuàng)建有AmazonS3控制權(quán)的賬號(hào)項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶圖5-1-2S3服務(wù)⑵選擇”創(chuàng)建存儲(chǔ)桶”輸入云盤(pán),存儲(chǔ)桶的名稱(chēng),例如kloud.disk.bucketh,并選擇一個(gè)區(qū)域,如圖5-1-2所示。2.創(chuàng)建云盤(pán)存儲(chǔ)桶三、任務(wù)實(shí)施5.1.1亞馬遜云科技控制臺(tái)創(chuàng)建云盤(pán)⑴

使用cloud.disk.user賬號(hào)登錄進(jìn)入后選擇S3服務(wù),如圖5-1-2所示項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶⑶選擇“阻止全部公共訪(fǎng)問(wèn)權(quán)限”為打開(kāi)狀態(tài),這樣使得該存儲(chǔ)桶不是公共存儲(chǔ)桶,一般別的用戶(hù)不可以訪(fǎng)問(wèn),如圖5-1-4所示。2.創(chuàng)建云盤(pán)存儲(chǔ)桶三、任務(wù)實(shí)施5.1.1亞馬遜云科技控制臺(tái)創(chuàng)建云盤(pán)(4)創(chuàng)建的存儲(chǔ)桶如圖5-1-5所示,所有的

云盤(pán)文件都將存儲(chǔ)在這個(gè)存儲(chǔ)桶中。項(xiàng)目5.1--使用AmazonS3云盤(pán)存儲(chǔ)桶⑸選擇進(jìn)入這個(gè)存儲(chǔ)桶,就可以再把文件上傳到該存儲(chǔ)桶。文件還可以使用文件夾分類(lèi),如右圖上傳了client.py與server.py兩個(gè)文件,還創(chuàng)建了一個(gè)名稱(chēng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論