【问题标题】:Cannot find MySQL in NodeJS using AWS Lambda使用 AWS Lambda 在 NodeJS 中找不到 MySQL
【发布时间】:2017-12-25 12:30:02
【问题描述】:

我想执行以下代码。我试过要求 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 导入节点或让它工作?

【问题讨论】:

  • 你安装mysql了吗? npm install mysql 或类似的东西?
  • 它在 aws lambda 中。我不知道该怎么做。我无需导入即可调用的 aws-sdk。
  • 我想我需要上传一个 package.json 文件而不是使用内联编辑器。
  • 我尝试上传一个 package.json 文件并将其作为依赖项。它不像在弹性豆茎上那样工作

标签: mysql node.js amazon-web-services aws-lambda


【解决方案1】:

我在使用 knex 时遇到过这种情况,尽管我的 package.json 中有 mysql

我必须在我的 lambda(或它引用的文件)中添加 require('mysql'),以便无服务器在部署期间对其进行打包。

【讨论】:

    【解决方案2】:

    如果使用 package.json,只需在下面添加并运行“npm install”

    { “依赖”:{ “mysql”:“2.12.0” } }

    【讨论】:

      【解决方案3】:

      如果任何机构需要替代方案,

      您可以使用免费的cloud9 IDE打开lambda函数并使用终端窗口对lambda函数文件夹执行npm init,这将提供节点包文件,然后可用于安装依赖项。

      【讨论】:

        【解决方案4】:

        哦,所以这应该会发生。

        问题在于 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 中设置正确的权限等。这些只是初始设置,以后不需要。请在使用无服务器框架进行部署之前执行这些操作。

        希望这会有所帮助!

        【讨论】:

        • 确实如此。谢谢!我只是希望 Lambda 能够在内联编辑器中检测到外部库。我做了一个错误的假设,它就像 aws,已经预先配置在那里。
        猜你喜欢
        • 2019-10-13
        • 2022-11-24
        • 2017-07-13
        • 2020-06-08
        • 1970-01-01
        • 2020-08-06
        • 2020-07-16
        • 2021-02-20
        • 2021-04-20
        相关资源
        最近更新 更多