简介
Serverless(无服务器)架构彻底改变了开发者构建和部署应用程序的方式,消除了服务器管理的开销,并实现了按需扩展。然而,将 Serverless 函数与外部客户端和传统系统集成,在路由、安全性、可观测性和身份验证方面带来了挑战。
这正是 API 网关 变得至关重要的地方。
在本文中,我们将探讨 Apache APISIX、Kong 和 AWS API Gateway 等 API 网关如何支持 Serverless 架构。我们将重点关注实际的落地实现,包括对 OpenWhisk 和 AWS Lambda 的原生支持,并提供配置示例和架构图。
为什么在 Serverless 架构中使用 API 网关?
核心优势:
- 统一入口点:标准化对 Serverless 函数的 HTTP 访问。
- 安全层:添加身份验证、限流和 IP 过滤。
- 路由与组合:实现函数的组合和 API 编排。
- 日志与监控:与可观测性工具集成。
- 版本控制与金丝雀发布:将流量路由到不同版本的函数。
API 网关中的 Serverless 集成
1. Apache APISIX + OpenWhisk(原生插件)
Apache APISIX 提供了一个内置的 openwhisk 插件,它直接与 OpenWhisk 的 REST API 集成,允许用户将 HTTP 请求路由到 OpenWhisk 函数。
🔧 插件配置示例
1{
2 "uri": "/invoke",
3 "plugins": {
4 "openwhisk": {
5 "service_token": "demo:abc123xyz456",
6 "host": "openwhisk.example.com",
7 "action": "demo/hello",
8 "api_path": "/api/v1",
9 "https": true
10 }
11 },
12 "upstream": {
13 "type": "roundrobin",
14 "nodes": {
15 "127.0.0.1:1980": 1
16 }
17 }
18}此配置允许 APISIX 进行身份验证并调用托管在 OpenWhisk 平台上的 demo/hello 操作(Action)。
✅ 优势
- 基于令牌(Token)的安全调用
- 原生 REST 兼容性
- 可与其他 APISIX 插件(身份验证、限流等)协同工作
2. Apache APISIX + AWS Lambda(原生插件)
Apache APISIX 还包含一个原生的 aws-lambda 插件,它简化了 AWS Lambda 函数的调用。
🔧 插件配置示例
1{
2 "uri": "/lambda",
3 "plugins": {
4 "aws-lambda": {
5 "function_uri": "arn:aws:lambda:us-east-1:123456789012:function:helloWorld",
6 "aws_region": "us-east-1",
7 "access_key": "YOUR_AWS_ACCESS_KEY",
8 "secret_key": "YOUR_AWS_SECRET_KEY",
9 "invocation_type": "RequestResponse"
10 }
11 },
12 "upstream": {
13 "type": "roundrobin",
14 "nodes": {
15 "lambda.us-east-1.amazonaws.com:443": 1
16 }
17 }
18}🔒 确保保护你的访问密钥并定期轮换。
✅ 优势
- 无需自行实现 SigV4 签名
- 支持同步和异步调用
- 与 APISIX 的插件生态系统完全集成
3. Kong Gateway + AWS Lambda
Kong 提供了一个 serverless 插件来直接调用 AWS Lambda 函数。它需要 AWS 凭据和函数名称。
Kong 插件配置(YAML):
1- plugins:
2 name: aws-lambda
3 config:
4 aws_key: YOUR_AWS_KEY
5 aws_secret: YOUR_AWS_SECRET
6 aws_region: us-east-1
7 function_name: helloWorld
8 invocation_type: RequestResponseAPI 网关与 OpenWhisk
1sequenceDiagram
2 participant Client
3 participant APISIX
4 participant OpenWhisk
5 Client->>APISIX: HTTP Request /invoke
6 APISIX->>OpenWhisk: REST call with service_token
7 OpenWhisk-->>APISIX: JSON response
8 APISIX-->>Client: HTTP ResponseAPI 网关与 AWS Lambda
1sequenceDiagram
2 participant Client
3 participant APISIX
4 participant AWS Lambda
5 Client->>APISIX: HTTP Request /lambda
6 APISIX->>AWS Lambda: Invoke Function (aws-lambda plugin)
7 AWS Lambda-->>APISIX: Response
8 APISIX-->>Client: HTTP 200 OK真实应用场景
- 物联网后端:设备将数据发送到 HTTP 端点,并被路由到 Lambda 或 OpenWhisk。
- 机器学习推理网关:API 网关暴露运行机器学习模型的函数。
- API 聚合层:将多个 Serverless 函数聚合为一个 HTTP 调用。
- 事件转换:在将接收到的事件传递给云函数之前对其进行处理和转换。
最佳实践
- 使用身份验证插件(例如
key-auth、jwt)来保护你的 Serverless 函数。 - 启用限流以避免过多的调用成本。
- 实施可观测性插件(例如
prometheus、skywalking)进行监控。 - 为了可维护性,优先使用原生插件(如
openwhisk、aws-lambda),而不是自定义的代理设置。 - 将路由逻辑与业务逻辑分离,以获得更好的模块化。
总结
API 网关作为 Serverless 工作负载安全、可观测和高性能的入口点,在实现 Serverless 架构中发挥着至关重要的作用。Apache APISIX 提供了与 OpenWhisk 和 AWS Lambda 的原生集成,消除了自定义上游配置的需求。
无论你是在构建微服务、API 还是实时系统,将 API 网关与 Serverless 函数相结合都能提供可扩展性、高效性和快速迭代的能力。
对于生产环境部署,请始终在网关配置中包含安全性、限流和可观测性。
