AWS Lambda 是否支持 aws-sdk v3?

Does AWS Lambda support aws-sdk v3 or not?

我基于 cdk workshop here 建立了一个小的 lambda 函数。我正在用打字稿编写 lambda 函数,通过创建包含 lambda 函数的云形成堆栈的管道进行部署。

我正在尝试在 lambda 中使用 sdk v3,as demoed here. But then I see conflicting documentation 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。

是的,您可以使用 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)。

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