1

我正在使用 AWS Lambda 服务从上传到 S3 存储桶的 CSV 文件中读取内容并将其转换为 JSON 格式。我在 csv 到 json 阶段陷入困境。

    const AWS = require('aws-sdk');
    const csvtojson = require('csvtojson');
    const S3 = new AWS.S3();

    exports.handler = async (event,content,callback) => {
        console.log(' inside trigger ')
        const src_bkt = event.Records[0].s3.bucket.name;
        const src_key = event.Records[0].s3.object.key;

        try {
            const params = {Bucket: src_bkt, Key:src_key}

       // get csv file and create stream
            const stream = S3.getObject(params).createReadStream();
            // convert csv file (stream) to JSON format data
            const json = await csvtojson().fromStream(stream);
            console.log(json);
      }
      catch (err) {
          console.log(JSON.stringify(err))
        return {
          statusCode: err.statusCode || 400,
          body: err.message || JSON.stringify(err.message)
        }
      }
    };

错误消息: “errorType”:“Runtime.ImportModuleError”,“errorMessage”:“错误:找不到模块'csvtojson'”,

我试图转换 lambda 上的节点模块来检查运气。请分享任何建议。

4

1 回答 1

1

您需要将 lambda 打包并部署为 zip 文件。该文件应包含带有处理函数的 javascript 文件以及node_modules带有所有依赖项的目录。

压缩文件结构。

handler.js

节点模块/

....................../csvtojson

如何设置项目

  • 初始化一个项目文件夹,例如my-projectusing npm init,它将为您创建一个 package.json 文件
  • 在中创建处理函数handler.js
  • 使用 安装 csv2json npm install csv2json --save,现在您将看到node_modules创建的目录

  • 压缩my-project目录,所以你有my-project.zip,zip应该直接包含handler.jsnode_modules

参考:

https://aws.amazon.com/premiumsupport/knowledge-center/lambda-deployment-package-nodejs/

希望这可以帮助。

于 2020-01-04T12:42:39.833 回答