带有 CDK 的 JS/TS Lambda 上的 pdfkit 错误:ENOENT:没有这样的文件或目录,打开“/var/task/data.trie”

问题描述

我正在尝试将 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 按预期工作。