使用 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.

A​​WS official video 关于如何使用 Lambda 层为您的 Lambda 提供自定义 SDK 版本(包括 v3)。

或者,由于您使用 AWS CDK 和 NodejsFunction 构造,您可以通过在 node_modules 道具中声明它来直接将其捆绑在您的 Lambda 工件中,如 here 所述。请记住,如果采用这种方式,您需要在 package.json 文件中将 aws-sdk v3 声明为依赖项。