概览
在本实验中,您将创建一个简单的 FAQ 微服务。该微服务将通过调用 Amazon Lambda 函数的 Amazon API Gateway 终端节点,返回一个 JSON 对象,其中包含随机问答对。以下是该微服务的架构模式:
涵盖的主题
本实验结束时,您将能够:
- 创建一个 Amazon Lambda 函数
- 创建一个 Amazon API Gateway 终端节点
- 借助 Amazon CloudWatch 调试 API Gateway 和 Lambda
先决条件
运行本实验时,具备一些编程经验并熟悉应用程序开发会很有帮助,但这不是必需的。但是在进行这个实操实验之前,您必须先完成 _Amazon Lambda 简介_自主进度动手实验。
其他亚马逊云科技服务
在您访问本实验期间,IAM 策略将禁用本实验不需要的其他亚马逊云科技服务。此外,本实验中只会使用所需的服务功能,在某些情况下,甚至会根据实验设计特意进一步限制这些功能。在访问其他服务或执行本实验指南中未提供的操作时,预计会出现错误。
技术概念
微服务架构
“微服务架构风格是一种将单个应用程序开发为一组小型服务的方法,每个服务都在自己的进程中运行,并通过轻量级机制(通常是 HTTP 资源 API)进行通信。这些服务围绕业务功能进行构建,可通过全自动部署机制来独立部署。这些服务配置了最小型的集中式管理,它们可以使用不同的编程语言编写,并使用不同的数据存储技术。”– James Lewis 和 Martin Fowler
微服务架构的理念是将一个大型的复杂系统拆分成多个独立、解耦且易于管理和扩展的服务。这使开发人员能够实现可扩展性、可用性和可维护性等关键设计目标。
Amazon API Gateway 和 Amazon Lambda 提供完美的 Web 服务组合,有助于轻松构建、交付和维护一组可作为复杂软件系统基础的微服务。
在本实验中,您将了解如何开发、部署和调试一个代表较大系统中某个部分的简单微服务。它将包含两个部分:RESTful API,以及当用户点击终端节点时执行的函数。
应用程序编程接口 (API)
应用程序编程接口是一组指令,用于定义开发人员如何与应用程序交互。API 背后的理念是创建一种标准化方法来连接应用程序提供的各种服务。API 设计为与软件开发工具包 (SDK) 一起使用,后者是工具的集合,可帮助开发人员基于 API 轻松创建下游应用程序。
API 优先策略
许多软件企业都在采用 API 优先策略,其中堆栈内的每个服务都会优先处理,并且始终作为 API 发布。在设计服务时,很难了解可能需要利用该服务的各种应用程序。例如,本实验中的 FAQ 服务非常适用于为外部网站上的 FAQ 页面提供种子。但是,可以想象,云教育公司也会想要提取他们培训材料中的常见问题,用于闪卡或培训文档。如果只是静态网站,教育公司的提取过程会充满艰辛。通过提供能够_以标准格式使用_的 API,该微服务将支持围绕服务和最初未曾考虑的使用案例来开发生态系统。
RESTFUL API
表述性状态转移 (REST) 架构指的是遵循以下六项约束的架构。
- 通过客户端/服务器模式实现的关注点分离。
- 状态完全存储在客户端上,客户端和服务器之间的通信是无状态的。
- 客户端将缓存数据以提高网络效率。
- 服务器和客户端之间有一个统一的接口(采用 API 的形式)。
- 随着系统复杂程度不断增加,引入了层。RESTful 组件可能有多层。
- 遵循按需代码模式,其中代码可即时下载(在本例中,是在 Lambda 中实现的),并且无需更新客户端即可对其进行更改。
本实验遵循 RESTful 模式。客户端向后端 Lambda 函数(服务器)发送请求。服务的逻辑被封装到该 Lambda 函数中,该函数提供一个统一的接口供客户端使用。
关于构建 RESTFUL API 的最佳实践
构建 API 的一个关键目标是帮助围绕您的一系列服务建立一个创新生态系统。因此,您的 API 一定要直观易用。下面是要遵循的通用命名和方法方案:
操作URL功能GET/questions返回所有问题GET/questions/17返回问题 17POST/questions创建新问题PUT/questions/17更新问题 17PATCH/questions/17对问题 17 进行部分更新DELETE/questions/17删除问题 17注意如何获取特定问题,API 终端节点不是 /question/name,而是 /questions/identifier。这使 API 设计人员能够提供具体功能,通过 /questions 终端节点来返回问题组(可能是所有问题),以及通过 /questions/identifier 来返回单个的记录响应。有关详细信息,请参阅本实验指南末尾的“其他资源”部分。
以下是一些 RESTful API 的范例:
- Amazon Elemental MediaConvert
- Spotify
- Twitch
- Netflix Genie
- Slack
AMAZON API GATEWAY 和 AMAZON LAMBDA
使用 Amazon API Gateway 的微服务包含一个定义的资源和 API Gateway 中关联的方法(GET、POST、PUT 等)以及后端目标。在本实验中,后端目标是一个 Lambda 函数。但是,后端目标可以是其他 HTTP 终端节点(第三方 API 或侦听 Web 服务器)、亚马逊云科技服务代理或用作占位符的模拟集成。
AMAZON API GATEWAY
API Gateway 是亚马逊云科技提供的一项托管服务,借助此服务,可轻松创建、部署和维护 API。API Gateway 包含以下功能:
- 转换传入 API 请求的正文和标头以匹配后端系统
- 转换传出 API 响应的正文和标头以匹配 API 要求
- 通过 Amazon Identity and Access Management 控制 API 访问
- 创建和应用 API 密钥以用于第三方开发
- 启用 Amazon CloudWatch 集成以实现 API 监控
- 通过 Amazon CloudFront 缓存 API 响应以加快响应速度
- 将 API 部署到多个阶段,可轻松区分开发、测试、生产和版本控制
- 将自定义域连接到 API
- 定义模型以帮助对 API 请求和响应转换进行标准化处理
AMAZON API GATEWAY 和 AMAZON LAMBDA 术语
- 资源:表示为 URL 终端节点和路径。例如,api.mysite.com/questions。您可以将 HTTP 方法与资源关联,并为每种方法定义不同的后端目标。在微服务架构中,资源代表系统内的单个微服务。
- 方法:在 API Gateway 中,方法通过资源路径和 HTTP 动词(比如 GET、POST 和 DELETE)的组合来进行标识。
- 方法请求:API Gateway 中的方法请求设置用于存储方法授权设置,并定义从客户端接收的 URL 查询字符串参数和 HTTP 请求标头。
- 集成请求:集成请求设置用于定义与方法一起使用的后端目标。您还可以从中定义映射模板,以转换传入请求,从而匹配后端目标的预期内容。
- 集成响应:在集成响应设置中,您可以定义后端目标的响应与 API Gateway 中的方法响应之间的映射。您还可以转换从后端目标返回的数据,以满足终端用户和应用程序的预期。
- 方法响应:方法响应设置用于定义方法响应的类型、标头和内容类型。
- 模型:在 API Gateway 中,模型用于定义某些数据的格式(又称为架构或形状)。您可以创建和使用模型,以便更轻松地创建映射模板。由于 API Gateway 主要设计用于处理 JavaScript 对象表示法 (JSON) 格式的数据,因此 API Gateway 使用 JSON 架构来定义数据的预期架构。
- 阶段:在 API Gateway 中,阶段用于定义访问 API 部署时可经由的路径。这通常用于区分版本、开发和生产终端节点等。
- 蓝图:Lambda 蓝图是示例 Lambda 函数,可用作构建新 Lambda 函数的基础。