首页 > 解决方案 > TypeError : i 不是函数(用 epsagon 包裹的 AWS Lambda)

问题描述

当我将 npm 模块从 9.6.0 升级到 11.5.x 时,会在 lambda 上弹出此错误。我正在使用无服务器框架来开发和部署微服务。使用 Epsagon 包装器进行更好的监控。

在过去的 3 天里,我一直在努力解决这个错误。任何帮助将不胜感激。

AWS lambda 运行时:节点 10.x

以下是一些 npm 包 "serverless-webpack": "^5.3.3", "terser-webpack-plugin": "^4.1.0", "webpack": "^4.44.1" "epsagon": "^ 1.82.0", "got": "^11.6.0", (got 9.0.6, 没有问题)

虽然我无法粘贴整个代码片段,但以下是一个片段。如果我在一个简单的 index.js 文件中使用相同的代码并运行它,那么我将无法重现此问题。

const { body } =  await got(path, {
    headers: { 'custom-key': customKey },
    responseType: 'json',
    method: 'POST',
    json: { ts: i1599227703000 },
});

以下日志片段来自 cloudWatch。

{
  "errorType": "TypeError",
  "errorMessage": "i is not a function",
  "stack": [
    "TypeError: i is not a function",
    "    at ClientRequest.patchedCallback (/opt/nodejs/node_modules/epsagon/dist/bundle.js:1:60626)",
    "    at Object.onceWrapper (events.js:286:20)",
    "    at ClientRequest.emit (events.js:203:15)",
    "    at ClientRequest.EventEmitter.emit (domain.js:448:20)",
    "    at ClientRequest.e.emit.f [as emit] (/var/task/epsagon_handlers/abcdNameChanged-epsagon.js:2:1080726)",
    "    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:565:21)",
    "    at HTTPParser.parserOnHeadersComplete (_http_common.js:111:17)",
    "    at TLSSocket.socketOnData (_http_client.js:451:20)",
    "    at TLSSocket.emit (events.js:198:13)",
    "    at TLSSocket.EventEmitter.emit (domain.js:448:20)"
  ]
}

标签: node.jswebpackaws-lambdaserverless-framework

解决方案


最后我可以破解它。如果我们通过 epsagon webapp 启用 epsagon 自动跟踪,它实际上会在该 lambda 中添加一个名为 epsagon-node-layer 的层。

禁用自动跟踪有助于避免出现此错误。

更多详情请参考:https ://github.com/epsagon/epsagon-node/issues/295


推荐阅读