AWS AppSync
全托管构建和运维 GraphQL API,可统一查询 DynamoDB 和 Lambda 等多个数据源的服务
概述
AWS AppSync 是一项全托管提供 GraphQL API 的服务。前端可通过单一端点访问多个数据源 (DynamoDB、Aurora、OpenSearch、Lambda、HTTP 端点),只需一次请求即可获取所需数据。它具备实时数据同步 (基于 WebSocket 的订阅)、离线数据同步和内置缓存功能,适合构建移动应用和实时仪表板。还标准支持通过 Cognito、IAM、API 密钥和 Lambda 授权器实现灵活的认证与授权。
解析器与数据源设计
AppSync 的核心是解析器 (Resolver),负责连接 GraphQL 字段与数据源。VTL (Velocity Template Language) 解析器是编写请求/响应映射模板的传统方式,适合直接访问 DynamoDB 等简单操作。JavaScript 解析器是 2023 年新增的方式,在 APPSYNC_JS 运行时上运行,比 VTL 更直观地编写逻辑。管道解析器 (Pipeline Resolver) 是按顺序调用多个数据源的配置,可在一个 GraphQL 字段中实现授权检查 → 数据获取 → 转换等多阶段处理。实务中推荐以 JavaScript 解析器为基础,仅在需要复杂业务逻辑时委托给 Lambda 数据源的设计。
订阅与离线同步
AppSync 的实时功能通过基于 WebSocket 的订阅实现。当客户端订阅特定的变更操作 (Mutation) 时,数据变更会立即推送给所有已连接的客户端。在聊天应用、协作工具、实时仪表板等多用户实时共享同一数据的场景中发挥威力。Azure API Management 的 GraphQL 功能不支持订阅,实时通信需要另外组合 Azure SignalR Service,在这一点上 AppSync 在实时用途方面更具优势。离线同步与 Amplify DataStore 结合实现,在网络断开期间将数据变更积累在本地,重新连接时自动与服务器同步。冲突解决策略可选择 Automerge (自动合并)、Optimistic Concurrency (乐观并发控制) 和 Lambda (自定义逻辑) 三种方式。GraphQL 相关书籍 (Amazon) 可供系统学习。
认证模型与多数据源集成
AppSync 可以为一个 API 同时设置多种认证模式。可以组合 Cognito 用户池 (用户认证)、IAM (服务间通信)、API 密钥 (公开访问) 和 Lambda 授权器 (自定义认证),在 GraphQL Schema 的字段级别指定认证模式。例如,可以设计为文章浏览通过 API 密钥允许任何人访问,而文章的创建和编辑则要求 Cognito 认证。在数据源集成方面,一个 GraphQL 查询中从 DynamoDB 获取用户信息,同时组合 OpenSearch 的搜索结果和 Lambda 计算的推荐分数一起返回——这种多后端集成正是 AppSync 的真正价值所在。需要注意的是,解析器有执行时间限制 (30 秒),不适合繁重的聚合处理或批量操作。此类处理需要委托给 Lambda 数据源,设计为异步返回结果。