Aws lambda AWS Lambda是否支持AWS sdk v3?

Aws lambda AWS Lambda是否支持AWS sdk v3?,aws-lambda,aws-sdk-js,Aws Lambda,Aws Sdk Js,我基于cdk车间的一个小lambda函数。我正在用typescript编写lambda函数,通过一个管道进行部署,该管道创建一个包含lambda函数的云形成堆栈 我正在尝试在lambda中使用sdkv3。但随后我看到了相互矛盾的文档 这些错误是因为我试图使用V3而不应该使用,还是因为其他原因?处理程序设置正确,函数运行但失败,出现错误: { "errorType": "Runtime.ImportModuleError", "er

我基于cdk车间的一个小lambda函数。我正在用typescript编写lambda函数,通过一个管道进行部署,该管道创建一个包含lambda函数的云形成堆栈

我正在尝试在lambda中使用sdkv3。但随后我看到了相互矛盾的文档

这些错误是因为我试图使用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"
    ]
}
使用本研讨会中的代码不会生成节点_模块或层,但在开始之前,我想知道我是否可以在lambda上使用V3


谢谢

是的,您可以像使用任何其他JS库一样使用AWS SDK v3

Lambda的节点环境随附已安装的AWS SDK v2(上一版本),如您在此处所见:

因此,要使用v3,您应该将其与应用程序捆绑在一起,就像与任何其他依赖项捆绑在一起一样,并部署捆绑包()


实际上,即使在Lambda env上有SDK v2可用,最好还是自己将其与应用程序捆绑并部署。这样,您将始终使用指定的版本,而不是Lambda上的版本,并且可以随时更新。即使他们没有做出任何不兼容的更改,新的SDK版本(未使用您的特定应用程序进行测试)也有可能出现一些会破坏您的Lambda的错误(不太可能,但也有可能)。

这会使我的项目变得更复杂,但很好的建议,谢谢。关于在同一项目中构建多个单独的lambda函数,有什么建议吗?我是否必须为每个节点复制/安装节点_模块?(我正在使用CDK进行部署)我没有使用CDK(只有无服务器框架),所以我不知道这到底是如何工作的,但我不认为有理由增加node_模块。应该可以在一个项目中创建多个函数。虽然您可以在lambda中使用v3,但您必须自己包含它,我认为它还没有准备好用于lambda。我一直在尝试下载一个S3对象,但收效甚微。我可以让它在NodeJS工作,但不是当我部署到lambda时。考虑使用层来提供所需的v3SDK模块。这不会影响为您绑定的功能。@bdargan层很好,但是将您需要的所有aws sdk客户端填充到一个层中会使树抖动变得毫无价值,并增加lambda冷启动时间。
// 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;
}