ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Serverless is all you need:在亚马逊云科技上用 CloudFormation 一键部署 OneHub 大模型 API 聚合管理平台并接入 TaoToken

Serverless is all you need:在亚马逊云科技上用 CloudFormation 一键部署 OneHub 大模型 API 聚合管理平台并接入 TaoToken 1. 为什么要在亚马逊云科技上部署 OneHub 并接入 TaoToken如果你正在做 AI 应用大概率会遇到这样一个局面业务代码里同时接了 OpenAI、Claude、Gemini、通义千问好几个供应商每家的 Key 格式不一样计费口径不一样调用路径也不一样。改一个模型可能要动三四个文件想统计一下这个月谁用了多少 Token只能挨个后台翻。这时候一个统一的大模型 API 聚合管理平台就很有必要OneHub 就是这类工具里比较适合做 API 分发的开源项目它基于 one-api 演进支持多供应商渠道、令牌分组、额度统计和用户权限管理。但把 OneHub 跑起来只是第一步真正让人头疼的是部署形态。单机 Docker 跑一个容器当然简单可一旦要对外提供服务就会碰到弹性、高可用、数据库连接、流量分发这些事。我试过在亚马逊云科技上用 Serverless 组合来承载它ECS Fargate 跑计算、Aurora Serverless V2 存数据、ALB 做流量分发、CloudFront 做入口整套用 CloudFormation 一键拉起。这样闲时成本低高峰能扛并发运维负担也小。这篇内容聚焦两件事一是用 CloudFormation 在亚马逊云科技上把 OneHub 部署成可用的 Serverless 架构二是把 OneHub 的上游通道接到 TaoToken 的统一 API 上让你用一个 Key 就能调度多家模型。适合已经了解基本云概念、想快速搭一套统一 API 网关的开发者。下面从架构规划讲到配置片段再到部署后的验证和排错尽量让你能跟着做下来。2. TaoToken 前置准备统一 API 通道与 Key 获取OneHub 本身是一个网关它自己不生产模型能力需要在上游配置渠道。你可以把每个模型供应商分别配成渠道也可以直接把 TaoToken 配成一个统一上游。后者更省事OneHub 里只维护一个渠道背后由 TaoToken 去对接多家模型Key 管理和计费口径都收敛到一处。TaoToken 在这里扮演的是统一 API 通道的角色它对外暴露兼容 OpenAI 风格的接口OneHub 只要按 OpenAI 类型渠道配置就能接上。你需要先拿到一个可用的 API Key然后记下 Base URL。获取入口在控制台的 API Keys 页面登录后新建一个 Key 即可。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI 基址https://taotoken.net/api拿到 Key 之后先别急着往 OneHub 里填建议用 curl 直接验证一次确认 Key 和网络都通。这一步能帮你把「Key 问题」和「OneHub 配置问题」提前分开后面排错会轻松很多。curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: ping}] }如果返回里有正常的 choices 结构说明通道没问题。如果返回 401检查 Key 是否复制完整如果超时检查部署 OneHub 的 VPC 出网配置这一点在第 5 节会展开。3. CloudFormation 模板骨架与 OneHub 环境变量配置整套架构的核心思路是计算层用 ECS Fargate 跑 OneHub 容器分 Master 和 Slave 两个 Service数据层用 Aurora Serverless V2 for MySQL入口层用 ALB 加 CloudFront。Master 只跑一个 Task负责数据写入、定时任务和系统维护Slave 跑多个 Task负责实际的 API 请求处理按 CPU 或内存自动扩展。所有节点连同一个数据库Slave 定期从数据库同步配置。下面是一个精简后的 CloudFormation 模板骨架保留了关键资源省略了部分 IAM 细节你可以在此基础上补全。AWSTemplateFormatVersion: 2010-09-09 Description: OneHub on Serverless - ECS Fargate Aurora Serverless V2 Parameters: DatabasePassword: Type: String NoEcho: true SessionSecret: Type: String NoEcho: true UserTokenSecret: Type: String NoEcho: true TaoTokenBaseURL: Type: String Default: https://taotoken.net/api Resources: OneHubCluster: Type: AWS::ECS::Cluster Properties: ClusterName: onehub-cluster OneHubDB: Type: AWS::RDS::DBCluster Properties: Engine: aurora-mysql EngineMode: provisioned ServerlessV2ScalingConfiguration: MinCapacity: 0.5 MaxCapacity: 8 DatabaseName: onehub MasterUsername: onehubadmin MasterUserPassword: !Ref DatabasePassword EnableHttpEndpoint: true MasterTaskDef: Type: AWS::ECS::TaskDefinition Properties: Family: onehub-master Cpu: 256 Memory: 512 NetworkMode: awsvpc RequiresCompatibilities: [FARGATE] ContainerDefinitions: - Name: onehub-master Image: ghcr.io/martialbe/one-hub:latest PortMappings: - ContainerPort: 3000 Environment: - Name: NODE_TYPE Value: master - Name: SQL_DSN Value: !Sub onehubadmin:${DatabasePassword}tcp(${OneHubDB.Endpoint.Address}:3306)/onehub - Name: SESSION_SECRET Value: !Ref SessionSecret - Name: USER_TOKEN_SECRET Value: !Ref UserTokenSecret SlaveTaskDef: Type: AWS::ECS::TaskDefinition Properties: Family: onehub-slave Cpu: 256 Memory: 512 NetworkMode: awsvpc RequiresCompatibilities: [FARGATE] ContainerDefinitions: - Name: onehub-slave Image: ghcr.io/martialbe/one-hub:latest PortMappings: - ContainerPort: 3000 Environment: - Name: NODE_TYPE Value: slave - Name: SQL_DSN Value: !Sub onehubadmin:${DatabasePassword}tcp(${OneHubDB.Endpoint.Address}:3306)/onehub - Name: SESSION_SECRET Value: !Ref SessionSecret - Name: USER_TOKEN_SECRET Value: !Ref UserTokenSecret部署时务必替换DatabasePassword、SessionSecret、UserTokenSecret这三个参数的默认值不要用示例值直接上线。新账号或从没创建过 ECS 资源的账号第一次建堆栈可能报缺少 ECS 服务链接角色的错这是首次使用 ECS 时系统自动创建角色导致的删掉堆栈重试一次通常就好了。OneHub 启动后登录管理后台在「渠道」里新建一个渠道类型选 OpenAIBase URL 填 TaoToken 的 API 地址Key 填你在第 2 节拿到的 Key。这样 OneHub 的所有下游请求都会经 TaoToken 转发到具体模型。渠道配置里可以设置模型映射把 OneHub 内部使用的模型名映射到 TaoToken 支持的模型名方便你统一命名。4. 部署后验证请求与成功结果堆栈创建完成后在 CloudFormation 的 Outputs 里找到 CloudFront 的域名用浏览器打开就能看到 OneHub 的登录页。首次登录用默认管理员账号进去后先改密码再去渠道页面确认 TaoToken 渠道的状态是「已启用」。验证分两步。第一步在 OneHub 后台用「测试」按钮直接测渠道连通性它会发一个最小的请求返回绿色就说明 OneHub 到 TaoToken 这段通了。第二步从外部用 curl 打 OneHub 的 API模拟真实调用。curl https://你的CloudFront域名/v1/chat/completions \ -H Authorization: Bearer 你在OneHub生成的令牌 \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 你好}], stream: false }注意这里的令牌是 OneHub 里生成的不是 TaoToken 的 Key。OneHub 的令牌用于下游鉴权和额度统计TaoToken 的 Key 只存在于 OneHub 的上游渠道配置里两者不要混。返回正常的话你会看到标准的 OpenAI 格式响应同时 OneHub 后台的日志和额度统计里会出现这条调用记录。如果你要验证流式输出把stream改成true观察是否逐块返回。流式场景对 CloudFront 和 ALB 的超时比较敏感默认 CloudFront 到源站的连接超时最高 60 秒超长 prompt 或长输出可能被截断需要提交工单提升到 180 秒。5. 本篇常见错排查清单部署和接入过程中问题大多集中在网络、数据库和配置三类。下面按现象列一下排查顺序。现象一OneHub 容器启动后反复重启。先看 CloudWatch 日志里有没有数据库连接失败。Aurora 的安全组必须允许 ECS Task 所在安全组的 3306 入站。如果 ECS Task 在私有子网还要确认路由表里有指向 NAT Gateway 的 0.0.0.0/0 路由否则容器出不了公网也就访问不了 TaoToken。现象二渠道测试返回超时。这通常是 OneHub 到 TaoToken 的出网问题不是 Key 问题。确认 NAT Gateway 正常、私有子网路由正确。如果 VPC 里配了安全组出站限制检查是否放行了 443。现象三Master 和 Slave 数据不一致。检查两个 Task Definition 的SQL_DSN是否指向同一个 Aurora 集群。Slave 会定期从数据库同步配置如果 DSN 写错Slave 会用自己的本地配置导致行为不一致。另外确认只部署了一个 Master多个 Master 同时写会出问题。现象四ALB 把管理请求转到了 Slave。检查监听器规则。常规做法是把*v1*这类 API 路径转发到 Slave Target Group其余请求转发到 Master。但这个规则覆盖不全比如/claude/v1/messages这种路径需要单独加规则否则会落到 Master 上管理节点被 API 流量打满。现象五CloudFront 返回 504。多半是源站响应太慢或连接超时。先确认 ALB 健康检查通过再看是不是长 prompt 触发了 60 秒超时。这种情况要么优化上游响应要么提工单提升 CloudFront 超时上限。现象六数据库连不上但安全组看着没问题。确认 Aurora 的EnableHttpEndpoint是否开启以及 ECS Task 用的子网是不是和 Aurora 在同一个 VPC。跨 VPC 访问需要额外配置模板里默认是同 VPC 私有子网互访。排查时善用两个工具CloudWatch Logs 看容器日志ECS Exec 直接进容器里跑curl测出网。后者能快速区分是容器内网络问题还是应用配置问题。6. 长期使用与 Coding Plan 接入建议如果你只是偶尔调几个模型按上面的方式配一个 TaoToken 渠道就够了。但如果你要把 OneHub 当成团队级的 API 网关长期跑尤其是给多个业务线或 Agent 应用做分发建议把上游通道和额度管理规划清楚。TaoToken 的 Coding Plan 适合长期编码和 Agent 场景可以在控制台里查看具体的套餐和额度规则配合 OneHub 的用户分组做二级分发。Coding Plan 入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite模型对话体验https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite架构上还有几个可以继续优化的点。Master 节点只跑一个 Task 且不做扩缩容如果长期提供服务可以考虑把它从 Fargate 换成 EC2 实例并买预付成本更低。接口响应速度要求高的话可以加一层 ElastiCache Serverless for Redis 做缓存同样不增加运维压力。CloudFront 关联 WAF 后限流规则和 Layer 7 防护都能在单一入口配好比在每个服务上单独配省事。最后提醒一句OneHub 是 Apache License 2.0 的开源项目二次开发或发布时注意保留原项目出处和协议声明。整套方案的价值在于把基础设施运维交给云服务商你只需要维护 OneHub 的渠道配置和 TaoToken 的 Key剩下的弹性、高可用、防护都由 Serverless 组件兜底。
返回列表