使用 cdk 部署 lambda 无法识别 sdk nodejs v3
deploying lambda with cdk doesn't recognize sdk nodejs v3
我正在学习 aws lambda、cdk 和 dynamodb,作为测试,我正在尝试将用 aws-sdk js v2 编写的 lambda 函数代码更新到 v3,但在部署后它不起作用。我直接在 Web 控制台中将相同的代码复制粘贴到测试 lambda 函数中,它运行良好。
这是 cloudwatch 中显示的错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@aws-sdk/client-dynamodb'\nRequire stack:\n- /var/task/hitcounter.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-dynamodb'",
"Require stack:",
"- /var/task/hitcounter.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:1072:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)",
" at Module.load (internal/modules/cjs/loader.js:937:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:778:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)",
" at internal/main/run_main_module.js:17:47"
]
}
是否有我必须设置或更改的与 cdk 相关的设置,以允许我使用 @aws-sdk v3?我不想使用 v2,因为我是从头开始一个项目,而是使用较新的 API。
Lambda 环境没有 SDK v3。你必须捆绑它。使用 NodejsLambda 构造,它将使用 esbuild 为您捆绑代码。
撰写本文时的 AWS Lambda NodeJS environments come with AWS SDK v2.952.0。这对以下任何运行时都有效:Node.js 10、Node.js 12、Node.js 14.
AWS official video 关于如何使用 Lambda 层为您的 Lambda 提供自定义 SDK 版本(包括 v3)。
或者,由于您使用 AWS CDK 和 NodejsFunction 构造,您可以通过在 node_modules 道具中声明它来直接将其捆绑在您的 Lambda 工件中,如 here 所述。请记住,如果采用这种方式,您需要在 package.json 文件中将 aws-sdk v3 声明为依赖项。
我正在学习 aws lambda、cdk 和 dynamodb,作为测试,我正在尝试将用 aws-sdk js v2 编写的 lambda 函数代码更新到 v3,但在部署后它不起作用。我直接在 Web 控制台中将相同的代码复制粘贴到测试 lambda 函数中,它运行良好。 这是 cloudwatch 中显示的错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@aws-sdk/client-dynamodb'\nRequire stack:\n- /var/task/hitcounter.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-dynamodb'",
"Require stack:",
"- /var/task/hitcounter.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:1072:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)",
" at Module.load (internal/modules/cjs/loader.js:937:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:778:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)",
" at internal/main/run_main_module.js:17:47"
]
}
是否有我必须设置或更改的与 cdk 相关的设置,以允许我使用 @aws-sdk v3?我不想使用 v2,因为我是从头开始一个项目,而是使用较新的 API。
Lambda 环境没有 SDK v3。你必须捆绑它。使用 NodejsLambda 构造,它将使用 esbuild 为您捆绑代码。
撰写本文时的 AWS Lambda NodeJS environments come with AWS SDK v2.952.0。这对以下任何运行时都有效:Node.js 10、Node.js 12、Node.js 14.
AWS official video 关于如何使用 Lambda 层为您的 Lambda 提供自定义 SDK 版本(包括 v3)。
或者,由于您使用 AWS CDK 和 NodejsFunction 构造,您可以通过在 node_modules 道具中声明它来直接将其捆绑在您的 Lambda 工件中,如 here 所述。请记住,如果采用这种方式,您需要在 package.json 文件中将 aws-sdk v3 声明为依赖项。