摘要:本文介绍如何在 AWS 上以生产级标准部署 LiteLLM AI Gateway,涵盖 ECS Fargate 和 EKS 两种方案,并结合 LiteLLM 的 Control Plane / Data Plane 分离架构实现多区域高可用部署。
随着企业大规模采用大语言模型(LLM),团队面临以下挑战:
LiteLLM 作为开源 AI Gateway,提供统一的 OpenAI 兼容 API 代理 200+ LLM 模型,内置 Key 管理、预算控制、缓存、负载均衡等企业级功能。
两种部署方案均采用以下核心设计原则:
📦 部署代码:https://github.com/zhangzhenhuajack/aws-builder/tree/main/litellm/litellm-ecs-cloudformation
| 组件 | 规格 | 用途 |
|---|---|---|
| ECS Fargate | 2 vCPU / 4 GB,2+ 副本 | LiteLLM 容器运行 |
| Aurora PostgreSQL 16 | Serverless v2 (0.5–8 ACU) | 用户/Key/用量元数据 |
| ElastiCache Redis 7.2 | Serverless,TLS 加密 | 响应缓存 |
| Internal ALB | 仅 VPC 内可访问 | 内网负载均衡 |
| CloudFront + WAF | HTTPS-only,6 条 WAF 规则 | 全球加速 + 应用层防护 |
| VPC Endpoints | Bedrock PrivateLink + S3 Gateway | LLM 调用不出 VPC |
| DynamoDB | On-Demand,TTL + PITR | 会话/缓存存储 |
部署采用分层 CloudFormation 栈,按依赖顺序部署:
| 模板 | 说明 |
|---|---|
vpc.yaml |
VPC + 公私子网 + NAT Gateway × 2 + VPC Endpoints (Bedrock PrivateLink + S3 Gateway) |
s3.yaml |
配置文件 + 日志存储桶,Intelligent-Tiering |
database.yaml |
Aurora Serverless v2 + Redis Serverless + DynamoDB |
bedrock.yaml |
Bedrock IAM 用户 + 凭证存入 Secrets Manager |
ecs.yaml |
ECS Cluster + Task + Service + Internal ALB + Auto Scaling |
cloudfront-waf.yaml |
CloudFront 分发 + WAF 规则(可选) |
chmod +x deploy.sh
# 部署全部组件
./deploy.sh deploy-all
# 或分步部署
./deploy.sh deploy-vpc
./deploy.sh deploy-s3
./deploy.sh deploy-db
./deploy.sh deploy-bedrock
./deploy.sh upload-config # 上传 litellm_config.yaml 到 S3
./deploy.sh deploy-ecs
./deploy.sh deploy-cloudfront| 层级 | 安全措施 |
|---|---|
| 入口 | CloudFront + WAF(SQL 注入、速率限制、IP 信誉、Geo 白名单) |
| 传输 | 全链路 TLS 1.2+,CloudFront 强制 HTTPS |
| ALB | Internal(无公网 IP),仅接受 CloudFront VPC Origin 流量 |
| ECS | 私有子网,无公网 IP,仅接受 ALB Security Group 流量 |
| Bedrock | VPC Endpoint (PrivateLink),流量不出 VPC |
| 数据库 | 私有子网,Security Group 仅允许 VPC 内端口访问 |
| 密钥 | Secrets Manager 自动生成,ECS Task Definition 引用 |
# 健康检查
curl https://<cloudfront-domain>/health/liveliness
# 获取 Master Key
MASTER_KEY=$(aws secretsmanager get-secret-value \
--secret-id litellm/litellm/master-key \
--query SecretString --output text | jq -r .LITELLM_MASTER_KEY)
# 调用 Bedrock Claude
curl -s https://<cloudfront-domain>/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MASTER_KEY" \
-d '{
"model": "bedrock-claude-opus-4-6-v1",
"messages": [{"role": "user", "content": "Hello!"}]
}'优势: - ✅ CloudFormation 一键部署,运维简单 - ✅ 无需管理 Kubernetes 集群 - ✅ Fargate Serverless,无需管理节点 - ✅ CloudFront VPC Origin 内网回源,零公网暴露 - ✅ 自动扩缩(CPU 70% / Memory 80%) - ✅ VPC Endpoint 确保 Bedrock 调用不出 VPC
适用场景: - 团队无 Kubernetes 经验 - 希望最小化运维负担 - 单区域部署为主 - 快速上线
📦 部署代码:https://github.com/kk137/litellm-eks-public
| 组件 | 规格 | 用途 |
|---|---|---|
| EKS | K8s 1.35, 3 AZ | 容器编排 |
| 系统节点组 | 2× m7g.large Graviton (Managed NG) | Karpenter, CoreDNS |
| 工作负载节点 | Karpenter 自动扩缩 r7g/r6g (Spot + On-Demand) | LiteLLM Pod |
| LiteLLM | 3 副本,HPA 3-20 | LLM 代理网关 |
| Aurora PostgreSQL | Serverless v2 (0.5–8 ACU) | 元数据存储 |
| ElastiCache Redis | cache.r7g.large × 2, TLS+Auth | 响应缓存 |
| ALB + WAFv2 | Internet-facing, HTTPS (ACM) | 入口 + 防护 |
| External Secrets Operator | Helm chart | Secrets Manager → K8s Secret |
litellm-eks/
├── eksctl-cluster.yaml # EKS 集群定义
├── iam-policy.json # IRSA IAM 权限策略
├── 00-namespace.yaml # Namespace
├── 01-serviceaccount.yaml # ServiceAccount (IRSA)
├── 02-secretstore.yaml # ESO SecretStore
├── 03-externalsecret.yaml # ESO ExternalSecret (12 个密钥)
├── 04-configmap.yaml # LiteLLM 配置(模型、路由、缓存)
├── 05-deployment.yaml # Deployment (3 副本, 反亲和, 探针)
├── 06-service.yaml # ClusterIP Service
├── 07-ingress.yaml # ALB Ingress (HTTPS, WAF, CIDR 限制)
├── 08-hpa.yaml # HPA (CPU 65% / Memory 75%, 3-20 副本)
├── 09-pdb.yaml # PDB (最少 2 可用)
├── 10-networkpolicy.yaml # NetworkPolicy (零信任)
└── 11-karpenter-nodepool.yaml # Karpenter NodePool + EC2NodeClass
# 1. 创建 EKS 集群
eksctl create cluster -f eksctl-cluster.yaml
# 2. 安装 Karpenter + 创建节点池
helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \
--version "1.3.0" --namespace kube-system \
--set "settings.clusterName=$CLUSTER_NAME" \
--set "settings.clusterEndpoint=$CLUSTER_ENDPOINT" ...
kubectl apply -f 11-karpenter-nodepool.yaml
# 3. 创建 ElastiCache Redis + Aurora PostgreSQL (AWS CLI)
# 4. 写入 Secrets Manager
aws secretsmanager create-secret --name litellm/master-key --secret-string "$MASTER_KEY"
aws secretsmanager create-secret --name litellm/database-url --secret-string "$DATABASE_URL"
# 5. 安装 Helm 组件
helm install aws-load-balancer-controller eks/aws-load-balancer-controller ...
helm install external-secrets external-secrets/external-secrets ...
# 6. 部署 K8s 资源
kubectl apply -f 00-namespace.yaml
kubectl apply -f 01-serviceaccount.yaml
# ... 依次 apply 所有 YAML
# 7. 配置 Route53 DNS → ALB
# 8. 验证
curl -sk https://$DOMAIN/health/readinessEKS 方案支持多 Provider 混合部署:
| Provider | 模型示例 | 认证方式 |
|---|---|---|
| AWS Bedrock | Claude Sonnet 4.6, Opus 4.6, Nova Pro | IRSA(无需 API Key) |
| Gemini 2.0 Flash, Gemini 2.5 Pro | API Key | |
| OpenAI | GPT-4o, o3-mini | API Key |
| Azure OpenAI | GPT-4o | API Key + Endpoint |
管理界面通过 AWS Cognito SSO 认证:
| Cognito 组 | LiteLLM 角色 | 权限 |
|---|---|---|
admin |
proxy_admin |
完全管理 |
viewer |
proxy_admin_viewer |
只读 |
users |
internal_user |
管理自己的 Key |
优势: - ✅ Kubernetes 原生,生态丰富 - ✅ Karpenter 智能扩缩,Spot 实例降低 60%+ 成本 - ✅ Graviton (ARM) 节点,性价比更高 - ✅ NetworkPolicy 零信任网络 - ✅ External Secrets Operator 自动同步密钥 - ✅ SSO 集成(Cognito OIDC) - ✅ 多 Provider 支持(Bedrock + Gemini + OpenAI + Azure) - ✅ PodDisruptionBudget 保证滚动更新零停机
适用场景: - 团队有 Kubernetes 经验 - 需要精细化的资源调度和网络策略 - 多 LLM Provider 混合使用 - 需要 SSO 集成 - 追求极致成本优化(Spot + Graviton)
两种方案均遵循以下安全原则:
| 层级 | ECS 方案 | EKS 方案 |
|---|---|---|
| 入口防护 | CloudFront + WAF (6 规则) | ALB + WAFv2 (3 规则) |
| 传输加密 | TLS 1.2+ 全链路 | TLS 1.2+ 全链路 |
| 内网隔离 | Internal ALB + 私有子网 | ClusterIP + NetworkPolicy |
| Bedrock 调用 | VPC Endpoint (PrivateLink) | IRSA 直连 |
| 数据库访问 | Security Group 限制 | Security Group + NetworkPolicy |
| 方案 | 密钥存储 | 注入方式 |
|---|---|---|
| ECS | AWS Secrets Manager | ECS Task Definition 环境变量引用 |
| EKS | AWS Secrets Manager | External Secrets Operator → K8s Secret |
| 组件 | 加密方式 |
|---|---|
| Aurora PostgreSQL | 存储加密 (AES-256) + 删除保护 |
| Redis | TLS 传输加密 + Auth Token |
| DynamoDB | KMS 加密 + 时间点恢复 (PITR) |
| S3 | AES-256 服务端加密 + 强制 HTTPS |
API Request
├──▶ CloudWatch Logs — 应用运行日志(30 天保留)
├──▶ S3 — 完整 request/response JSON(Intelligent-Tiering)
├──▶ Aurora PostgreSQL — 费用追踪、用量统计、审计日志
└──▶ LiteLLM UI Dashboard — 可视化监控
每次 API 调用生成 JSON 文件,包含: - 完整的用户输入(prompt)和模型输出(completion) - 使用的模型、调用费用、Token 用量 - 调用者 Key 别名、请求来源 IP - 延迟指标(startTime / endTime / response_time)
通过 /ui 访问管理界面: - Request
Logs:每次调用的 request/response 详情 -
Usage:按用户/Key/模型的用量统计 -
Spend:费用追踪和预算管理 -
Models:模型配置和健康状态
两种方案采用不同的技术栈,适配不同的团队技术背景:
| 维度 | ECS Fargate | EKS |
|---|---|---|
| 部署方式 | CloudFormation 模板 | Kubernetes YAML + Helm |
| 计算平台 | Fargate Serverless 容器 | EC2 节点(Managed NG + Karpenter) |
| 节点管理 | 无需管理(Serverless) | Karpenter 自动扩缩 + Spot/Graviton |
| 入口层 | CloudFront + Internal ALB | ALB Ingress Controller |
| 网络隔离 | Security Group | Security Group + NetworkPolicy |
| 密钥注入 | ECS Task Definition 引用 Secrets Manager | External Secrets Operator → K8s Secret |
| Bedrock 认证 | IAM User + VPC Endpoint (PrivateLink) | IRSA (Pod 级 IAM Role) |
| 扩缩容 | ECS Auto Scaling (Target Tracking) | HPA + Karpenter (节点级 + Pod 级) |
| 多 Provider | 支持 | 支持(IRSA 原生集成) |
| SSO 集成 | 支持 | Cognito OIDC 集成 |
| 成本模式 | Serverless 按需付费 | Serverless + Spot 按需付费 |
| IaC 工具 | CloudFormation | eksctl + kubectl + Helm |
两种方案本质上是容器编排平台的选择差异,核心能力(高可用、弹性扩缩、安全合规、可观测性)完全一致,团队可根据现有技术栈自由选择。
两种方案均大量采用 AWS Serverless 组件,核心优势是按需付费、无需预置容量:
| 组件 | Serverless 特性 |
|---|---|
| Aurora Serverless v2 | 按 ACU 秒级计费,空闲时自动缩至 0.5 ACU,无需预估数据库规格 |
| ElastiCache Redis Serverless | 按实际存储和请求量计费,零流量时接近零成本 |
| ECS Fargate | 按容器运行时间计费,无需管理 EC2 实例 |
| DynamoDB On-Demand | 按请求次数计费,无需预置读写容量 |
| CloudFront | 按请求数和流量计费,无最低消费 |
| Karpenter + Spot(EKS) | 自动选择最优实例类型,Spot 实例可节省 60%+ 计算成本 |
关键设计原则: - 🔄 弹性伸缩:所有组件随业务负载自动扩缩,高峰期自动扩容,低谷期自动缩容 - 💰 零浪费:不使用时不产生费用(或仅产生极低的基础费用) - 📈 线性增长:成本与实际 LLM 调用量线性相关,无阶梯式跳变
✨ 此功能需要 LiteLLM Enterprise License。
当业务扩展到多区域时,可以采用 LiteLLM 的 Control Plane / Data Plane 分离架构,将管理面和数据面解耦,实现全球多区域部署。
┌─────────────────────────────────────────────────────┐
│ Admin Instance (Control Plane) │
│ admin.company.com │
│ - Key 管理、用户管理 │
│ - 配置变更、监控 Dashboard │
│ DISABLE_LLM_API_ENDPOINTS=true │
└──────────────────────┬──────────────────────────────┘
│
共享 Aurora Global Database
│
┌────────────────────────────┼────────────────────────────┐
│ │ │
┌─────────▼─────────┐ ┌──────────▼──────────┐ ┌──────────▼──────────┐
│ US Worker (ECS) │ │ EU Worker (EKS) │ │ APAC Worker (ECS) │
│ us.company.com │ │ eu.company.com │ │ apac.company.com │
│ DISABLE_ADMIN=true│ │ DISABLE_ADMIN=true │ │ DISABLE_ADMIN=true │
│ → Bedrock us-east│ │ → Bedrock eu-west │ │ → Bedrock ap-north │
└───────────────────┘ └─────────────────────┘ └─────────────────────┘
| 组件 | 职责 | 环境变量 |
|---|---|---|
| Admin Instance | 用户管理、Key 生成、配置变更、Dashboard | DISABLE_LLM_API_ENDPOINTS=true |
| Worker Instance | 处理 LLM 请求、路由、缓存、负载均衡 | DISABLE_ADMIN_UI=true +
DISABLE_ADMIN_ENDPOINTS=true |
所有实例共享同一个数据库,Admin 实例创建的 Key/用户/配置自动对所有 Worker 生效。
Admin Instance(管理面):
DISABLE_LLM_API_ENDPOINTS=true # 禁用 LLM API,仅保留管理端点
DATABASE_URL=postgresql://user:pass@global-db:5432/litellm
LITELLM_MASTER_KEY=your-master-keyWorker Instance(数据面):
DISABLE_ADMIN_UI=true # 禁用管理 UI
DISABLE_ADMIN_ENDPOINTS=true # 禁用管理 API
DATABASE_URL=postgresql://user:pass@global-db:5432/litellm
LITELLM_MASTER_KEY=your-master-keyfrom openai import OpenAI
# 美国用户 → US Worker
client_us = OpenAI(base_url="https://us.company.com/v1", api_key="sk-xxx")
# 欧洲用户 → EU Worker
client_eu = OpenAI(base_url="https://eu.company.com/v1", api_key="sk-xxx")
# 管理操作 → Admin Instance
import requests
requests.post("https://admin.company.com/key/generate",
headers={"Authorization": "Bearer sk-master"},
json={"duration": "30d"})Worker 实例禁用管理端点后,仅保留以下 API: -
/chat/completions — LLM 请求 - /v1/* — OpenAI
兼容 API - /bedrock/* — Bedrock 透传 API -
/vertex_ai/* — Vertex AI 透传 API - /health —
健康检查 - /metrics — Prometheus 指标
LiteLLM 作为生产级 AI Gateway,在 AWS 上有两种成熟的部署路径:
两种方案均支持: - ✅ 高可用(多 AZ 部署) - ✅ 弹性扩缩(Auto Scaling / HPA + Karpenter) - ✅ 安全合规(WAF + TLS + VPC Endpoint + IAM 最小权限) - ✅ 完整可观测性(CloudWatch + S3 审计 + Dashboard)
对于多区域场景,可进一步采用 LiteLLM Enterprise 的 Control Plane / Data Plane 分离架构,在保持集中管理的同时为各区域用户提供低延迟的 LLM 访问体验,且各区域可自由选择 ECS 或 EKS 作为部署方式。