我基于cdk研讨会的here编写了一个小的lambda函数。我正在用typescript编写lambda函数,通过创建包含lambda函数的云形成堆栈的管道进行部署。
我正在尝试使用lambda,as demoed here中的sdk v3。但随后我看到了相互冲突的文档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。
发布于 2021-02-14 07:16:15
可以,您可以使用AWS SDK v3,就像使用任何其他JS库一样。
Lambda的节点环境附带了安装的AWS SDK v2 (前一个),您可以在此处看到:https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html
因此,要使用v3,您应该像绑定任何其他依赖项一样将其与应用程序捆绑在一起,并部署该捆绑包(https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html)。
实际上,即使可以在Lambda环境中使用SDK v2,最好还是自己将其与您的应用程序捆绑在一起并进行部署。这样,您将始终使用您指定的版本,而不是Lambda上的版本,并且可以随时更新。即使他们没有做任何不兼容的更改,新的SDK版本也总是有可能会有一些bug,这将破坏您的Lambda (非常不可能,但也是有可能的)。
https://stackoverflow.com/questions/66129993
复制相似问题