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

AWS Amplify Datastore本地保存成功但未同步至DynamoDB故障排查

问题原因确认

你日志中输出的两个警告就是导致数据仅存本地、不同步到DynamoDB的直接原因,具体问题如下:

  • 第一个警告Realtime disabled when in a server-side environment是因为DataStore默认是为客户端离线场景设计的,在服务端/无服务(比如Lambda)环境下会默认禁用实时同步,且不会自动触发后台异步同步逻辑。你代码中调用DataStore.save后直接返回执行结果,此时本地存储虽然完成写入,但同步到云端的逻辑还未启动,函数执行进程就被回收,自然不会写入DynamoDB。
  • 第二个警告User is unauthorized to query syncPosts with auth mode AWS_IAM是因为当前执行代码的角色(比如Lambda的执行角色)没有对应AppSync接口的调用权限,就算触发同步流程也会因为权限校验失败终止,无法完成云端写入。
修复步骤
  • 补充缺失的导入,你的代码中使用了DataStore但未导入,首先修改导入语句:
const { DataStore, syncExpression } = require("aws-amplify")
  • 服务端环境手动触发同步流程,不要在save后直接返回,修改handler逻辑,先启动DataStore,save完成后等待同步结束再返回,同时可适当增加函数的超时时间避免同步未完成就被终止:
exports.handler = async (event) => {
    try {
        console.log("inside")
        // 手动启动DataStore同步进程
        await DataStore.start()
        
        let response=await DataStore.save(
            new Post.Post({
              title: "My second Post",
              status:"DRAFT",
              rating: 7
            })
          );
        // 等待同步完成
        await DataStore.sync()
        console.log("Post saved and synced successfully!");
     
        return response;
      } catch (error) {
        console.log("Error saving post", error);
      }

};
  • 修复IAM权限问题,有两个可选方案:
    1. 调整数据模型的鉴权规则,给IAM角色开放Post模型的操作权限,修改你的schema.graphql中Post的配置,修改后执行amplify push更新云端配置:
    type Post @model @auth(rules: [
      # 新增IAM权限规则,按需开放需要的操作权限
      { allow: public, provider: iam, operations: [create, read, update, delete] }
    ]) {
      id: ID!
      title: String!
      status: String!
      rating: Int!
    }
    
    1. 给当前执行代码的角色(比如Lambda执行角色)手动添加AppSync对应的操作权限策略。
  • 可选优化:如果你当前的场景不需要离线存储能力,仅需要服务端写入数据到DynamoDB,建议直接调用Amplify API模块操作AppSync接口,或者直接调用DynamoDB SDK写入数据,避免DataStore同步带来的额外开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:07