购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 从客户端调用函数

在之前的讨论中,我们并未从技术角度深入地研究客户端如何与AWS Lambda函数进行交互,而是始终假设采用直接访问的调用方式。之前提到过,函数可以用同步或者异步的方式调用,AWS Lambda有一组专门的Invoke API来实现这一点(见图1-12)。

图1-12 从客户端通过Invoke API调用AWS Lambda函数

通过Invoke API调用时,AWS会执行标准的安全检查,确保客户端拥有适当的调用权限。如同其他所有的AWS API,调用方需要AWS令牌来完成认证和后续的授权,AWS会验证这个令牌是否拥有正确的授权来执行API调用到的特定资源和函数。

提示 我们会在第4章深入讨论AWS Lambda的安全模型。现阶段,需要牢记的是:永远不要把安全令牌保存在客户端里,如明文写入移动应用的代码或者用JavaScript写的Web应用内。如果我们不慎把安全令牌内置在客户端应用内,一些高级用户就可以挖出这些令牌并对应用进行破坏。为了防患于未然,我们采取一些不同的方式来认证客户端的访问。

在AWS Lambda平台以及所有其他的AWS API,我们可以使用名为Amazon Cognito的服务来便捷地管理所有与认证和授权相关的操作。

使用Amazon Cognito,客户端可以使用外部的社交应用或自定义的认证机制,来获取一个临时的AWS令牌,进行AWS Lambda函数的认证和调用(见图1-13)。

图1-13 使用Amazon Cognito进行AWS Lambda函数调用的认证和授权

注意 Amazon Cognito为其他的AWS服务提供了一个简单的接口,例如AWS Identity and Access Management(IAM)和AWS Security Token Service(STS)。图1-13去掉了一些不必要的细节,让整个调用的流程更加清晰易懂。

接下来,我们不一定非要在客户端使用AWS Lambda Invoke API,开发者通常会构建一套与Lambda函数一一对应的API,这些API都基于标准化的URL和HTTP动词(verb)

例如:我们为一个书店设计一套Web API。用户需要列出书籍列表、获取特定书籍的详细信息、对书籍进行增删改查等操作。使用Amazon API Gateway服务,我们可以把对某一个后台资源的访问,通过一组HTTP命令字(GET、POST、PUT、DELETE等)和真正执行这些操作的AWS Lambda函数关联在一起。表1-1给出了一个实例。

表1-1 一组简单的书店Web API

我们来更加仔细地看表1-1的内容:

·如果针对/books资源执行一个HTTP GET操作,取决于调用时指定的范围,GetAllBooksByRange这个Lambda函数会被执行,并返回一个书籍列表。

·如果针对/books资源执行HTTP POST操作,负责创建新书籍的Lambda函数CreateNewBook会被调用,并返回新书的ID。

·在/books/ID资源上执行HTTP GET,GetBookById函数被执行,根据相关REST架构风格的原则,返回与此ID关联书籍的介绍信息。

·表格内其余的调用可以依此类推。

注意 我们并不需要为每一个HTTP verb方法准备单独的Lambda函数。我们可以把资源和方法作为一个传入的参数,Lambda函数会解析它的触发方式到底是GET还是POST。函数本身的大小由编程者的习惯决定。

但Amazon API Gateway还在此基础上提供了一些增值服务,比如通过缓存一些静态的内容来降低对后端的请求压力,设置一个调用阈值来避免后端在高峰时期被冲垮,管理开发者的私钥,为多平台的Web API生成多个SDK,等等。我们会在第2章深入介绍Amazon API Gateway。

使用Amazon API Gateway,至关重要的一点是我们把客户端对Lambda函数的直接调用解耦了,外部客户端只需与这一组干净的Web API交互,无须了解运行在AWS上后端服务的具体细节。当然,即使有Amazon API Gateway对外呈现Web API,我们仍旧可以选择通过由Cognito服务管理的AWS令牌进行客户端的认证和授权工作(见图1-14)。

图1-14 借助Amazon API Gateway,用户使用Web API访问函数

通过Amazon API Gateway,我们可以把部分Web API对外开放。对外开放的意思是访问这些API不再需要提供任何身份令牌。一个可用于API的HTTP命令字是GET,而GET是我们在浏览器中输入URL并回车后发出的默认HTTP命令字,我们可以使用这种方式来组建一个对外的网站,其URL是由AWS Lambda函数动态提供服务的(见图1-15)

实际上,由HTTP GET方式呈现的公共Web API可以返回任何格式的内容,包括我们在浏览器内常见的网页HTML内容。

图1-15 借助Amazon API Gateway,创建由AWS Lambda函数和公共API所支撑的网站

提示 有关使用AWSLambda和Amazon API Gateway构建动态网站的信息,可以查阅Serverless框架网站http://www.serverless.com/ IW9LdrUXPwUXqcPes9Zuid0nYXiSjEurQ7E2P4AS1A+jaYzh68b1KtVaAaEPy2CE

点击中间区域
呼出菜单
上一章
目录
下一章
×