AWS Lambda报错:找不到@hubspot/api-client模块但axios可正常运行
解决Lambda中无法找到@hubspot/api-client模块的问题
可能的原因及对应解决方案
1. 目标函数未关联Layer
虽然依赖axios的fetchContact运行正常,但fetchContactBatch可能未正确关联Layer。
修复方式:
- AWS控制台操作:进入
fetchContactBatch函数配置页,在「Layers」标签下添加你的axiosHubspotLayer。 - Serverless框架配置:在
serverless.yml中为两个函数明确指定Layer ARN:
functions: fetchContact: handler: hubspotFetchContact.hubspotFetchContact layers: - arn:aws:lambda:[你的区域]:[你的AWS账号ID]:layer:axiosHubspotLayer:[版本号] events: - httpApi: path: /contact/{contactId} method: get fetchContactBatch: handler: hubspotFetchContactBatch.hubspotFetchContactBatch layers: - arn:aws:lambda:[你的区域]:[你的AWS账号ID]:layer:axiosHubspotLayer:[版本号] events: - httpApi: path: /batch method: get
2. Layer打包过程存在问题
@hubspot/api-client可能未被完整或兼容地安装到Layer中。
正确打包Layer的步骤:
- 创建临时工作目录:
mkdir layer-build && cd layer-build && mkdir nodejs && cd nodejs
- 创建
package.json文件:
{ "dependencies": { "@hubspot/api-client": "^11.1.0", "axios": "^1.6.7" } }
- 使用Node.js 18.x环境安装生产依赖(确保与Lambda runtime版本一致):
npm install --production
若本地是Windows环境,建议用Docker模拟Lambda的Linux环境安装,避免兼容问题:
docker run -v "$PWD":/var/task public.ecr.aws/sam/build-nodejs18.x npm install --production
- 返回
layer-build目录,将nodejs目录打包为zip(注意:zip根目录必须是nodejs,不能包含外层目录):
cd .. && zip -r axiosHubspotLayer.zip nodejs/
- 上传新zip包作为Layer新版本,重新关联到两个函数。
3. 验证Layer内容完整性
解压Layer zip包,检查nodejs/node_modules/@hubspot/api-client目录下是否包含完整文件(如package.json、dist文件夹等)。若存在文件缺失,重新执行打包步骤。
4. 最小化案例测试
创建测试Lambda函数,仅包含以下代码,验证Layer能否正确加载模块:
"use strict"; const hubspot = require("@hubspot/api-client"); module.exports.test = async (event) => { return { statusCode: 200, body: JSON.stringify({ message: "模块加载成功" }), }; };
若测试函数正常运行,说明原函数问题可能出在其他逻辑(如环境变量HS_TOKEN未配置),而非依赖加载。
内容的提问来源于stack exchange,提问作者LeKevoid
相关产品推荐
相关产品推荐

