AWS Lambda 是否支持 aws-sdk v3?

2023-12-24

我在 cdk 研讨会上创建了一个小型 lambda 函数here https://cdkworkshop.com/20-typescript。我正在打字稿中编写 lambda 函数,通过管道进行部署,该管道创建包含 lambda 函数的云形成堆栈。

我正在尝试在 lambda 中使用 sdk v3,如此处演示的 https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/lambda-create-table-create-lambda-function.html。但后来我看到了相互矛盾的文档here https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html.

这些错误是因为我尝试使用 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 https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html

因此,要使用 v3,您应该将其与您的应用程序捆绑在一起,就像任何其他依赖项一样,然后部署该捆绑包(https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html).

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

编辑(2022-11-22):Node.js 18 Lambda 运行时包括 SDK v3,但不包括 v2 (https://aws.amazon.com/blogs/compute/node-js-18-x-runtime-now-available-in-aws-lambda/ https://aws.amazon.com/blogs/compute/node-js-18-x-runtime-now-available-in-aws-lambda/).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Lambda 是否支持 aws-sdk v3? 的相关文章

随机推荐

  • 编辑用户出错,临时更改了app.user.username,如何解决?

    我们为用户使用 Symfony2 框架和 FOSUserBundle 所以我们有自己的UserBundle 它继承自FOSUserBundle 问题是 当我们发送用于编辑密码错误的用户的表单时 标头中显示的 app user usernam
  • 在 spring mvc 控制器中使用服务和 DAO

    我正在构建一个 Web 应用程序 主要由后端 数据库数据的 CRUD 操作组成 在某些情况下 我必须编写业务逻辑 我确信随着我们深入开发 我们将构建更多的业务逻辑 目前 对于我创建的每个 UI 屏幕 我创建一个模型类 Service 类 D
  • 对多个源文件使用一次 #define

    Visual C 中有没有办法在 cpp 文件中 define 某些内容并在其他 cpp 文件中定义它 至少有两个选择 将定义放入头文件中 并将该头文件包含在需要定义的所有源文件中 Use the D编译器选项 http msdn micr
  • Bootstrap 3 将页脚对齐到底部。不固定

    我正在为我正在设计的网站使用 Bootstrap 3 我想要一个像这个示例一样的页脚 Sample http wrapbootstrap com preview WB0B348C6 请注意 我不想修复它 因此 bootstrap navba
  • 我可以在 Action 或 Func 委托中使用参数吗?

    当我尝试在操作委托中使用参数时 private Action
  • Eclipse 安装软件显示“无法完成请求”

    我正在使用 Eclipse Luna Service Release 1 4 4 1 当我尝试安装新软件时 它给出了一些错误消息 例如Cannot complete the request This installation has not
  • 如何在 UILabel 中换行

    我有一个 UILabel 位于自定义 UITableViewCell 内 我试图将单词包含在 UILabel 内 但是我遇到了一些问题 这是 UITableViewCell 在 Interface Builder 中的外观 UILabel
  • 解决错误:“Timer”是“System.Windows.Forms.Timer”和“System.Timers.Timer”之间的不明确引用

    我正在尝试创建一个 Windows 窗体应用程序 并且我想实现一个计时器 public void timerStart DateTime now DateTime Now DateTime finish base taskEndDate f
  • 用于多个活动的 ViewPager

    我正在尝试实现一个具有多个活动的 ViewPager 我正在关注这个example https github com JakeWharton Android ViewPagerIndicator但这看起来并不使用多个活动 而是使用片段 如果
  • 有没有一种方法无需在 SQL Server 中进行转换即可获取布尔值?

    我发现很奇怪的是 像这样的简单代码无效 select from table where field true 另一种选择显然是 select from table where field true 好吧 我想我可以忍受 由于某种原因 我最近
  • 制作背景图像随按钮大小缩放

    我正在尝试向 Win Forms 应用程序中的几个按钮添加一些背景图像 这三张图像的尺寸不同 即像素尺寸不匹配 一张为 128x128 另一张为 256x256 我需要按钮的大小相同 否则 GUI 会非常不对称 在不更改实际图像文件的情况下
  • 将表达式转换为数据类型日期时间时出现算术溢出错误

    这个 select 语句给出了算术错误消息 SELECT CAST FLOOR CAST LeftDate AS DECIMAL 12 5 AS DATETIME LeftDate FROM Table WHERE LeftDate gt
  • minitest:未定义的方法“get”

    我需要用 minitest 测试我的控制器 我试过了 describe CommentsController do it should get index do get index assert response success end e
  • 用 Java 创建 Excel 文件

    我想创建一个Excel文件并写入数据 就像用Java写入文本文件一样 我尝试更改文件扩展名 txt to xls 但我想将 Excel 文件中的字母加粗 我怎样才能做到这一点 我尝试过使用 JXL API 但每次我必须创建标签时我都不想添加
  • 双射“整数 <-> 字符串”函数

    这是我试图为其创建最佳解决方案的问题 我有一组有限的非负整数 范围为 0 N 我需要能够将这个集合中的每个数字表示为一个字符串 并且能够将这样的字符串向后转换为原始数字 所以这应该是一个双射函数 附加要求是 数字的字符串表示应该至少在某种程
  • 调用Dispose不会清理对象C#使用的内存? [复制]

    这个问题在这里已经有答案了 直觉告诉我 Dispose 旨在用于运行用户定义的代码 这些代码会释放不会自动释放的资源 例如文件句柄 网络句柄 数据库连接等 GC Collect GC WaitForPendingFinalizers GC
  • 非捕获组内的正则表达式捕获组

    在Python中 如何捕获非捕获组中的组 换句话说 如何重复包含捕获组的非捕获子模式 一个示例是捕获导入字符串上的所有包名称 例如 字符串 导入熊猫 操作系统 系统 将返回 pandas os 和 sys 以下模式捕获第一个包并获取第二个包
  • 为什么 Keras 不需要自定义损失函数的梯度?

    据我了解 为了通过梯度下降更新模型参数 算法需要在某个点计算误差函数 E 对输出 y 的导数 dE dy 尽管如此 我发现如果你想在 Keras 中使用自定义损失函数 你只需要定义 E 而不需要定义它的导数 我缺少什么 每个丢失的函数都会有
  • SharePoint 自定义 JS 文件最佳实践

    我制作了一个自定义母版页 我还制作了一个自定义 CSS 文件 并将其上传到 样式库 我通过以下方式链接到此 CSS 文件
  • AWS Lambda 是否支持 aws-sdk v3?

    我在 cdk 研讨会上创建了一个小型 lambda 函数here https cdkworkshop com 20 typescript 我正在打字稿中编写 lambda 函数 通过管道进行部署 该管道创建包含 lambda 函数的云形成堆