版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
云应用开发实战单元4我的记账本Lambda基础连接读写数据库创建用户及账本数据表综合实训-我的账本知识目标:掌握AmazonAPIGateway托管服务知识掌握RESTfulAPI知识掌握AmazonLambda的概念及优势掌握AmazonLambda的开发知识掌握AmazonDynamoDB的知识掌握文字转语音的基本知识能力目标:能使用AmazonAPIGateway建立托管服务能使用RESTfulAPI处理网络请求能编写Lambda函数能够通过Lambda构建无服务应用程序能够对DynamoDB进行增删改查操作能够基于DynamoDB构建应用程序能创建有AmazonPolly权限的AWS账号1项目4.1Lambda函数基础创建Lambda函数无需预置或管理服务器的Web后端项目4.1—Lambda函数基础4.1.1创建Lambda函数
AWSLambda是一种计算服务,可让运行代码而无需配置或管理服务器。AWSLambda以函数形式存在,仅在代码运行时计费,代码未运行时不产生费用。AWSLambda在高可用性计算基础架构上运行代码,并负责计算资源的所有管理工作,包括服务器和操作系统维护,容量供应和自动扩展,代码监视和日志记录,无需用户任何手动干预。需要使用AWSLambda服务需要首先在AWSLambdaconsole(AWSLambda控制台)中创建一个Lambda函数。在本任务中,将使用AWSLambda控制台创建Lambda函数。接下来,使用示例事件数据手动测试Lambda函数。AWSLambda执行Lambda函数并返回结果。一、任务描述项目4.1—Lambda函数基础4.1.1创建Lambda函数1.函数Lambda函数是一种资源,可以调用该资源在其中运行代码。函数需要定义处理事件的代码,以及具有在事件和函数代码之间传递请求和响应的运行时。用户提供了代码,然后可以使用亚马逊云科技提供的运行时或创建自己的运行时。2.运行时Lambda运行时允许使用不同语言的函数在相同的基本执行环境中运行。用户可以将函数配置为使用与用户的编程语言匹配的运行时。用户可以使用Lambda提供的运行时,也可以构建自己的运行时。二、知识要点项目4.1—Lambda函数基础4.1.1创建Lambda函数3.事件Lambda中的事件通常是JSON格式的文档,其中包含Lambda函数要处理的数据。Lambda运行时将事件转换为对象,并将其传递给用户的功能代码。调用函数时,需要确定事件的结构和内容。3.触发器Lambda的触发器是调用Lambda函数的入口。这包括可配置为调用功能的亚马逊云科技服务,所开发的应用程序以及事件源映射。事件源映射是Lambda中的一种资源,它从流或队列中读取项目并执行函数代码。二、知识要点项目4.1—Lambda函数基础4.1.1创建Lambda函数1.登录AWSLambda控制台登录到AWS控制台,找到AWSLambda服务,进入到AWSLambda控制台,点击右上角创建函数。三、任务实施项目4.1—Lambda函数基础2.创建Lambda函数选择“从头开始创作”。4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础2.创建Lambda函数基本信息中函数名称填入名称,例如myFirstFunc。运行时选择Python3.7即可使用Python进行Lambda函数的编写。4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础由于本任务只进行基础功能测试,所以权限部分选择“创建具有基本Lambda权限的新角色”。项目4.1—Lambda函数基础2.创建Lambda函数点击“创建函数”,进入函数创建页面。4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础3.编写、测试Lambda函数importjson
deflambda_handler(event,context):#TODOimplementmes=""try:#TODO:writecode...mes=event['mes']return"获得消息"+mesexceptExceptionase:print(e)return{'statusCode':400,'body':('获取消息失败')}4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础该段代码以Python实现了一个函数,函数名为“lambda_handler”,这一个函数即为Lambda处理事件的函数。本任务中lambda_handler函数功能为解析event,获取event中的'mes'字段的内容。event的类型可以理解为Python的字典(dict)。3.编写、测试Lambda函数4.1.1创建Lambda函数三、任务实施3.编写、测试Lambda函数4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础该接下来对该Lambda函数进行测试,下拉栏中点击“配置测试事件”。项目4.1—Lambda函数基础点击“创建新测试事件”,事件模板选择“hello-world”,事件名称为“Lambdatest”。3.编写、测试Lambda函数4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础事件的内容为json格式,这里我们把“key1”的键改为“mes”,值改为“HelloLambda!”,点击创建。3.编写、测试Lambda函数4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础在下拉栏选择“Lambdatest”,点击测试。得到下列结果即运行成功:3.编写、测试Lambda函数4.1.1创建Lambda函数三、任务实施项目4.1—Lambda函数基础4.1.2无需预置或管理服务器的Web后端本任务将使用AmazonAPIGateway结合AWSLambda开发出一个简单的ServerlessWeb后端应用。在这个应用中AmazonAPIGateway接受HTTP请求后作为触发器对Lambda函数进行调用,Lambda返回值通过AmazonAPIGateway传送至web客户端。一、任务描述项目4.1—Lambda函数基础4.1.2无需预置或管理服务器的Web后端1.AmazonAPIGatewayAmazonAPIGateway是一项亚马逊云科技服务,使用户能够以任意规模创建,发布,维护,监控和保护自己的REST和WebSocketAPI。用户可以创建健壮,安全和可扩展的API,这些API可以访问亚马逊云科技或其他Web服务以及存储在亚马逊云科技中的数据。您可以创建在自己的客户端应用程序(应用程序)中使用的API。或者,您可以将API供第三方应用程序开发人员使用。二、知识要点项目4.1—Lambda函数基础4.1.2无需预置或管理服务器的Web后端2.Serverless计算Serverless计算是一种云计算执行模型,其中云计算平台提供了程序运行的环境,并动态管理机器资源的分配。定价基于应用程序实际消耗的资源量,而不是预先购买的容量单位。Serverless计算可以简化将代码部署到生产中的过程。扩展,容量规划和维护操作可能对开发人员或操作员隐藏。Serverless代码可以与以传统样式(如微服务)部署的代码结合使用。或者,可以将应用程序编写为完全Serverless的,并且完全不使用预配置的服务器。二、知识要点项目4.1—Lambda函数基础4.1.2无需预置或管理服务器的Web后端1.创建APIGateway登录APIGateway控制台,点击创建API。三、任务实施项目4.1—Lambda函数基础选择构建RESTAPI。4.1.2无需预置或管理服务器的Web后端1.创建APIGateway三、任务实施项目4.1—Lambda函数基础本任务选择“REST”,选择“新建API”。API的名词设置为“MyFirstAPI”,终端节点类型为“区域性”,点击“创建API”。4.1.2无需预置或管理服务器的Web后端1.创建APIGateway三、任务实施项目4.1—Lambda函数基础2.创建Lambda函数创建名为“SimpleHTML”的Lambda函数,相关属性配置如下:4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础函数主要功能为返回一个HTML文档,文字内容为“HelloAPIGateWay!”,代码如:importjson
deflambda_handler(event,context):#TODOimplementreturn{'statusCode':200,"headers":{'Content-Type':'text/html'},'body':'<p>HelloAPIGateWay!</p>'}2.创建Lambda函数4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础3.配置APIGateway点击“操作”,“创建方法”。4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础选择“GET”,即创建GET方法。该方法集成类型选择为Lambda函数,Lambda函数名为刚创建的“SimpleHTML”。此时即建立了该APIGateway到Lambda函数的映射。3.配置APIGateway4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础回到Lambda控制台,可以看到APIGateway被作为一个触发器被添加到“SimpleHTML”中。3.配置APIGateway4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础4.测试APIGateway在APIGateway控制台点击GET方法,即可看到APIGateway的GET方法执行流程。4.1.2无需预置或管理服务器的Web后端三、任务实施项目4.1—Lambda函数基础点击测试,即可运行APIGateway模拟测试,得到以下相应正文则测试通过。4.测试APIGateway4.1.2无需预置或管理服务器的Web后端三、任务实施2项目4.2Lambda函数基础创建数据库及项目Lambda连接DynamoDB项目4.2-Lambda函数基础4.2.1创建Lambda函数1.进入DynamoDB控制台创建表页面登录AWS控制台,选择DynamoDB服务,进入DynamoDB控制台。一、任务描述4.2.1创建Lambda函数1.AmazonDynamoDBAmazonDynamoDB是一种完全托管的NoSQL数据库服务,提供快速且可预测的性能,同时还能够实现无缝扩展。使用DynamoDB,用户可以免除操作和扩展分布式数据库的管理工作负担,因而无需担心硬件预置、设置和配置、复制、软件修补或集群扩展等问题。DynamoDB还提供静态加密,这消除了在保护敏感数据时涉及的操作负担和复杂性。使用DynamoDB,用户可以创建数据库表来存储和检索任意量级的数据,并提供任意级别的请求流量。用户可以扩展或缩减您的表的吞吐容量,而不会导致停机或性能下降。此外,用户还可以使用亚马逊云科技管理控制台来监控资源使用情况和各种性能指标。DynamoDB提供了按需备份功能。它允许您创建表的完整备份以进行长期保留和存档,从而满足监管合规性需求。二、知识要点项目4.2-Lambda函数基础4.2.1创建Lambda函数1.
主键主键可包含一个属性(分区键)或两个属性(分区键和排序键)。您需要提供每个属性的属性名称、数据类型和角色:HASH(针对分区键)和RANGE(针对排序键)。DynamoDB支持两种不同类型的主键:分区键—一个简单的主键,由一个称为分区键的属性组成。DynamoDB使用分区键的值作为内部哈希函数的输入。哈希函数的输出确定将在其中存储项目的分区(DynamoDB内部的物理存储)。二、知识要点项目4.2-Lambda函数基础1.进入DynamoDB控制台创建表页面点击“创建表”,进入创建表页面。按以下所示输入表详细信息:对于表名称,输入User。对于项目键,输入ID,类型改为数字。选择Addsortkey(添加排序键)。输入Name作为排序键。选择“创建”以创建表。4.2.1创建Lambda函数三、任务实施项目4.2-Lambda函数基础2.创建项目完成表创建后,自动跳转到以下页面:4.2.1创建Lambda函数三、任务实施项目4.2-Lambda函数基础点击“项目”,可以看到当前表中没有任何项目。4.2.1创建Lambda函数三、任务实施2.创建项目项目4.2-Lambda函数基础点击“创建项目”。选择Name旁边的加号(+)。选择附加,然后选择String类型。将该字段命名为Sex。重复此过程以创建Number类型的Age。项选择以下值:对于ID,输入0作为值。对于Name,输入Jhon。对于Sex,输入男。对于Age,输入20。选择“保存”。4.2.1创建Lambda函数三、任务实施2.创建项目项目4.2-Lambda函数基础在项目页面可以看到项目被成功添加。4.2.1创建Lambda函数三、任务实施2.创建项目项目4.2-Lambda函数基础4.2.2Lambda连接DynamoDB本任务将创建Lambda函数连接上一任务创建的DynamoDB表,创建新的项目并读取表中所有信息。项目4.2-Lambda函数基础一、任务描述4.2.2Lambda连接DynamoDB利用Python的boto3库可以方便地对DynamoDB进行增删改查操作,本任务即使用put_item及scan方法对Music表进行项目插入及项目信息读取项目4.2-Lambda函数基础二、知识要点
1.lambda函数写入DynamoDB
进入Lambda函数创建页面,函数名称填入“InsertDynamoDB”。项目4.2-Lambda函数基础4.2.2Lambda连接DynamoDB三、任务实施由于此Lambda函数需要读取DynamoDB,我们需要新建一个执行角色,给该角色赋予读取DynamoDB的权限。点击进入IAM控制台。常见使用案例选择Lambda。
1.lambda函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础点击“下一步:权限”。权限这里我们选择“AmazonDynamoDBFullAccess”,该权限包括对DynamoDB操作的所有权限,如果仅赋予读取权限,可选择“AmazonDynamoDBReadOnlyAccess”。最后创建角色名称为“DynamoDBFullAccess_Role”。
1.lambda函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础在Lambda创建页面选择执行角色为“DynamoDBFullAccess_Role”,点击“创建函数”。
1.lambda函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础该Lambda函数代码如下: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函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础创建一个测试事件“test”,包含一个需要插入至User表中的项目信息:
1.lambda函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础点击测试,即可测试插入Music表的操作是否成功,成功则返回状态码为200:查看Music表的内容,可以看到新的项目被成功插入了。
1.lambda函数写入DynamoDB
4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础进入Lambda函数创建页面,函数名称填入“ReadDynamoDB”。在Lambda创建页面选择执行角色为“DynamoDBFullAccess_Role”,点击“创建函数”。2.lambda函数读取DynamoDB4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础函数代码如下: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函数读取DynamoDB4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础创建一个测试事件“test”,内容可以任意指定。2.lambda函数读取DynamoDB4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础点击测试,即可测试读取Music表的操作是否成功,成功则返回状态码为200:2.lambda函数读取DynamoDB4.2.2Lambda连接DynamoDB三、任务实施项目4.2-Lambda函数基础3项目4.3创建用户及账本数据表用户注册与登录插入及查询记账本项目4.3-创建用户及账本数据表4.3.1用户注册与登录本任务将使用S3托管静态HTML文件,用户访问HTML文件,由HTML文件中JavaScript代码发起XMLHttpRequest对象请求至APIGateway,APIGateway调用相应Lambda函数完成对DynamoDB的读写,最后结果由APIGateway回传至客户端。一、任务描述项目4.3-创建用户及账本数据表4.3.1用户注册与登录1.XMLHttpRequest对象所有现代浏览器都支持XMLHttpRequest对象。XMLHttpRequest对象用于同幕后服务器交换数据。这意味着可以更新网页的部分,而不需要重新加载整个页面。在本任务中XMLHttpRequest发送请求至APIGateway,并使用其onreadystatechange方法处理相关的响应。2.跨域访问(CORS)跨域资源共享(CORS)是一种机制,它使用额外的HTTP头来告诉浏览器让运行在一个origin(domain)上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP请求。二、知识要点创建名为“InsertUser”的Lambda函数,其作用为注册用户时往User表中插入用户数据,角色为“DynamoDBFullAccess_Role”。需要注意的是,客户端必须通过Json格式发送“Name”,“Sex”,“Password”三个字段的信息,ID字段则由代码在当上最大ID值的基础上自动生成。除此之外,DynamoDB允许插入创建表时定义之外的字段,所以event["Others"]里面包含了用户自定义的其他信息。代码如下:4.3.1用户注册与登录三、任务实施1.创建Lambda函数项目4.3-创建用户及账本数据表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用户注册与登录三、任务实施1.创建Lambda函数项目4.3-创建用户及账本数据表创建名为“Login”的Lambda函数,其作用为验证用户登录信息。该函数因为不需要写入DynamoDB,所以我们创建一个角色,赋予其对DynamoDB表只读权限“DynamoDBReadOnlyAccess_Role”。4.3.1用户注册与登录三、任务实施1.创建Lambda函数项目4.3-创建用户及账本数据表“Login”的Lambda函数代码如下: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用户注册与登录三、任务实施1.创建Lambda函数项目4.3-创建用户及账本数据表创建RESTAPI,名称为MyAPI。4.3.1用户注册与登录三、任务实施2.创建APIGateway项目4.3-创建用户及账本数据表创建login及signin两个子资源,需要启用APIGatewayCORS。对两个子资源都新建POST方法,两个方法对应的Lambda函数分别为“Login”和“InstertUser”。4.3.1用户注册与登录三、任务实施2.创建APIGateway项目4.3-创建用户及账本数据表需要注意的是,POST方法建立后,还需要再次对login及signin两个子资源启用CORS才能使用。4.3.1用户注册与登录三、任务实施2.创建APIGateway项目4.3-创建用户及账本数据表选择部署API,阶段名称为test。4.3.1用户注册与登录三、任务实施3.部署API项目4.3-创建用户及账本数据表记录两个POST方法的“调用URL”,后面编写前端代码时需要填入。4.3.1用户注册与登录三、任务实施3.部署API项目4.3-创建用户及账本数据表编写3个文件“index.html”、“login.html”、“signin.html”,“login.html”、“signin.html”中的"XXXXX"需要填入上一步骤记录的两个POST方法的“调用URL”。index.html:4.3.1用户注册与登录三、任务实施4.前端网页编写及上传项目4.3-创建用户及账本数据表<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Welcome</title></head><body><buttononclick="window.location.href='/signin.html'">注册</button><buttononclick="window.location.href='/login.html'">登录</button></body></html>4.3.1用户注册与登录三、任务实施4.前端网页编写及上传项目4.3-创建用户及账本数据表<!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的调用API),true);xhttp.send(JSON.stringify(myObj));}</script></body></html>4.3.1用户注册与登录三、任务实施4.前端网页编写及上传项目4.3-创建用户及账本数据表signin.html:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><style>.a{width:300px;height:30px;}#b{width:420px;text-align:right;}</style></head><body><p>请输入注册信息</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>其他信息的键和值用“:”分开,键值对用“,”分开</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的调用API),true);xhttp.send(JSON.stringify(myObj));}</script></body></html>4.3.1用户注册与登录三、任务实施4.前端网页编写及上传项目4.3-创建用户及账本数据表4.3.1用户注册与登录三、任务实施5.上传三个网页文件到S创建一个S3存储桶,上传3个文件“index.html”、“login.html”、“signin.html”至S3。存储桶及3个文件均需要开启公开访问权限。项目4.3-创建用户及账本数据表上传S3完成后,可以得到每个文件的“对象URL”。4.3.1用户注册与登录三、任务实施6.测试项目4.3-创建用户及账本数据表访问index.html的“对象URL”,即可看到index.html。我们首先选择“注册”,注册一个用户。填入如下信息:4.3.1用户注册与登录三、任务实施6.测试项目4.3-创建用户及账本数据表返回上一页,点击“登录”,填入登录信息:4.3.1用户注册与登录三、任务实施6.测试项目4.3-创建用户及账本数据表4.3.2插入及查询记账本本任务实现原理与上面任务类似,也是使用S3托管静态HTML文件,用户访问HTML文件,由HTML文件中Javascript代码发起XMLHttpRequest对象请求把记账本信息传送至APIGateway,APIGateway调用相应Lambda函数完成对DynamoDB的读写,最后结果由APIGateway回传至客户端。一、任务描述项目4.3-创建用户及账本数据表4.3.2插入及查询记账本本任务的知识要点和上一个任务相同,不再赘述二、知识要点项目4.3-创建用户及账本数据表User表的表名称和项目键、排序键分别为“CashBook”,“ID”,“User_ID”。4.3.2插入及查询记账本三、任务实施1.创建CashBook表项目4.3-创建用户及账本数据表2.创建Lambda函数创建名为“InsertCashBook”的Lambda函数,其作用为注册用户时往CashBook表中插入用户记账本数据,角色为“DynamoDBFullAccess_Role”。“Item”、“Unit-price”、“Quantity”、“User_ID”为必须字段,“Others”为用户自定义字段,代码如下:4.3.2插入及查询记账本三、任务实施项目4.3-创建用户及账本数据表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.创建Lambda函数4.3.2插入及查询记账本三、任务实施创建名为“InsertCashBook”的Lambda函数,其作用为注册用户时往CashBook表中插入用户记账本数据,角色为“DynamoDBFullAccess_Role”。“Item”、“Unit-price”、“Quantity”、“User_ID”为必须字段,“Others”为用户自定义字段,代码如下项目4.3-创建用户及账本数据表创建名为“QueryCashBook”的Lambda函数,其作用为查询该用户所有记账本信息,该函数因为不需要写入DynamoDB,所以我们创建一个对DynamoDB只读权限角色名为“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.创建Lambda函数4.3.2插入及查询记账本三、任务实施项目4.3-创建用户及账本数据表3.添加API子资源、方法并部署在“MyAPI”APIGateway中添加“/insertcashbook”及“/querycashbook”两个子资源,添加POST方法,对应Lambda方法分别为“InsertCashBook”及“QueryCashBook”,开启CORS访问。删除前一任务的“test”阶段,重新部署API,阶段名称仍然为“test”。记录“/insertcashbook”及“/querycashbook”的“调用URL”。4.3.2插入及查询记账本三、任务实施项目4.3-创建用户及账本数据表4.前端网页编写及上传<!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){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>本任务需要编写两个前端网页“cashbook.html”及“insertcashbook.html”,两个文件中的"XXXXX"需要分别用“/querycashbook”及“/insertcashbook”的“调用URL”代替`。cashbook.html代码如下:4.3.2插入及查询记账本三、任务实施项目4.3-创建用户及账本数据表5.测试在任务4.3.1完成登录后会自动跳转至cashbook.html:点击“查询记账本”,可以看到当前该用户的账本信息(可能为空):4.3.2插入及查询记账本三、任务实施项目4.3-创建用户及账本数据表此时我们点击“插入记账本”,插入一项记账信息,点击提交,其中其他信息为:“Type:Game,Shop:Steam,Rank:A”,点击提交,提示插入item成功:4.3.2插入及查询记账本三、任务实施5.测试项目4.3-创建用户及账本数据表4项目4.4综合实训---我的记账本项目4—综合实训---我的记账本本项目利用了亚马逊云计算AWS的服务实现一个我的记账本的ServerlessWeb应用。ServerlessWeb架构主要特点为无需配置任何服务器,所有托管代码不使用的情况下不产生任何费用,网站网络吞吐及处理能力理论上可以实现零到正无穷的自动弹性伸缩,是一种先进的云计算框架,实际用途广泛。本项目采用DynamoDB作为数据库,DynamoDB也具有弹性伸缩的特性,表创建完成后字段可以任意扩展本Web应用的功能主要包括:用户的注册和登录记账本信息插入及查询用户信息的查询、更新、删除、导出项目4—综合实训---我的记账本本项目综合使用S3、APIGateway、Lambda、DynamoDB技术实现了ServerlessWeb应用,编程语言包括HTML、Javascript、Python。要点为掌握ServerlessWeb架构的开发。本项目Serverless基本架构为:所有的html文件均托管在同一个S3存储桶中,权限为可公开访问,用户可以直接通过互联网对html资源进行访问。用户在html资源上做出操作后,客户端通过JavaScript送DORS请求至各自相应的APIGateway资源,APIGateway资源调用Lambda函数。Lambda函数对DynamoDB进行相应读写操作,并把结果通过APIGateway返回客户端。项目4—综合实训---我的记账本项目实施1.创建2个DynamoDB表格:User、CashBook。2.
创建角色:创建“DynamoDBFullAccess_Role”3.创建7个Lambda函数:Login、QueryCashBook、QueryUser、InsertCashBook、DeleteUser、UpdateUser、InsertUser。4.创建名为“MyAPI”的APIGateway,在“MyAPI”APIGateway中添加7个子资源。5.编写6个HTML文件:“cashbook.html”、“index.html”、“insertcashbook.html”、“login.html”、“manage.html”、“signin.html”,并上传至S3同一个桶中,访问权限设为公开。6.至此本任务的编写及部署全部完成,可以进行测试:访问index.html的URL即可进入网站,测试所有功能。谢谢观看
云应用开发实战单元5我的云盘项目5.1使用AmazonS3云盘存储桶项目5.2设计图形化界面客户端项目5.3设计云盘用户管理程序项目5.4设计云盘文件管理程序项目5.5综合实训---我的云盘知识目标:掌握AmazonS3文件存储与存储桶知识掌握PythonSDK与AmazonS3服务知识掌握AmazonRDSMySql数据库存储知识掌握AmazonEC2虚拟机知识掌握AmazonSTS临时令牌的知识掌握Amazon服务权限动态分配知识掌握Pythontkinter图形化界面的知识能力目标:能使用AmazonS3控制台创建存储桶与文件夹能使用AmazonS3控制台进行文件上传与下载能使用AmazonRDS创建MySql数据库实例能使用PythonSDK编程创建S3云盘能使用Python编程查看、上传、下载、删除S3文件能使用Flask创建用户管理的代理服务器能使用代理服务器实现用户注册与认证能使用代理服务器从AmazonSTS服务申请临时令牌能使用临时令牌编程查看、上传、下载、删除S3文件能使用tkinker进行图形化界面设计项目5.1--使用AmazonS3云盘存储桶一、任务描述在有了一个能操作AmazonS3的账号后,就能登录到AWS控制台进行S3的存储操作,S3按存储桶来划分存储空间,因此需要创建一个云盘存储桶。二、知识要点存储桶(Bucket)存储桶是AmazonS3中用于存储对象的容器,每个对象都存在各自的存中。存储桶可以组织最高等级的AmazonS3命名空间、识别负责存储和数据传输费用的账户、在访问控制中发挥作用以及用作使用率报告的汇总单位。例如我们的云盘就使用一个存储桶,存储所有用户的文件。5.1.1亚马逊云科技控制台创建云盘
2.对象(Object)AmazonS3中存储的实体,可以简单理解为存储的文件(实际上还包含文件的其它元数据,例如Content-Type等)。
3.键(Key)
存储桶中对象的唯一标识符,可以简单理解为存储的文件名项目5.1--使用AmazonS3云盘存储桶4.区域(Region)Amazon根据全球不同国家,划分了很多区域,每个区域的存储桶是互不干扰的。AWS目前有三个分区:aws(标准区域)、aws-cn(中国区域)和aws-us-gov(AWSGovCIoud[美国]区域)。宁夏区和北京区同属于中国区域。在同一个分区中,存储桶名必须唯一,也就是同一个存储桶名在北京区已经存在,是无法再在宁夏区创建成功的。每个区都有一个代码,AWS在中国北京区的代码是“cn-north-l'',在宁夏区的是“cn-northwest-l"。项目5.1--使用AmazonS3云盘存储桶三、任务实施5.1.1亚马逊云科技控制台创建云盘1.创建有AmazonS3控制权的账号管理员登录进入AWSConsole控制台页面,并选择IAM服务,创建一个账号有AmazonS3FullAccess权限的账号,'cloud.disk.user”,如图5-1-1所示。图5-1-1创建账号项目5.1--使用AmazonS3云盘存储桶第一行是Key的类型,它们使用逗号分开,第二行就是对应的值,我们可以通过读这个CSV文件得到各个值。然后下载这个账号的accessKeys.csv文件,它有两行,格式如下:三、任务实施
5.1.1亚马逊云科技控制台创建云盘1.创建有AmazonS3控制权的账号项目5.1--使用AmazonS3云盘存储桶图5-1-2S3服务⑵选择”创建存储桶”输入云盘,存储桶的名称,例如kloud.disk.bucketh,并选择一个区域,如图5-1-2所示。2.创建云盘存储桶三、任务实施5.1.1亚马逊云科技控制台创建云盘⑴
使用cloud.disk.user账号登录进入后选择S3服务,如图5-1-2所示项目5.1--使用AmazonS3云盘存储桶⑶选择“阻止全部公共访问权限”为打开状态,这样使得该存储桶不是公共存储桶,一般别的用户不可以访问,如图5-1-4所示。2.创建云盘存储桶三、任务实施5.1.1亚马逊云科技控制台创建云盘(4)创建的存储桶如图5-1-5所示,所有的
云盘文件都将存储在这个存储桶中。项目5.1--使用AmazonS3云盘存储桶⑸选择进入这个存储桶,就可以再把文件上传到该存储桶。文件还可以使用文件夹分类,如右图上传了client.py与server.py两个文件,还创建了一个名称
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统考版2025届高考地理二轮专项分层特训卷第一篇微考点增分专练微考点14水文特征
- 医院实习教学计划
- 适用于新教材2025版高考生物一轮总复习课时规范练10降低化学反应活化能的酶新人教版
- 北师版四年级作文下册教学计划
- 202年第一学期高一数学教学工作计划
- 2024年精准扶贫帮扶个人工作计划范文报告
- 2024出纳工作工作总结和计划范本
- 2024年高一年级地理教学计划
- 生物教师工作计划高中
- 二年级上册的音乐教学计划范文
- 贝努利-欧拉梁与铁木辛柯梁的对比研究
- IPD题库附有答案
- 大学生标书模板5篇
- 食堂原料供货保障服务方案
- 5C培训模拟试题与答案、重症医学专科资质培训班模拟考试试题与答案
- 工程训练(广东工业大学)智慧树知到答案章节测试2023年
- 400m球罐设计毕业设计解析
- 大气环境化学课件 第四章 对流层气相化学
- E英语教程1unit1-5教案
- 杭州市科学技术发展“十四五”规划
- 学院培训费管理办法
评论
0/150
提交评论