我使用AWS CDK的NodejsFunction定义了一个lambda函数。
我在CDK的node_modules中安装了我想在lambda函数中使用的模块。
当我执行同一个本地调用时,有些模块成功,有些模块失败。
当错误发生时,错误信息"File not found in '/var/task/…'"会显示出来。
这是否意味着某些模块可以与NodejsFunction一起使用,而有些则不能?
lambda-stack.ts
new lambda.NodejsFunction(this, 'SampleFunction', {
runtime: Runtime.NODEJS_14_X,
entry: 'lambda/sample-function/index.ts'
})
λ/样本函数索引。t(使用'date-fns') ->成功了!
import { format } from 'date-fns'
export const handler = async () => {
try {
console.log(format(new Date(), "'Today is a' eeee"))
} catch (error) {
console.log(error)
}
}
λ/样本函数索引。t(使用'chrome-aws-lambda') ->失败的
const chromium = require('chrome-aws-lambda')
export const handler = async () => {
try {
const browser = await chromium.puppeteer.launch()
} catch (error) {
// Cannot find module '/var/task/puppeteer/lib/Browser'
console.log(error)
}
}
λ/样本函数索引。t(使用'pdfkit') ->失败的
const PDFDocument = require('pdfkit')
export const handler = async () => {
try {
const doc = new PDFDocument()
} catch (error) {
// no such file or directory, open '/var/task/data/Helvetica.afm'
console.log(error)
}
}
看起来和";chrome-aws-lambda"是使用一些二进制文件的包,您需要验证这些二进制文件是否在lambda.
中找到。当你在后台使用'new lambda. nodejsfunction()'创建一个lambda时,会有一个esbuild进程将所有文件捆绑成一个,所以请确保在synth期间不会看到任何与该构建相关的错误。
为了验证这是问题,你可以尝试用node_modules上传你的lambda,并检查它是否工作。
可选:
- 查看(或创建)lambda layer">
- 将你的lambda与所有依赖关系构建为docker映像,并设置lambda运行该docker。