为啥 datadog lambda 检测返回“datadog-lambda-js/handler.handler 未定义或未导出”?

Posted

技术标签:

【中文标题】为啥 datadog lambda 检测返回“datadog-lambda-js/handler.handler 未定义或未导出”?【英文标题】:Why does datadog lambda instrumentation return a `datadog-lambda-js/handler.handler is undefined or not exported`?为什么 datadog lambda 检测返回“datadog-lambda-js/handler.handler 未定义或未导出”? 【发布时间】:2022-01-13 16:51:39 【问题描述】:

Datadog AWS Lambda 工具对我来说似乎不可靠。每隔几次调用,我就会收到以下错误:

    "errorType": "Runtime.HandlerNotFound",
    "errorMessage": "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler is undefined or not exported",
    "stack": [
        "Runtime.HandlerNotFound: /opt/nodejs/node_modules/datadog-lambda-js/handler.handler is undefined or not exported",
        "    at HandlerNotFound.ExtendedError [as constructor] (/opt/nodejs/node_modules/datadog-lambda-js/runtime/errors.js:113:28)",
        "    at new HandlerNotFound (/opt/nodejs/node_modules/datadog-lambda-js/runtime/errors.js:131:42)",
        "    at load (/opt/nodejs/node_modules/datadog-lambda-js/runtime/user-function.js:151:15)",
        "    at Object.<anonymous> (/opt/nodejs/node_modules/datadog-lambda-js/handler.js:65:59)",
        "    at Module._compile (internal/modules/cjs/loader.js:999:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)",
        "    at Module.load (internal/modules/cjs/loader.js:863:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:708:14)",
        "    at Module.require (internal/modules/cjs/loader.js:887:19)",
        "    at require (internal/modules/cjs/helpers.js:74:18)"
    ]

要启动检测,我运行以下代码。

datadog-ci lambda instrument \
   -f my-lambda-name \
   -r my-region \
   -v 50 -e 15 \
   --service my-service \
   --env my-env \
   --version 1.0

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

根据运行时环境,您应该指向不同版本的数据狗层扩展。

例如,Python 使用 -v 50 -e 15,但 Node.js 处理程序应该使用不同的版本,-v 66 -e 16

所有这些都可以在文档中找到:https://docs.datadoghq.com/serverless/installation/nodejs/?tab=datadogcli

【讨论】:

以上是关于为啥 datadog lambda 检测返回“datadog-lambda-js/handler.handler 未定义或未导出”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在编译时不检查 lambda 返回类型?

一个 lambda 的返回类型可以通过返回值来推断,那么为啥不能是一个函数呢?

为啥我的 AWS Lambda 脚本返回“实例”而不是实例 ID?

为啥 aws lambda 调用客户端错误地返回 ClientExecutionTimeoutException?

为啥 AWS Lambda CFN S3 响应在删除事件时返回 403?

为啥 Enumerable#detect 需要 Proc/lambda?