Las*_*apa 7 amazon-web-services aws-lambda aws-cdk
我正在使用 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'",
Run Code Online (Sandbox Code Playgroud)
我lodash按如下方式导入,
import * as _ from "lodash";
Run Code Online (Sandbox Code Playgroud)
我按如下方式导入共享文件,
import { validator } from "./shared/validators" // This one works
import { validator } from "../../shared/validators" // This one doesn't work
Run Code Online (Sandbox Code Playgroud)
经过一番研究后我找到了答案。问题是 CDK 未部署 node_modules 文件夹以及包含 lambda 源文件的文件夹之外的其他文件夹。
创建 lambda 文件时,必须将根路径添加到“code”属性中,以便它将获取其中的所有文件夹/文件并部署到 lambda。
const pathToRoot = //absolute path to the root folder
const pathToHandler = //path to handler from root folder
const lambdaFunction: Function = new Function(construct, name, {
functionName: name,
code: Code.asset(pathToRoot),
handler: `${pathToHandler}/index.handler`,
runtime: Runtime.NODEJS_10_X
});
Run Code Online (Sandbox Code Playgroud)
更新
经过更多研究发现处理此问题的最佳方法是使用Lambda Layers。我已将节点模块文件夹添加为一层。
| 归档时间: |
|
| 查看次数: |
5136 次 |
| 最近记录: |