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

Amplify运行或模拟使用aws-appsync的Lambda函数时报错如何解决?

错误原因

aws-appsync 库最初设计优先兼容浏览器运行环境,默认依赖浏览器全局对象(window、navigator)和fetch API,而Node.js运行时(包括Lambda线上环境和本地mock环境)没有内置这些全局变量,库初始化阶段就会抛出未定义错误,最终导致Lambda无法加载handler函数。

修复方案
  • 第一步:在Lambda函数目录下安装配套依赖
    注意:要进入你函数对应的文件夹(一般是amplify/backend/function/<your-function-name>/src目录,包含package.json的路径)执行安装命令:
    npm install aws-appsync cross-fetch aws-sdk graphql graphql-tag
    
  • 第二步:修改Lambda代码,补充环境兼容配置
    完整可运行的代码示例如下:
    // 引入fetch的polyfill兼容Node.js环境
    require('cross-fetch/polyfill');
    // 补充全局变量定义,解决aws-appsync的浏览器依赖问题
    global.navigator = global.navigator || {};
    global.navigator.userAgent = global.navigator.userAgent || 'Node.js';
    global.window = global.window || {
      fetch: global.fetch
    };
    
    const AWSAppSyncClient = require('aws-appsync').default;
    const { AUTH_TYPE } = require('aws-appsync');
    const aws = require('aws-sdk');
    
    // 初始化AppSync客户端
    const client = new AWSAppSyncClient({
      url: process.env.APPSYNC_API_URL, // 建议通过Amplify环境变量注入,不要硬编码
      region: process.env.AWS_REGION,
      auth: {
        type: AUTH_TYPE.AWS_IAM, // 可根据你的鉴权方式替换为API_KEY/AMAZON_COGNITO_USER_POOLS等
        credentials: aws.config.credentials,
      },
      disableOffline: true // 必须开启,Lambda是无状态运行环境,要关闭离线缓存功能
    });
    
    exports.handler = async (event) => {
      console.log(event);
      // 此处可正常编写调用AppSync的业务逻辑
      return {
        statusCode: 200,
        body: JSON.stringify('执行成功')
      }
    };
    
  • 第三步:配置Lambda执行权限
    如果你使用IAM鉴权调用AppSync,执行amplify update function选择对应函数,在权限配置项中勾选AppSync API的调用权限,Amplify会自动为Lambda执行角色配置对应IAM策略,无需手动修改。
  • 第四步:验证修复
    执行amplify mock function <your-function-name>做本地测试,确认无报错后再部署到线上环境验证即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:04