amazon-web-services - 使用 CDK 部署时,Lambda 无法从外部文件夹中找到模块
问题描述
我正在使用 cdk 将一些 API 部署到 API Gateway。我的问题是包含 lambda(index.ts) 的文件无法导入该文件夹(名为 的文件夹get-users
)之外的任何文件或 npm 模块。
我尝试将 node_modules 文件夹和其他文件(位于文件夹之外get-users
)复制到该文件夹中get-users
,并且效果很好。
导入lodash时的示例错误如下,
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'lodash'",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module 'lodash'",
我正在导入lodash
如下,
import * as _ from "lodash";
我正在导入共享文件,如下所示,
import { validator } from "./shared/validators" // This one works
import { validator } from "../../shared/validators" // This one doesn't work
解决方案
如果您的 lambda 函数使用依赖项,您必须将所有内容打包到 ZIP 文件中并告诉 CDK 在哪里可以找到 ZIP。然后它将为您上传到 S3。但包装将是您的责任。您需要包括所有依赖项以及您的代码。
CDK 目前支持 3 种“资产”:
InlineCode
- 对单行 lambda 有用AssetCode
- 没有依赖关系的单文件 lambdasS3Code
- 已在 S3 存储桶中上传的现有 lambda 包
对于您的用例,您将需要AssetCode
,但不是目录,而是指向本地 ZIP 文件。
相关答案:如何在使用 AWS CDK 构建 cdk 时安装 lambda 函数的依赖项
由于很多人问这个问题,我会看看我是否可以在 Python 中开源我的 lambda 打包结构。如果是,我会在这里链接。
编辑:我开源了一个 CDK 结构,用于 lambda 打包,其中包含 100 多个依赖项,包括 NumPy。
推荐阅读
- tensorflow - 导入张量流
- python - ModuleNotFoundError:没有名为“azure”的模块
- java - 从文件中获取 WEB_URL
- android - 如何处理 BillingClient.onBillingServiceDisconnected()?
- javascript - 我需要一种方法,我的机器人可以用 8ball 命令之类的随机响应进行响应
- c++ - 如何在 C++ 中实现“反向应用功能”?
- java - 如何添加多个反应以嵌入 Discord JDA
- powershell - 当我尝试通过 Get-scheduleTask 获取任务时显示错误
- python - 如果不使用网格坐标,您将如何计算您在棋盘上跳过的正方形?
- postgresql - PostgreSQL 和事务上的 Debezium CDC