Node.js: module not found using ES import with Lambda layers

1

We're trying to deploy a Lambda function with AWS SDK v3 modules. The imports are standard ES syntax and work fine in a local setup, and work if we package the entire module into the function:

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

For efficiency and reuse, we moved the modules into a layer. When we run the function (tried with Node.js 14 and 16 runtimes), we continue to receive:

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

If we strip out the ES pieces and use CommonJS syntax with require statements, the modules load correctly. Obviously we would prefer the modern syntax and the performance gains that go with it. According to AWS docs, node.js lambda functions support ES imports in Node.js 14.x and Node.js 16.x.

Has anyone else run into this and found a solution?

질문됨 2년 전3679회 조회
2개 답변
0
수락된 답변

Unfortunately AWS support has confirmed we can't utilize layers with ES:

importing ESM modules from layers seems to not be supported when using a module type in Lambda. [...] this is a Node feature blocking us to import ES modules from a layer as "NODE_PATH" variable is not supported by the ESM loader in node

Disappointing that AWS is making headway on supporting ES, but it means we lose the functionality of layers. Support provided a wrapper workaround that we'll be trying. It corresponds with what we found here. Hopefully this saves someone else the headache we've gone through the last week.

답변함 2년 전
profile picture
전문가
검토됨 6달 전
0

Is this still the case with node18.x???

답변함 일 년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠