2017-07-20 351 views
1

我有以下我想要执行的代码。我曾尝试要求MySQL和节点mysql和他们都给予我同样的错误:使用AWS Lambda在NodeJS中找不到MySQL使用AWS Lambda

代码:

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来节点或让这个工作?

+0

你安装了mysql吗? 'npm install mysql'或者其他的东西? – CanSpice

+0

这是在aws lambda。我不知道该怎么做。 aws-sdk我可以在不导入的情况下调用。 – applecrusher

+0

我想我需要上传一个package.json文件,而不是使用内联编辑器。 – applecrusher

回答

2

Ohk因此预计会发生这种情况。

问题是AWS Lambda在不同的机器上运行,您无法配置该特定机器在自定义环境中运行。但是,您可以将节点模块mysqlnode-mysql打包为zip并上传到AWS Lambda。操作步骤,

  1. npm install mysql --save
  2. 邮编您的文件夹和包括您的节点包
  3. 上传这个zip文件作为AWS LAMBDA你的代码。

您还可以通过使用无服务器框架采取更好的方法。更多信息here。在这种方法中,您编写了一个YAML文件,其中包含您想要用来部署lambda的所有细节和配置。在您的lambda配置下,在package - >include部分指定节点模块的路径(例如,nodemodule/**)。这会将您的代码与您的代码一起打包。后来使用命令行,你可以部署这个lambda。它使用AWS Cloudformation服务,并且是部署资源的最佳方式之一。

有关使用无服务器框架打包的更多信息可以在here找到。

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

希望这会有所帮助!

+0

它的确如此。谢谢!我只希望Lambda能够在内联编辑器中检测外部库。我做了一个错误的假设,就像aws,已经在那里预先配置好了。 – applecrusher