You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建由独立微服务子图组成的AWS无服务器Apollo联邦API?

AWS无服务器环境下Apollo联邦部署实践与子图构建方案

任务背景

某大型企业拥有多团队维护的独立微服务(各对应独立代码仓库),需构建统一的Cognito认证Apollo GraphQL联邦API,要求底层子图不暴露公网,且全程采用无服务器技术实现。

现状与核心疑问

  • 理想方案是用AWS AppSync原生联邦能力,但落地受阻,当前只能在Lambda中运行Apollo联邦服务器,前端搭配API Gateway,联邦服务器需知晓各子图端点。
  • 核心疑问:
    1. 如何基于AppSync、Lambda或其他方式为每个微服务构建子图?
    2. 业内在AWS中部署Apollo联邦有哪些成熟实践?

可行实践方案

一、子图构建选型

1. Lambda驱动的私有API Gateway子图

将每个微服务的GraphQL子图部署在私有VPC内的Lambda中,前端搭配私有API Gateway(仅允许VPC内部访问):

  • 子图无需暴露公网,联邦服务器(同样部署在VPC内的Lambda)可通过内部域名/IP直接调用
  • 子图的认证可通过Lambda授权器实现:校验请求是否来自联邦服务器所在的VPC或内部IAM角色,避免外部访问

2. AppSync子图(安全改造版)

若要保留AppSync作为子图,可通过以下方式规避公网暴露风险:

  • 将AppSync配置为VPC端点访问,关闭公网访问权限,仅允许VPC内部的联邦服务器调用
  • 为AppSync配置IAM身份验证,联邦服务器通过IAM角色获取临时凭证调用子图,无需传递Cognito令牌,简化流程
  • 放弃基于资源的策略,改用IAM权限控制:给联邦服务器的Lambda执行角色添加调用目标AppSync子图的权限

3. Lambda直接作为子图端点

无需API Gateway,直接将Lambda配置为子图的端点:

  • 利用Lambda的VPC内部调用能力,联邦服务器通过Lambda Invoke API直接触发子图Lambda,传递GraphQL查询参数
  • 认证通过IAM权限控制:仅允许联邦服务器的角色拥有Invoke该子图Lambda的权限

二、Apollo联邦服务器部署实践

1. VPC内Lambda+API Gateway(公网入口)

  • 联邦服务器Lambda部署在私有VPC内,前端搭配公网API Gateway,并启用Cognito用户池认证
  • 联邦服务器通过内部网络拉取所有子图的Schema,生成超图Schema,避免公网往返
  • 可通过Apollo Router替代Lambda中的联邦服务器,Apollo Router支持无服务器部署(可打包为容器镜像部署在Lambda或ECS Fargate),性能更优

2. 利用AWS ECS Fargate部署Apollo Router

  • 将Apollo Router部署在VPC内的ECS Fargate服务中,前端搭配公网API Gateway(带Cognito认证)
  • Fargate相比Lambda更适合长期运行的服务,能处理更高并发的联邦查询,且支持自动扩缩容
  • 子图均部署在VPC内,Router通过内部域名直接调用,确保流量完全内网化

3. Schema注册与自动发现

  • 使用Apollo Studio管理子图Schema,各微服务团队在CI/CD流程中自动将子图Schema发布到Apollo Studio
  • 联邦服务器/Router定期从Apollo Studio拉取最新Schema,无需手动配置子图端点,降低维护成本
  • 结合AWS Secrets Manager存储子图的认证凭证(如IAM密钥、API密钥),确保敏感信息安全

安全优化要点

  • 禁止子图公网暴露:所有子图必须部署在私有VPC内,通过VPC端点、内部域名或IAM权限限制访问来源
  • 认证链路简化:公网入口用Cognito认证,内部子图间优先用IAM身份验证,避免多层令牌传递
  • 流量内网化:联邦服务器与子图之间的通信完全在VPC内部进行,杜绝公网往返带来的延迟和安全风险

内容的提问来源于stack exchange,提问作者Gene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:35:32