AWS API Gateway 定价详解 - Logicata
什么是 API 网关?
AWS API 网关是一项托管的 流量路由到外部端点。它支持多种集成方式,以下是部分支持的服务列表:
- EC2(包括 ALB 和 NLB)
- Lambda
- Step Functions
- DynamoDB
- Amazon EventBridge
- VPC Link
- 其他 96 项直接集成的服务
- 任何可以在端口 80、443 和 1024-65535 上工作的服务
这种广泛的集成能力使得 API 网关可以部署在几乎任何工作负载之前。例如:
- 简单的请求与响应:可以选择 Lambda 或直接集成 DynamoDB。
- 复杂的处理流程:可通过 Step Functions 实现。
- 在 EKS 集群前部署负载均衡器,并通过 API 网关连接。
除了支持 RESTful API,API 网关还支持 WebSocket 连接。WebSocket 是一种允许双向通信的长期连接,适用于实时聊天、多玩家游戏等场景。其安全性可以通过 IAM 或自定义 Lambda 授权器实现。
对于 REST API,API 网关提供两种选项:
REST API 和 HTTP API 的安全性
REST API 的安全性选项包括:
- IAM
- AWS Cognito
- VPC 端点策略
- 标签策略
- 自定义 Lambda 授权器
HTTP API 的安全性相对简化,但支持基于 JWT 的即插即用安全性,JWT 提供商可以是 Firebase 或 AWS Cognito。此外,还支持 IAM 和自定义 Lambda 授权器。
API 网关还支持通过 AWS 证书管理器托管的 TLS 连接,极大简化了证书管理工作。
AWS API 网关的工作流程示例
以下是两个常见的 API 网关工作流程示例:
示例 1:通过 Lambda 集成

- 用户通过 API 网关的 REST API 发起请求。
- 请求被发送到外部 JWT 授权器进行验证。
- 验证通过后,API 网关将请求转发给 Lambda 后端。
- Lambda 处理请求并返回响应,最终通过 API 网关发送给用户。
示例 2:直接集成 DynamoDB

- 用户请求数据。
- Lambda 自定义授权器对请求进行授权。
- API 网关直接与 DynamoDB 集成,检索相关数据。
- 数据通过 API 网关返回给用户。
AWS API 网关定价详解
免费层
AWS API 网关在账户创建后的前 12 个月内提供免费层,包含以下资源:
- 100 万次 HTTP API 调用
- 100 万次 REST API 调用
- 100 万条 WebSocket 消息和 75 万连接分钟
这意味着用户可以在三种类型中总计发出 3000 万次请求,而无需支付任何费用。
标准定价
免费层结束后,API 网关的定价仍然非常具有竞争力:
-
HTTP API:
- 前 3 亿次请求:每百万次请求 $1(每次请求最多 512 KB 数据)
- 超过 3 亿次请求:每百万次请求 $0.90
-
REST API:
- 前 3.5 亿次请求:每百万次请求 $3.50
- 接下来的 6.67 亿次请求:每百万次请求 $2.80
- 接下来的 19 亿次请求:每百万次请求 $2.38
- 超过 20 亿次请求:每百万次请求 $1.51
例如,每月 1 亿次请求的费用约为 $100,每次请求的成本仅为 $0.000001。
其他费用
- 缓存:根据缓存大小收费,0.5GB 缓存每小时 $0.02,237GB 缓存每小时 $3.80。
- WebSocket:
- 每百万条消息 $1(每条消息 32KB),超过 10 亿条后降至 $0.80。
- 每百万连接分钟 $0.25。
此外,API 网关的调用可能涉及其他 AWS 服务,例如:
- Lambda 执行费用
- VPC 专用链接费用
- EC2 数据传输费用
- CloudWatch 日志的存储和摄取费用
替代方案:应用程序负载均衡器(ALB)
应用程序负载均衡器(ALB)是 API 网关的一个潜在替代方案,适用于特定场景。ALB 的特点包括:
- 支持与部分 AWS 服务集成(如 EC2、Lambda)。
- 定价基于数据传输,长期成本更高,但每次请求的成本较低。
ALB 更适合高流量、低数据量的用例,例如每天 100 万次、每次 5KB 的请求。
总结
AWS API 网关是一项功能强大且灵活的服务,适用于多种工作负载场景。其API 产品。尽管存在一些替代方案,如 ALB,但 API 网关在大多数情况下仍然是最简单、最快速的选择。
原文链接: https://www.logicata.com/blog/aws-api-gateway-pricing/