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

创建可访问AWS Amplify DataStore的Lambda函数遇报错求助

在AWS Lambda(Amplify Function)中使用Amplify DataStore的解决方案

问题原因

你遇到的ReferenceError: window is not defined错误,是因为Amplify DataStore默认面向浏览器环境开发,会依赖window这类浏览器专属API。而Lambda运行在Node.js后端环境中,不存在这些API,因此需要调整SDK的配置和使用方式,适配服务器端环境。

关键修复步骤

  1. 补充后端必要配置项
    DataStore底层依赖AppSync实现数据同步,之前的配置缺少AppSync相关参数,必须补充才能正常初始化。同时添加ssr: true标记,告知SDK当前处于服务器端环境,避免调用浏览器API。

  2. 优化DataStore运行模式
    Lambda是短生命周期函数,不需要后台自动同步数据,因此关闭自动同步功能,避免不必要的资源消耗。

  3. 移除冗余的start/stop调用
    在服务器端环境中,DataStore会按需初始化资源,无需显式调用DataStore.start()和DataStore.stop(),反而可能引发异常。

可行代码示例

const { Amplify } = require('aws-amplify');
const { DataStore } = require('@aws-amplify/datastore');
const { Devices } = require('./models');

// 适配Lambda环境的Amplify配置
Amplify.configure({
  aws_project_region: '你的AWS区域',
  aws_cognito_identity_pool_id: '你的Cognito身份池ID',
  aws_cognito_region: '你的AWS区域',
  aws_user_pools_id: '你的Cognito用户池ID',
  aws_user_pools_web_client_id: '你的Cognito客户端ID',
  // 新增AppSync配置(必须项)
  aws_appsync_graphqlEndpoint: '你的AppSync GraphQL端点',
  aws_appsync_region: '你的AWS区域',
  aws_appsync_authenticationType: 'AMAZON_COGNITO_USER_POOLS', // 匹配你的认证类型,如API_KEY
  // 启用服务器端渲染模式,避免浏览器API依赖
  ssr: true,
});

// 配置DataStore为Lambda环境优化:关闭自动后台同步
DataStore.configure({
  syncInterval: 0,
  syncPageSize: 100,
});

/**
 * @type {import('@types/aws-lambda').APIGatewayProxyHandler}
 */
exports.handler = async (event) => {
  console.log(`EVENT: ${JSON.stringify(event)}`);

  try {
    // 直接执行DataStore查询
    const items = await DataStore.query(Devices);
    console.log('Devices DataStore查询结果: ' + JSON.stringify(items));

    return {
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ devices: items }),
    };
  } catch (error) {
    console.error('DataStore操作失败:', error);
    return {
      statusCode: 500,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ error: error.message }),
    };
  }
};

本地Mock测试注意事项

  • 先启动AppSync mock服务:运行amplify mock api,确保本地GraphQL端点可用。
  • 再运行Lambda mock:amplify mock function function_name,避免因AppSync服务未启动导致的连接失败。
  • 确认models目录已通过amplify codegen models正确生成,Devices模型定义无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:43:42