本文介绍了AWS无服务器架构上RESTful API的实现。它详细概述了架构、数据流和可使用的 AWS 服务。本文还介绍了无服务器架构相对于传统方法的优势。

什么是无服务器架构?

无服务器架构,也称为无服务器计算或功能即服务,是一种软件设计方法,允许开发人员构建和运行应用程序而无需管理底层基础架构。云服务提供商负责管理和扩展云基础架构,包括配置服务器以运行应用程序、数据库和存储。

无服务器架构的重要性

企业只需为其使用的计算资源(例如请求数量、执行时间和消耗的资源)付费,因此无需为硬件或软件支付前期费用。这样就无需为闲置的基础设施付费,从而大幅节省成本。

无服务器架构会根据工作负载自动扩展和缩小规模。这可确保应用程序能够处理不同级别的流量。

每个功能都可以独立扩展,确保根据需求有效分配资源。

无服务器架构非常适合事件驱动的应用程序,其中功能由特定事件(例如 HTTP 请求、数据库更改或消息队列更新)触发。

用于实施的 AWS 服务

以下 AWS 服务可纳入REST API 的实施中。下面的列表提到了 AWS 服务及其在 API 实施中的用途。

路线 53

Route53 可用于域名注册、DNS 路由、流量流、流量管理、健康检查和监控。

API 网关

使用API 网关创建、发布、维护、监控和保护任意规模的 REST API。

可以在 API 网关下创建 HTTP 方法(GET,POSTPUTDELETEPATCH、 )。这些方法可以集成到相应的前端控制器 Lambda 函数中。OPTION

网页应用防火墙

AWS WAF(Web 应用程序防火墙)可帮助您防范常见的 Web 漏洞和机器人,这些漏洞和机器人可能会影响可用性、危害安全性或消耗过多资源。我们可以将 WAF 与 API 网关关联起来,以过滤掉恶意请求。

使用 WAF 我们可以配置以下内容:

  • Web ACL – 用于确定允许的流量的规则和规则组
  • 自定义规则– IP 设置匹配条件、字符串和正则表达式匹配条件、地理匹配条件、基于速率的规则
  • 机器人控制

Lambda

用于授权的 Lambda 函数

Lambda 授权器将调用者的身份作为输入,并返回IAM策略作为输出。使用 Lambda 授权器实现自定义身份验证和授权。

Lambda 在经过认证和授权之后会向 API 网关返回两种类型的策略:

  1. 允许
  2. 否定

用于业务逻辑的 Lambda 函数

Lambda 函数用于实现业务逻辑、调用其他 lambda 函数、下游服务和数据库。

其他 AWS 服务

  • CloudWatch – 使用 AWS CloudWatch 监控您的应用程序并存储日志、仪表板和警报,这些也可以为报告和主动监控而创建。
  • SQS 和 SNS – 使用 AWS SQS 存储异步消息,使用 SNS 将通知推送到 lambda 函数。
  • Dynamo DB 或 RDS – 应用程序数据库
  • IAM – 身份和访问管理服务,用于定义 AWS 资源的角色和访问权限
  • VPC、子网、安全组– VPC 在安全网络中隔离 AWS 资源,子网将 VPC 分段以便组织,安全组使用防火墙规则控制流量。

架构和数据流

下面的架构图描述了所使用的 AWS 服务集、数据流以及与其他服务的集成。

从高层次上讲,客户端向 Amazon API Gateway 发送 HTTP 请求,从而触发 AWS Lambda 函数。Lambda 函数处理请求,在需要时与其他 AWS 服务交互(例如用于数据存储的 DynamoDB),并将响应返回给 API Gateway,然后 API Gateway 将响应发送给客户端。

数据流步骤

  1. 用户使用有效的授权标头(即JWT 令牌、API 密钥等)向 API 发出 HTTP 请求。
  2. Route 53 将请求转发到 API 网关,该请求将被 Web 应用程序防火墙拦截。
  3. Web 应用程序防火墙配置了不同的规则来保护应用程序免受 Web 攻击。如果防火墙检测到任何此类恶意请求,它会立即阻止该请求,否则将其转发到 API 网关。
  4. 配置了 API Gateway 的 Lambda Authorizer 会拦截请求并对用户请求进行身份验证和授权。如果用户被授权访问底层资源,则请求将被转发到前端控制器 lambda。
  5. 前端控制器 lambda 将请求委托给相应的服务 lambda 函数。
  6. 根据业务逻辑,服务 lambda 处理请求并向客户端返回适当的响应。
  7. 在处理请求时,服务 lambda 函数可以调用下游 REST API 或数据库。服务 lambda 函数还可以监听 SNS 队列或订阅 SNS。
  8. 身份和访问管理 (IAM) 服务用于定义资源角色并提供对这些角色的访问。
  9. 所有资源都会将应用程序日志推送到 CloudWatch 以进行监控和故障排除。

典型用例

  • 无服务器架构可用于需要实时处理数据的事件驱动应用程序,例如数据流或通知处理。
  • 微服务可以在无服务器架构上独立、隔离地实现和部署,以实现更好的可扩展性。
  • 处理计划任务的应用程序可以在无服务器架构上实现和部署,并可根据特定时间触发。
  • 所有以成本为关键因素的用例都可以采用无服务器架构。

基础设施配置和部署

在企业中,除了生产环境之外,还有多个可用于开发和测试的环境。在不同的环境中创建相同的资源集并手动跟踪配置更改可能是一项艰巨的任务,并且可能会引入错误。

为了解决这个问题,可以使用Terraform(基础设施即代码)。Terraform 有助于将资源从一个环境复制到另一个环境。除此之外,它还可以跟踪基础设施的状态。

任何CI/CD工具(例如Jenkins或GitLab )都可以使用 Terraform 自动执行部署。

结论

总之,利用 AWS 无服务器架构开发 REST API 在可扩展性、成本效益和易于管理方面具有多种优势。

通过采用无服务器方法,开发人员可以更加专注于构建强大的 API,而无需管理服务器的开销。AWS Lambda 的事件驱动模型允许无缝扩展,确保您的 API 可以有效处理不同的工作负载。

原文链接:https://dzone.com/articles/api-implementation-on-aws-serverless-architecture

Leave a Reply