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

在CDK项目中为Lambda函数引入node-fetch模块时遇找不到模块问题

解决CDK Lambda中无法找到node-fetch模块的问题

以下是几个针对性的解决步骤,按优先级尝试:

1. 确认node-fetch版本兼容

node-fetch v3及以上是ESM模块,不支持require()语法,而你用的是Node.js 16.x运行时,代码里又用了var fetch = require("node-fetch");,所以必须安装兼容CommonJS的v2版本:

# 卸载现有版本
npm uninstall node-fetch
# 安装v2版本
npm install node-fetch@2

2. 确保依赖被正确打包进Lambda

你当前用Code.fromAsset('lambda')加载代码,Lambda只会打包lambda目录下的内容。如果package.json和node_modules在项目根目录,打包时不会被包含进去,自然找不到模块。

方案A:改用NodejsFunction自动处理依赖

CDK的NodejsFunction会自动分析代码依赖,打包时将所需模块一起打包,无需手动管理node_modules或层:

import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';

const lambdaJiraApi = new NodejsFunction(this, 'lambda_Jira_api', {
  runtime: lambda.Runtime.NODEJS_16_X,
  entry: './lambda/apiJiraFetcher.js', // 指向你的handler文件路径
  timeout: Duration.seconds(20),
  functionName: 'lambda_Jira_api',
  environment: { QUEUEURL: queueSQS.queueUrl },
});

方案B:在lambda目录下单独安装依赖

如果坚持用Code.fromAsset,需要在lambda目录内单独初始化并安装依赖:

cd lambda
npm init -y
npm install node-fetch@2

这样lambda目录下会生成node_modules,打包时会被包含进Lambda代码包。

3. 修复Node Fetch层的目录结构

如果你想用层管理依赖,必须遵循Lambda层的目录规范:Node.js层的模块必须放在nodejs/node_modules目录下,否则Lambda无法识别。

正确构建层的步骤:

  1. 创建如下目录结构:
layers/
  node-fetch/
    nodejs/
  1. 进入nodejs目录,初始化并安装依赖:
cd layers/node-fetch/nodejs
npm init -y
npm install node-fetch@2
  1. 在CDK中定义层:
const nodeFetchLayer = new lambda.LayerVersion(this, 'NodeFetchLayer', {
  code: lambda.Code.fromAsset('layers/node-fetch'),
  compatibleRuntimes: [lambda.Runtime.NODEJS_16_X],
});

4. 检查打包排除规则

确保项目根目录的.gitignore或CDK打包配置没有排除node_modules目录,否则即使安装了依赖,打包时也会被忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:46