如何从Node.js中的Lambda函数在PostgreSQL RDS上运行SQL?

时间:2015-08-30 10:44:06

标签: postgresql lambda

我在Lambda funcion中有这段代码:

sql="SELECT ...";
var pg = require('pg');
var connectionString = 'postgres://...';

var client = new pg.Client(connectionString);
client.connect();
var query = client.query(sql);
query.on('end', function() { client.end(); });

当我从EC2运行时,它运行正常。当我从Lambda运行时,我得到错误:无法找到模块' pg'

3 个答案:

答案 0 :(得分:8)

我是Node JS中的超级菜鸟,但我真的想尝试AWS Lambda。这是我采取的步骤。我使用的是Ubuntu 14.04。

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo ln -s /usr/bin/nodejs /usr/bin/node

mkdir the_function && cd the_function
mkdir node_modules 
npm install pg

******Now create a file index.js and paste the content of your funcion.
console.log('Loading S2 Function');
var pg = require("pg");

exports.handler = function(event, context) {   
    var conn = "pg://user:password@host:5432/bd_name";

    var client = new pg.Client(conn);
    client.connect();

    var query = client.query("SELECT * FROM BLA WHERE ID = 1");
    query.on("row", function (row, result) {
        result.addRow(row);
    });
    query.on("end", function (result) {
        var jsonString = JSON.stringify(result.rows);
        var jsonObj = JSON.parse(jsonString);
        console.log(jsonString);
        client.end();
        context.succeed(jsonObj);
    });
 };

******Now zip the contents of the_function folder (not the_function folder itself)

您可以查看此AWS链接的官方样本:http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-create-function.html

答案 1 :(得分:0)

您可以轻松地将预先定义的libs导入到lambda中。例如,你只能使用boto3和core for python,对于java你可以只使用core。 http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html 您无法以简单的方式导入任何其他库。 你可以尝试使用“艰难的方式”。 在这种情况下,您应该将所有必需的库保存到s3(或您可以从lambda访问的其他位置),然后复制到lambda环境(/ tmp)并在反射的帮助下导入它。

答案 2 :(得分:0)

  

错误:无法找到模块' pg'

就我而言,我只是上传了index.js。我们还需要打包第三方节点模块。

  1. 创建index.js(名称可能因处理程序名称而异)
  2. 运行npm install package
  3. 最好为所有依赖项创建package.jsonrun mpn install
  4. 确认node_modules文件夹在同一目录中创建。
  5. 压缩这些内容(index.js和node_modules文件夹)并上传zip。
  6. 您可以直接上传或使用S3。
  7. 有关详细信息,请阅读他们的官方文档 - Creating a Deployment Package (Node.js)
  8.   

    现在我得到:无法导入模块'索引':错误。我的函数必须被称为index.js

    在我的情况下,我正在压缩整个目录而不是它的内容。所以你需要真正做到 -

    zip -r deploymentpkg.zip ./*
    

    而不是

    zip -r deploymentpkg.zip folder