【发布时间】:2021-05-13 17:36:12
【问题描述】:
我基于 cdk 研讨会here 建立了一个小型 lambda 函数。我正在 typescript 中编写 lambda 函数,通过管道进行部署,该管道创建包含 lambda 函数的云形成堆栈。
我正在尝试在 lambda 中使用 sdk v3,as demoed here。但后来我看到有冲突的文档here。
这些错误是因为我尝试使用 V3 而我不应该使用,还是出于其他原因?处理程序设置正确,函数运行但失败并出现错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@aws-sdk/client-sns'\nRequire stack:\n- /var/task/ReceiveMessageLoraThing.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@aws-sdk/client-sns'",
"Require stack:",
"- /var/task/ReceiveMessageLoraThing.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:999:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
" at Module.load (internal/modules/cjs/loader.js:863:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)",
" at internal/main/run_main_module.js:17:47"
]
}
文件部署为 js,并设置了正确的处理程序。如果我注释掉 require 语句,它工作正常:
// works
"use strict";
//const sns = require("@aws-sdk/client-sns");
exports.handler = async (event) => {
console.log("hello");
return true;
}
// doesn't work
"use strict";
const sns = require("@aws-sdk/client-sns");
exports.handler = async (event) => {
console.log("hello");
return true;
}
没有使用这个研讨会的代码生成的 node_modules 或层,但在我去那里之前,我想知道我是否真的可以在 lambda 上使用 V3。
【问题讨论】:
-
FWIW,您可以通过
docker run --rm -it --entrypoint /bin/bash amazon/aws-lambda-nodejs[:version]检查 AWS Lambda 运行时中的内容。 Node 14 版本中可用的预装包位于/var/runtime/node_modules,其中仅包含aws-sdk。 -
还有包
npm依赖于/var/lang/lib/node_modules/npm/node_modules,但你不能从你的处理程序中按名称要求它们,依赖它们可能是个坏主意
标签: aws-lambda aws-sdk-js