首页 > 解决方案 > 带有 Winston 记录器的 AWS Lambda 抛出 Runtime.ImportModuleError

问题描述

我正在尝试在 AWS Lambda 中实现 Winston 记录器(版本 3.2.1)。在此评论之后,我有以下代码:

const winston = require('winston');

const waitForLogger = async (logger) => {
  const loggerDone = new Promise((resolve) => logger.on('finish', resolve));
  logger.end();
  return loggerDone;
};

exports.handler = async (event) => {
  const logger = winston.createLogger({
    transports: [
      new winston.transports.Console(),
    ],
  });
  logger.log('info', 'some message');
  await waitForLogger(logger);

  return {
    statusCode: 200,
    body: 'test passed',
  };
};

但是在使用 Rollup 生成构建并使用 Terraform 部署函数并在 AWS 控制台上对其进行测试后,我收到此错误:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module './has-flag.js'",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module './has-flag.js'",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
    "    at Object.<anonymous> (/var/runtime/index.js:45:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:778:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)",
    "    at Module.load (internal/modules/cjs/loader.js:653:32)",
    "    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
    "    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)",
    "    at startup (internal/bootstrap/node.js:283:19)"
  ]
}

查看不同的模块,我发现“colors”模块需要“has-flag”,这实际上是“winston”的依赖项。

标签: node.jsamazon-web-servicesaws-lambdawinston

解决方案


请注意,Bunyan日志库与 Rollup 配合得很好,我已经能够创建 AWS Lambda 包并成功测试了日志记录。


推荐阅读