AWS API Gateway入门

2020.04.12 35 view

API Gateway是AWS提供的一个API网关服务,可以将AWS Lambda,EC2或AWS之外的服务,通过API Gateway进行发布。API Gateway有”反向代理服务”的特性。

API Gateway提供的主要功能如下。

  • Infra的管理
  • API管理
  • 认证和认可
  • 流量限制及保护

API Gateway支持的API

REST WebSocket
无状态(StateLess) 有状态(StateFull)
在1个HTTP消息中包含单一项操作相关所有的信息,以URI表示“资源”,并使用HTTP方法(PUT,GET,POST,DELETE等)进行操作。 只需完成完成一次握手,客户端和服务器就直接可以创建持久性的连接,并进行双向数据传输。允许服务端主动向客户端推送数据。

API管理

API Gateway是AWS提供的管理服务,提供API管理所需的管理和操作。创建资源(Resource)后部署API到指定的阶段(Stage),轻松完成API的发布。

API Gateway访问限制

API Gateway除了提供API key认证之外还提供如下认证方法。并通过Resource Policy限制可访问API Gateway的IP地址,关于资源策略(ResourcePolicy)可查看AWS官网。

IAM policy examples for managing API Gateway APIs

认证方法 内容
IAM访问权限 – AWS v4署名认证
– 使用IAM用户的凭据信息在请求中指定签名数据
– IAM角色访问权限用于Cognito联合身份验证
Lambda认证 – 指定Lambda函数来验证身份,控制对API的访问
– 自定义的认证方法或使用Oauth等认证方法
Cognito认证 – 基于指定的Cognito用户池(UserPool)进行身份验证
– 通过执行Cognito身份验证获得令牌

API Gateway流量限制

API Gateway的使用计划(Usage Plan)在“白金会员”或“普通会员”等会员制业务模型下必不可少的功能。在这种商业模式下,免费会员可以每月调用100次,普通会员每月可调用API 10000次,而白金会员也无限调用API等根据会员等级进行区分。这些业务模型是非常重要的业务战略,可通过按费用区分来产生利润。

在为每个Stage设置API Gateway的“API Key”的基础上,现在可以使用“使用计划”功能为每个API Key设定使用计划。

使用计划项目主要有三种类型:Rate(评级),Burst(突增)和Quota(配额)。

使用计划采用的是 Token Bucket Algorithm,可以控制流入网络的数据量,并允许具有突发特征的数据传输。 它有多种用途,但通常用作流量整形技术。

Rate(评级)

该速率就是“每秒访问限制”。

超过每秒速率限制的请求将返回429 Too Many Requests。

Burst(突增)

突增是“每毫秒访问限制”,即每毫秒最大并发数

与Rate相似,但是超出突发限制的请求不会返回429 Too Many Requests响应,并在Rate(评级)范围内进行处理。

默认设定为 Rate 为10,000,Burst 为5,000。

以默认设定(Rate 为10,000,Burst 为5,000)为例,在第一毫秒内收到10,000个请求。
在此将使用“突增5,000”的配额,第一毫秒内仅处理5,000个请求。
剩余5,000个请求在Rate(评级)范围内,将被延迟处理而不会返回429错误。

超出评级和突增限制时做如下处理

评级(Rate)…如果超出奖返回429错误
突增(Burst)…如果超过,则会延迟

Quota(配额)

配额是对较长时间,一天,一周和一个月的API请求数限制。当超过Quota限制时,返回超出上限的信息。

动手创建API Gateway

使用Example创建API后,用API Key及IAM认证进行访问限制。

创建API Gateway

在AWS管理页面点击API Gateway后,选择REST API。

点击OK。

选择如下信息后点击 Import。

  • API选择REST API
  • 选择 Example API
  • Endpoint Type:Regional,可选的还有Edge optimized及Private

设定认证

Resource的认证及API Key默认为空,点击 Get 进行配置。

点击 Method Request。

点击 铅笔 进行如下配置,配置后的页面如下。

  • Authorization :AWS_IAM
  • API Key Required :true

其余的Method也根据需要进行限制。

部署API

选择 Resourece 后,点击 Actions 的 Deploy API。

Deployment stage 选择 [New stage] 后,Stage name 输入 dev 后,点击 Deploy。

确认创建的Stage。

设定API Keys

左侧栏点击 API Keys 后,Actions里选择 Create API。

输入API Key名称之后点击 Save。

创建Usage Plans

在左侧栏选择 Usage Plans 后,点击 Create。

输入以下信息后点击, Next。

  • Name : demoUsagePlan
  • Rate : 10000 requests per second
  • Burst : 5000 requests
  • Quota : 100 requests per month

点击 Add API Stage后,API 选择 PetStore,Stage 选择 dev 后点击 Next。

点击 Add API Key to Usage Plan 后,选择在上面创建的 demoAPIKey 后,点击 Done。

使用Postman进行动作确认

启动Postman后,新启一个Request,在 Headers 的KEY为x-api-key,VALUE为demoAPIKey的值。

在Authorization,TYPE选择 AWS Signature后输入 AccessKey及SecretKey(拥有访问API Gateway权限的IAM用户的信息)。

输入Stage dev的URL后,点击 Send 进行确认。

API Gateway返回的结果如下。