我正在使用 AWS CDK (
v2.140.0
) 部署一个用 ES6 JavaScript 编写并具有 Node v20.x
运行时的 lambda 函数。项目的根目录包含一个 package.json
文件,我在其中定义 "type": "module"
。我正在使用 aws CDK 和 SDK 软件包,但在我的应用程序代码中没有使用任何第 3 方库。
我的文件结构如下:
bin
cdk.js
lib
my-stack.js
src
index.js
package.json
cdk.json
我能够成功合成 lambda 并将其部署到 AWS。 lambda 按 Eventbridge 计划运行并在正确的时间调用。
但是,我在 Cloudwatch 中收到以下错误:
SyntaxError: Cannot use import statement outside a module
我的
index.js
文件写为:
import { foo } from './foo-service.js';
export const handler = async () => {
// do stuff with foo
};
我已经深入了一些兔子洞,并尝试了这篇SO帖子中的大部分建议,但没有成功。
index.js
文件更改为 index.mjs
package.json
目录中创建额外的 src
文件并定义 "type": "module"
非常感谢任何见解或指导。
最终,我的问题来自于 AWS 教程,其中 lambda 函数完全包含在单个
index.js
文件中,在我的情况下,我的处理程序需要该文件之外的模块。我需要将我的 cdk 实现更改为:
// BEFORE
const lambdaFn = new Lambda.Function(this, 'lambda-id', {
runtime: Lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: new Lambda.InlineCode(fs.readFileSync('./src/index.js', { encoding: 'utf-8' }))
});
// AFTER
const lambdaFn = new Lambda.Function(this, 'lambda-id', {
runtime: Lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: Lambda.Code.fromAsset('./src', { exclude: ['*.js'] })
});