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网关级别应用转发和转换规则
----------------------------------------------------------------------------------