问题描述
我正在尝试将 pdfkit v.0.12.1 与 AWS CDK 和 Lambda 函数一起使用(尝试了 typescript 和 js)。 当我尝试运行它时,出现此错误:
错误:ENOENT:没有那个文件或目录,打开'/var/task/data.trie Lambda 看起来像这样:
const PDFKIT = require("pdfkit")
const pdfPromise = new Promise(resolve => {
const doc = new PDFKIT()
doc.text('hello pdf Kit...Please work',100,50)
doc.end()
const buffers = []
doc.on("data",buffers.push.bind(buffers))
doc.on("end",() => {
const pdfData = Buffer.concat(buffers)
resolve(pdfData)
})
})
Lambda 运行时是 Nodejs_12_x 所有代码都导入到 Lambda 中,但我不确定是否可以运行所有代码。 Lambda 文件大小约为 650kb。 任何有关如何解决此问题的帮助表示赞赏。
解决方法
pdfkit 未在 lambda 函数中正确加载。 我通过遵循 this advice 向 CDK 中的 lambda 函数添加外部依赖项解决了这个问题。
基本上,使用单独的节点模块文件夹在 CDK 中为您的 lambda 创建一个单独的文件夹。在部署时,所有这些都将打包在一起以提供可用的依赖项。
之后,pdfkit 按预期工作。