Node.js:使用Lambda层的ES import后未找到模块

0

【以下的问题经过翻译处理】 我们正在尝试使用AWS SDK v3模块来部署Lambda函数。引入语句使用标准的ES语法,并在本地环境中运行良好,在将整个模块打包进函数时也能正常运行:

import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';

为了提高效率并实现重用,我们将模块迁移至了一个layer中。当我们运行函数(尝试使用Node.js 14和16运行时),我们依然收到如下错误:

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@aws-sdk/client-sesv2' imported from /var/task/index.js

如果我们删除ES语法并使用require语句的CommonJS语法,则可以正确加载模块。但是我们更希望使用现代语法以及与之相伴的性能提升。根据AWS文档,node.js lambda函数支持ES引入于Node.js 14.xNode.js 16.x中。

有没有其他人遇到过这个问题,并找到了解决方案?

profile picture
EXPERTE
gefragt vor 2 Jahren59 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 AWS支持已经确认我们无法在ES中利用层:

当在Lambda中使用模块类型时,似乎不支持从层中导入ESM模块。……这个阻碍了我们从层中导入ES模块的Node功能,因为ESM加载器在node中不支持“NODE_PATH”变量。

AWS正在努力支持ES,但这意味着我们失去了层的功能。支持提供了一个我们将尝试的包装器解决方法。与我们在这里找到的内容相符。希望这能为其他人节省我们上周经历的头痛。

profile picture
EXPERTE
beantwortet vor 2 Jahren

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen