AWS 23 API_Gateway_Stages_and_Deployment

API网关——部署阶段 API Gateway – Deployment Stages
•在API网关中进行更改并不意味着它们有效
•你需要进行“部署”,使其生效
•这是一个常见的困惑来源
•将更改部署到“阶段”(根据需要)
•对阶段(开发、测试、产品)使用您喜欢的命名
•每个阶段都有自己的配置参数
•在保留部署历史记录时,可以回滚阶段

API网关——阶段v1和v2
API破坏性变化

API网关——阶段变量
•阶段变量与API网关的环境变量类似
•使用它们更改经常更改的配置值
•它们可用于:
•Lambda函数ARN
•HTTP端点
•参数映射模板
•用例:
•配置与您的阶段对话的HTTP端点(开发、测试、生产…)
•通过映射模板将配置参数传递给AWS Lambda
•阶段变量被传递到AWS Lambda中的“上下文”对象

API网关阶段变量和Lambda别名
•我们创建一个阶段变量来指示相应的Lambda别名
•我们的API网关将自动调用正确的Lambda函数!

API网关–金丝雀部署
•可在任何阶段(通常为prod)实现金丝雀部署
•选择金丝雀频道接收的流量百分比
•指标和日志是分开的(为了更好地监控)
•覆盖金丝雀阶段变量的可能性
•这是AWS Lambda和API网关的蓝/绿部署

-----------------------------------------------------------------------

API网关-集成类型
•集成型模拟 mock
•API网关返回响应,而不将请求发送到后端

•集成类型HTTP/AWS(Lambda和AWS服务)
•您必须配置集成请求和集成响应
•使用请求和响应的映射模板设置数据映射

•集成类型AWS_PROXY(Lambda PROXY):
•来自客户端的传入请求是Lambda的输入
•该功能负责请求/响应的逻辑
•没有映射模板、标题、查询字符串参数……作为参数传递

API网关-集成类型
•集成型HTTP_代理
•无映射模板
•HTTP请求被传递到后端
•来自后端的HTTP响应由API网关转发

映射模板(AWS和HTTP集成)
•映射模板可用于修改请求/响应
•重命名/修改查询字符串参数
•修改body内容
•添加标题
•使用Velocity模板语言(VTL):for loop,if等…
•过滤输出结果(删除不必要的数据)

映射示例:使用SOAP将JSON映射为XML
•SOAP API基于XML,而REST API基于JSON
•在这种情况下,API网关应:
•从请求中提取数据:路径、有效负载或报头
•基于请求数据构建SOAP消息(映射模板)
•调用SOAP服务并接收XML响应
•将XML响应转换为所需格式(如JSON),并响应用户

Mapping Example: Query String parameters

AWS API网关招摇/开放API规范 AWS API Gateway Swagger / Open API spec
•定义REST API的常用方法,使用API定义作为代码
•将现有的Swagger/OpenAPI 3.0规范导入API网关
•方法
•方法请求
•集成请求
•方法响应
•+针对API网关的AWS扩展,并设置每个选项
•可以将当前API导出为Swagger/OpenAPI规范
•Swagger可以用YAML或JSON编写
•使用Swagger,我们可以为我们的应用程序生成SDK

-----------------------------------------------------------------------

缓存API响应
•缓存减少了对后端的调用次数
•默认TTL(生存时间)为300秒(最小:0秒,最大:3600秒)
•每个阶段都定义了缓存
•可以覆盖每个方法的缓存设置
•缓存加密选项
•缓存容量在0.5GB到237GB之间
•缓存价格昂贵,在生产中有意义,在开发/测试中可能没有意义

API网关缓存失效
•能够立即刷新整个缓存(使其失效)
•客户端可以使用头:cache-Control:max age=0(通过适当的IAM授权)使缓存无效
•如果您没有强制实施InvalidateCache策略(或选择控制台中的“需要授权”复选框),任何客户端都可以
使API缓存无效

-----------------------------------------------------------------------
API网关–使用计划和API密钥
•如果您希望将API作为产品($)提供给您的客户
•使用计划:
•谁可以访问一个或多个已部署的API阶段和方法
•他们可以访问它们的数量和速度
•使用API密钥识别API客户端和仪表访问
•配置在单个客户端上实施的限制和配额限制
•API密钥:
•要分发给客户的字母数字字符串值
•例如:WBJHXNTOAB4WPKBC7CGM64CBIB24B4B4JT8JJHO9
•可与使用计划一起使用以控制访问
•节流限制适用于API密钥
•配额限制是最大请求的总数

API网关–API密钥的正确顺序

•配置使用计划
1.创建一个或多个API,将方法配置为需要API密钥,并将API部署到各个阶段。
2.生成或导入API密钥以分发给将使用您的API的应用程序开发人员(您的客户)。
3.创建具有所需油门和配额限制的使用计划。
4.将API阶段和API密钥与使用计划相关联。

•API调用方必须在向API发出的请求中,在x-API-key头中提供分配的API密钥。

insornnia\Apifox\postman api调试工具

-----------------------------------------------------------------------

API网关-日志记录和跟踪

•CloudWatch Logs:
•在阶段级别启用CloudWatch日志记录(具有日志级别)
•可以根据每个API覆盖设置(例如:错误、调试、信息)
•日志包含有关请求/响应主体的信息

•X-Ray:
•启用跟踪以获取API网关中请求的额外信息
•X射线API Gateway+AWS Lambda为您提供了完整的图片

API网关——CloudWatch指标
•指标是分阶段的,有可能实现详细的指标
•CacheHitCount&CacheMissCount:缓存的效率
•Count:给定时间段内API请求的总数。
•IntegrationLatency:API网关中继请求到后端,并在它收到来自后端。
•Latency:API网关从客户端接收请求到向客户端返回响应之间的时间。
延迟包括IntegrationLatency和其他API网关开销。
•4XXError(客户端)和5XXError(服务器端)

-----------------------------------------------------------------------

API网关节流
•Account Limit
•API网关在所有API中以10000 RPS(request per seconds)的速度限制请求
•可根据要求增加的软限制
•如果节流=>429个请求过多(可重试错误)
•可以设置阶段限制和方法限制,以提高性能
•或者,您可以定义使用计划,以满足每个客户的需求
•就像Lambda并发一样,一个API过载(如果不受限制)可能会导致其他API受到限制

API网关-错误
•4xx表示客户端错误
•400:请求错误
•403:访问被拒绝,WAF已过滤 WAF (Web Application Firewall)
•429:超过配额,油门

•5xx表示服务器错误
•502:网关错误异常,通常用于从Lambda代理集成后端,偶尔用于由于
沉重的负载。
•503:服务不可用异常
•504:集成失败–ex Endpoint请求超时异常API网关请求在最多29秒后超时

-----------------------------------------------------------------------

AWS API Gateway - CORS

•当您收到来自另一方领域的API调用时,必须启用CORS
•选项飞行前请求必须包含以下标题:
• Access-Control-Allow-Methods
• Access-Control-Allow-Headers
• Access-Control-Allow-Origin
•可通过控制台启用CORS

----------------------------------------------------------------------------------

API Gateway – Security
IAM Permissions
API网关-安全
IAM权限
•创建IAM策略授权并附加到用户/角色
•Authentication = IAM | Authorization = IAM Policy
•在AWS(EC2、Lambda、IAM用户等)内提供良好的访问能力
•利用IAM凭证位于标题中的“Sig v4”功能

API网关——资源策略
•资源政策(类似于Lambda资源政策)
•允许跨账户访问(结合IAM安全)
•允许特定的源IP地址
•允许VPC端点

API网关-安全
Cognito用户池
•Cognito全面管理用户生命周期,令牌自动过期
•API网关从AWS Cognito自动验证身份
•无需定制实现
• Authentication = Cognito User Pools | Authorization = API Gateway Methods

API网关-安全
Lambda授权人(前定制授权人)
•基于令牌的授权人(承载令牌)——ex JWT(JSON Web令牌)或Oauth
•基于请求参数的Lambda授权器(标题、查询字符串、阶段变量)
•Lambda必须为用户返回IAM策略,结果策略被缓存
•Authentication = External | Authorization = Lambda function

----------------------------------------------------------------------------------

API网关-安全性-摘要
•IAM:
•适用于AWS账户内的用户/角色,+跨账户资源政策
•处理身份验证和授权
•利用签名v4

•定制授权人:
•非常适合第三方代币
•在返回IAM政策方面非常灵活
•在Lambda函数中处理身份验证+授权
•按Lambda调用付费,结果被缓存

•Cognito用户池:
•你可以管理自己的用户池(可以通过Facebook、谷歌登录等支持)
•无需编写任何自定义代码
•必须在后端实现授权


----------------------------------------------------------------------------------

API Gateway – HTTP API vs REST API

API网关——HTTP API与REST API
•HTTP API
•低延迟、经济高效的AWS Lambda代理、HTTP代理API和专用集成(无数据映射)
•支持OIDC和OAuth 2.0授权,以及对CORS的内置支持
•没有使用计划和API密钥

•REST API
•所有功能(本机OpenID Connect/OAuth 2.0除外)

----------------------------------------------------------------------------------

API网关–WebSocket API–概述
•什么是WebSocket?
•用户浏览器和服务器之间的双向交互通信
•服务器可以将信息推送到客户端
•这支持有状态的应用程序用例
•多人游戏和聊天应用程序中经常使用的实时API和WebSocket应用程序。
•与AWS服务(Lambda、DynamoDB)或HTTP端点配合使用

API网关–WebSocket API–路由
•传入的JSON消息被路由到不同的后端
•如果没有路由=>发送到$default
•您请求一个路由选择表达式来选择JSON上要从中路由的字段
•示例表达式:$request.body.action
•根据API网关中可用的路由密钥评估结果
•然后通过API网关将路由连接到您设置的后端

API网关-体系结构
•为应用程序中的所有微服务创建单一界面公司
•将API端点与各种资源一起使用
•应用简单的域名和SSL证书
•可以在API网关级别应用转发和转换规则

----------------------------------------------------------------------------------

 

posted @ 2022-04-12 08:35  姓蜀名黍  阅读(172)  评论(0)    收藏  举报