使用AWS Lambda在NodeJS中找不到MySQL

我有下面的代码,我想要执行。 我试过要求mysql和node-mysql,它们都给我同样的错误:

码:

var AWS = require("aws-sdk"); var mysql = require("mysql"); exports.handler = (event, context, callback) => { try { console.log("GOOD"); } catch (error) { context.fail(`Exception: ${error}`) } }; 

错误:

 { "errorMessage": "Cannot find module 'mysql'", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:417:25)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)", "Object.<anonymous> (/var/task/index.js:2:13)", "Module._compile (module.js:570:32)", "Object.Module._extensions..js (module.js:579:10)", "Module.load (module.js:487:32)", "tryModuleLoad (module.js:446:12)", "Function.Module._load (module.js:438:3)" ] } 

如何使用lambda将mysql导入到节点中或者让它工作?

哦,所以这个预计会发生。

问题在于AWS Lambda在另一台机器上运行,您无法将该特定机器configuration为在自定义环境中运行。 但是,您可以将zip或node-mysql的节点模块打包并上传到AWS Lambda。 步骤是,

  1. npm install mysql --save
  2. 压缩你的文件夹, 包括你的节点包
  3. 上传此zip文件作为AWS Lambda中的代码。

您还可以使用无服务器框架采取更好的方法。 更多信息在这里 。 在这种方法中,您编写了一个YAML文件,其中包含您想要部署您的lambda的所有详细信息和configuration。 在你的lambdaconfiguration下,在package – > include部分下指定你的节点模块的path(比如nodemodule/** )。 这将打包您的代码与您的要求。 稍后使用命令行,你可以部署这个lambda。 它使用AWS Cloudformation服务,是部署资源的最佳方式之一。

有关使用无服务器框架打包的更多信息可以在这里find。

注意:要使用无服务器框架,有几个步骤,例如为用户获取API密钥,在IAM中设置正确的权限等。这些只是初始设置,不需要以后。 在使用无服务器框架进行部署之前,请执行这些操作。

希望这可以帮助!